Labfans是一个针对大学生、工程师和科研工作者的技术社区。 | 论坛首页 | 联系我们(Contact Us) |
![]() |
|
![]() |
#1 |
初级会员
注册日期: 2009-06-19
帖子: 4
声望力: 0 ![]() |
![]()
本人现在做课题要解一个复杂的非线性方程组,对于matlab本人是个初学者,自己也编写了个matlab程序,可是不收敛,初值很不好给。我把自己编写的程序放在附件里了,请大家帮帮忙吧!!谢谢了!!!
|
![]() |
![]() |
![]() |
#2 |
初级会员
注册日期: 2009-06-19
帖子: 4
声望力: 0 ![]() |
![]()
现在就把我编的程序贴出来,方便大家看,请大家不吝赐教。
m文件内容: function F=myfun(x) global fr im k k1 m mu n r ri 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; 以下是我在命令窗口的内容: k1=0.001 r=0.0065; mu=0.15; k=729455627; m= 3.14 * r ^ 2 * 0.013 * 7.87 * 10 ^ 3; im=m*r^2; fr=1000; ri=0.04225; n=1000*6.28/60; x0=[200;200;200;200;200;200;200;200;45;0.00001]; global fr im k k1 m mu n r ri; options=optimset('display','iter','largescale','on'); [x,fval,exitflag,output]=fsolve(@myfun,x0,options) 下面是我的不收敛的结果: 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. x = 201.8292 200.3597 198.6797 197.7723 198.1687 199.6367 201.3174 202.2272 44.5322 -0.0000 fval = Columns 1 through 6 0.0000 0.0000 -0.0000 -0.0000 -0.0000 -0.0000 Columns 7 through 10 0.0000 0.0000 0.0011 -999.9929 exitflag = -2 output = firstorderopt: 0.9769 iterations: 13 funcCount: 154 cgiterations: 13 algorithm: 'large-scale: trust-region reflective Newton' message: [1x169 char |
![]() |
![]() |
![]() |
#3 |
初级会员
注册日期: 2009-06-19
帖子: 4
声望力: 0 ![]() |
![]()
请大家帮帮忙吧,本人是个初学者,其实方程倒不是很长,就是参数多看起来很乱,谢谢了!
|
![]() |
![]() |
![]() |
#4 |
初级会员
注册日期: 2009-06-19
帖子: 4
声望力: 0 ![]() |
![]()
在网上找了个牛顿法解非线性方程组的程序,我又重新编了段程序,可还是出错。程序我贴在下面了,还请大家多帮帮忙吧,都有点心灰意冷了。
建了个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会出错么 |
![]() |
![]() |