回复: 请大家帮我看看这个非线性方程组该怎么解??
在网上找了个牛顿法解非线性方程组的程序,我又重新编了段程序,可还是出错。程序我贴在下面了,还请大家多帮帮忙吧,都有点心灰意冷了。
建了个same.m文件,里面放了两个function
function [r,n]=mulNewton(F,x0,eps)
global x0 x
F=@myfun
if nargin==2
eps=1.0e-4;
end
x0 = transpose(x0);
Fx = subs(F,findsym(F),x0);
%var = findsym(F);
dF = jacobian(F);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx;
n=1;
tol=1;
while tol>eps
x0=r;
Fx = subs(F,findsym(F),x0);
dFx = subs(dF,findsym(dF),x0);
r=x0-inv(dFx)*Fx; %核心迭代公式
tol=norm(r-x0);
n=n+1;
if(n>100000) %迭代步数控制
disp('迭代步数太多,可能不收敛!');
return;
end
end
function F=myfun(x)
global fr im k k1 m mu n r ri
global x
%global F
for i=1:8
t0=1+6.28*(i-1)/(8*40)
a=(im/(mu*t0*r)-k1*r/mu)/k
F(i)=2*(a*x(i))^(9/10)+(9*k1/(10*k*mu))*(a*x(i))^(-1/10)*(2*r*x(9)+n*ri)...
-x(10)*cos(x(9)+0.785*(i-1));
end
sum=0.0;
sum1=0.0;
for i=1 : 8
nij=-m*(ri+r)*x(9)^2/2+k1*r*x(9)/mu+(im/(mu*r)-k1*r/mu)*x(i)+k1*n*ri...
/(2*mu);
noj=m*(ri+r)*x(9)^2/2+k1*r*x(9)/mu+(im/(mu*r)-k1*r/mu)*x(i)+k1*n*ri...
/(2*mu);
sum=sum+nij*sin(x(9)+(i-1)*0.785)+mu*nij*cos(x(9)+(i-1)*0.785)...
-k1*(ri*(n-x(9))-r*x(i))*cos(x(9)+(i-1)*0.785);
sum1=sum1+nij*cos(x(9)+(i-1)*0.785)-mu*nij*sin(x(9)+(i-1)*0.785)...
+k1*(ri*(n-x(9))-r*x(i))*sin(x(9)+(i-1)*0.785);
end
F(9)=sum;
F(10)=sum1-fr;
在命令窗口中运行same
提示错误:
??? Error using ==> char
Conversion to char from function_handle is not possible.
Error in ==> findsym at 29
sc = char(S);
Error in ==> same at 8
Fx = subs(F,findsym(F),x0);什么意思呀?难道说matlab自带的函数findsym会出错么
|