Я хочу решить одно трансцендентное уравнение численно. Я использовал функцию «решить» для решения, но мои результаты различаются по сравнению с графическим решением. Мой код написан ниже, и я отправляю результаты графического решения.Решение трансцендентного уравнения по численному методу
clear all;
n1=1.77;
n2=1.45;
d=1e-6;
lambda = 1e-6;
ko = 2*pi/lambda;
A=(ko*n1)^2;
B=(ko*n2)^2;
r=(ko*d)*sqrt(n1^2-n2^2);
syms h;
s=((h*d)-m*pi) == 2*atan(sqrt(r^2/(h^2*d^2)-1));
solve (s)
prop=sqrt(A-ans^2);
neff=(prop*lambda)/(2*3.14)
где m будет varries от 0 до 2.0 с интервалом 0,5. Графические результаты: m = 0 neff равно 1.7299, но графическое решение составляет 1,75 м = 0,5 нефф 1,678, но графическое решение 1,71 м = 1,0 нефф составляет 1,608, но графическое решение 1,65 м = 1,5 нефф составляет 1,523, но графическое решение составляет 1,55 м = 2.0 neff равен 1.451, но графическое решение - 1.452.
Может кто-нибудь, пожалуйста, помогите мне и скажите мне о вине? Также есть ли какая-либо другая функция вместо «решить».
Спасибо.
Вы отметили эти численные методы, но используете символическую математику ('syms' и' solve'). Если вы пытаетесь получить числовое решение, вы, вероятно, должны использовать численный корневой искатель: 'fzero' для 1-D. Если вы используете 'solve', вы должны заменить' pi' на 'sym (pi)'. Также должен ли '3.14' на последней строке на самом деле быть' pi'? – horchler
благодарит за ответ, но поскольку я плохо разбираюсь в программировании, не могли бы вы рассказать мне, как это сделать с помощью fzero, поскольку я пытаюсь и получаю ошибки :( – Rizwan