用数值方法求解超越方程

时间:2013-11-18 14:36:25

标签: matlab numerical-methods equation-solving

我想用数字解决一个超越方程。我已经使用函数'solve'来解决这个问题,但与图解解决方案相比,我的结果是多种多样的。我的代码写在下面,我正在发送图形解决方案结果。

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将是从0到2.0的变量,间隔为0.5。图形结果为:m = 0 neff为1.7299但图形解为1.75 m = 0.5 neff为1.678但图形解为1.71 m = 1.0 neff为1.608但图形解为1.65 m = 1.5 neff为1.523但图形解为1.55 m = 2.0 neff是1.451,但图形解是1.452

有人可以帮帮我,告诉我错吗?还有其他任何功能可以用来代替'解决'。

感谢。

1 个答案:

答案 0 :(得分:0)

原则上,您需要执行类似

的操作
fun = @(hd) ((hd)-m*pi)-2*atan(sqrt(r^2/(hd^2)-1));
fsolve(fun, 1.)

我解决了合并值hd=h*d,以避免术语h*d-m*pisqrt(r^2/(hd^2)-1)中的截断错误。