- 积分
- 0
- 注册时间
- 2008-11-20
- 仿真币
-
- 最后登录
- 1970-1-1
|
本帖最后由 qiuqiu 于 2009-3-30 10:04 编辑
请大家帮我看看用fsolve求解非线性方程组的问题,弄了很长时间了,没找出原因来。
我的三个m文件如下:
function [f1,f2,f3]=fun1(x) %
[f1,f2,f3]=fun2(11);
f1=sym2vecfun(f1);
f2=sym2vecfun(f2);
f3=sym2vecfun(f3);
function f=sym2vecfun(f2) %符号变量转换为向量变量
f2=sym2char(f2);
f2=strrep(f2,'r','x(1)');
f2=strrep(f2,'s','x(2)');
f=strrep(f2,'l','x(3)');
function [f1,f2,f3]=fun2(d) %要求解的方程组
syms r l s
f1=r*sin(pi/3)-sqrt(l*l-(r*cos(pi/3)-s)^2)-d;
f2=r*sin(13*pi/36)-sqrt(l*l-(r*cos(13*pi/36)-s)^2)-d;
f3=r*sin(14*pi/36)-sqrt(l*l-(r*cos(14*pi/36)-s)^2)-d;
在命令窗口输入:
>> clear
x0=[2 0.1 -1]' ;
options=optimset('Display','iter','MaxIter',500,'MaxFunEvals',400, 'NonlEqnAlgorithm', 'gn');
[r l s]=fsolve(@fun1,x0,options)
计算结果:
Directional
Iteration Func-count Residual Step-size derivative
0 4 282521
Optimizer appears to be converging to a minimum that is not a root:
Sum of squares of the function values is > sqrt(options.TolFun).
Try again with a new starting point.
r =
2.0000
0.1000
-1.0000
l =
1./2.*x(1).*3.^(1./2)-1./2.*(4.*x(3).^2-x(1).^2+4.*x(1).*x(2)-4.*x(2).^2).^(1./2)-11
s =
-2
这个结果形式不对啊,不管怎么改变初值,输出的r值总是和给定的初值一样,l 和s的值却一直不变。
请问是什么地方出了问题啊? |
|