Я запустил этот код на MatLab:
function main
fimplicit (@(x,y)f(x,y),[2 5])
end
function fun = f(x,y)
nc=1.45; %cladding
nf=1.5;
ns=1.4; %substrate
h=5; %width of waveguide
kappa=sqrt(x^2*nf^2-y.^2);
gammas=sqrt(y^2-x^2*ns^2);
gammac=sqrt(y^2-x^2*nc^2);
z=sin(h.*kappa);
%TE mode
fun=z.*(kappa.^2-gammas.*gammac)-cos(h.*kappa).*(gammac+gammas).*kappa;
end
При увеличении масштаба (2.5,3.5):
Уменьшение масштаба и последующее увеличение масштаба в одном и том же месте
Как мне узнать, какой из этих трех вариантов правильный, и есть ли способ избавиться от таких ошибочных сюжетов?
Аналогично в Десмосе
решение1
Матлабнеявныйявляется превосходной функцией, чтобы иметь представление о том, как ведет себя функция, заданная неявно в терминах ее переменных. Однако, если ваша функция не «хороша», она может скрывать или раскрывать некоторые детали, в зависимости от диапазона, который вы строите. Следуя документации Matlab,
Советы
- При увеличении масштаба диаграммы fimplicit пересчитывает данные, что может выявить скрытые детали.
Функция Matlab численно оценит функцию, чтобы найти пары (x,y)
для построения графика, и автоматически выберет несколько точек, поэтому мелкие детали могут исчезнуть, когда пределы осей слишком велики (небольшое количество точек для построения кривых). Вы можете попробовать увеличить свойство MeshDensity, чтобы добавить больше точек к вашим кривым, чтобы проверить, какая из них правильная:
fimplicit(f,'MeshDensity',500) % 151 is the default. Increase this number to add more evaluation points per direction