用fzero求解一个非线性方程多个解的问题
x=0.01
for w=linspace(3\2*x+0.01,1,10)
b=fzero('fz',w);
W=[W,b];
end
调用的函数为:function f=fz(y)
f=cos(Fa)*cos(Fb)-2\(y1/y2+y2/y1)*sin(Fa)*sin(Fb)-cos(1);
其中Fa、Fb、y1、y2均为Fa=2*pi*(n1^2*(y^2)-x^2)^(1/2)*d1/3;
Fb=2*pi*(n2^2*y^2-x^2)^(1/2)*d2/3;除了y以外的其他字符均为常数
Exiting fzero: aborting search for an interval containing a sign change
because complex function value encountered during search.
(Function value at 0.0060012 is 0.63721-0.00051465i.)
Check function or try again with a different starting value.
ans=Nan
当y值取的过小时就会出现这种情况,而函数在此时没有解是可能的(此函数在0-1内有多个解)哪位大侠知道如何避免啊或者有什么命令可以使程序运行到此时自动退出fzero函数接着进行下一步而不出现如上的提示啊
因为要进行很多调用,会出现上百个上面的东西。
万分感谢啊!!!!!!
global x
a=1;
for x=0:0.01:1
W=[];
for w=linspace(3\2*x+0.02,1,10)%这里3\2*x加上一个数是为了使Fa、Fb不为虚数;
b=fzero('fz',w);
W=[W,b];
end
omega1{a}=W;
a=a+1;
end
调用的函数为
function f=fz(y)
%调用fzero命令求解非线性方程中的函数文件自变量是频率(y);
%用于数值求解色散关系方程中的频率w即y(在K和切向波矢kx-即x给定情况下);
%thetal 在介质一中的入射角其他的比如thetal2类比;
%这里y和x均为归一化的结2果(即除以了2*pi/Lambda)lambda不是波长而是周期长;
%2009.9.4;
global x
n1=2.4;n2=1.5;d1=1.5;d2=d1;
theta1=asin(sin(pi/4)/n1);
theta2=asin(sin(theta1)*n1/n2);
y1=(8.854*10^(-12)/(4*pi*10^(-7)))^(1/2)*2.4*cos(theta1);
y2=(8.854*10^(-12)/(4*pi*10^(-7)))^(1/2)*1.5*cos(theta2);%数字不同于字符,尽管定义相
Fa=2*pi*(n1^2*(y^2)-x^2)^(1/2)*d1/3;Fb=2*pi*(n2^2*y^2-x^2)^(1/2)*d2/3;
f=cos(Fa)*cos(Fb)-2\(y1/y2+y2/y1)*sin(Fa)*sin(Fb)-cos(1.2);
注:3\2*x肯定是没错,当然也可以写成1.5*x,都一样,现在问题主要就是fzero函数由于可能没有解造成的退出老是出现在屏幕上很多