作业帮 > 英语 > 作业

MATLAB用fsolve解方程

来源:学生作业帮 编辑:作业帮 分类:英语作业 时间:2024/05/21 11:42:16
MATLAB用fsolve解方程
H=1.90;
lanmuda=1.55;
n1=1.55;
n2=1.67;
n3=1.50;
k0=2*pi/lanmuda;
r1=sqrt(n^2-n1^2)*k0;
r2=sqrt(n2^2-n^2)*k0;
r3=sqrt(n^2-n3^2)*k0;
fun=@(n)(r2*H-atan(r1/r2)-atan(r3/r2))
s= fsolve(fun,1.60)
错误信息如下:
fun =
@(n)(r2*H-atan(r1/r2)-atan(r3/r2))
错误使用 fsolve (line 256)
FSOLVE requires all values returned by user functions to be of data type double.
出错 m11 (line 14)
s= fsolve(fun,1.60)
不要用solve,用slove我会解.
fsolve要求所有内容都是double型,你这里r1,r2,r3
是sym变量,所以出错,改为下面:
f = @(n)sqrt(n2^2-n^2)*k0*H-atan(sqrt(n^2-n1^2)*k0/(sqrt(n2^2-n^2)*k0))-atan(sqrt(n^2-n3^2)*k0/(sqrt(n2^2-n^2)*k0));
>> fsolve(f,1.6)
再问: 好,我还想问下,如果想要r1,r2,r3改如何改,这样可以让式子简单点,如果不能就算了。还有结果出现如下信息,是什么意思?
Equation solved.
solve completed because the vector of function values is near zero

as measured by the .......
这对结果有影响吗?
再答: r1,r2,r3都有n,就不可能是double型,就没法代入fsolve中。
fsolve对解的区间有要求,不同的区间可能有不同的解,我这里的解是离1.6最近的,如果换成其他值有可能影响结果