非线性方程组求解 matlab

问题描述:

非线性方程组求解 matlab

这样一个方程我用下面的matlab怎么解不出来呢?请高手赐教,我将不甚感激!

clc
clear

%调整 常量,预估值,收敛残差,最大迭代步 即可计算
%常量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
q=1;V=5;d=4;w=5;mu=0.5;m=2;
%预估值%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Anp=1;Bnp=1;Xnp=1;Ynp=1;Tnp=1;Cnp=1;
%收敛性控制%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
con_res=0.005;%设定收敛残差
c_res=1;%计算残差
res=zeros(6,1);%残差矩阵
%迭代%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
it_num=0;%迭代步数
max_it=100;%最大允许迭代步
while(c_res>con_res)
   %赋上步计算值
   An=Anp;Bn=Bnp;Xn=Xnp;Yn=Ynp;Tn=Tnp;Cn=Cnp;
   %计算
   
   Anp=q*V/(d*m)-(q/mu)*Xn/m-2*(Xn^2+Yn^2)^(1/2)*w*sin(Cn);
   Bnp=2*(Xn^2+Yn^2)^(1/2)*w*cos(Cn)-(q/mu)*Yn/m;
   Xnp=mu*V/d-An*Tn;
   Ynp=2*(Xn^2+Yn^2)^(1/2)*w*cos(Cn)*m*Tn*mu/(q*Tn+m*mu);
   Tnp=((mu*V/d)-((mu*V/d)^2-2*An*d)^(1/2))/An;
   Cnp=atan(Yn/Xn);
   %计算残差
   res(1,1)=abs((Anp-An)/An);
   res(2,1)=abs((Bnp-Bn)/Bn);
   res(3,1)=abs((Xnp-Xn)/Xn);
   res(4,1)=abs((Ynp-Yn)/Yn);
   res(5,1)=abs((Tnp-Tn)/Tn);
   res(6,1)=abs((Cnp-Cn)/Cn);
   c_res=max(res);%最大残差
   it_num=it_num+1;%
   if(it_num>=max_it)
      break; 
   end
end
1个回答 分类:数学 2014-11-19

问题解答:

我来补答
Matlab没用过.只用过mathematics.
但一般来讲不管什么软件,你总要先证实这个迭代过程确实是收敛的才可以这么做吧?
另外实际上这个方程组很简单,我按照程序里的常量化简了一下:
A=1.25*t-8/t^2
B=(80-6.25*t)/(t*(t+1))
X=8/t-0.625
Y=(80-6.25*t)/(t+1)
255*t^3-3232*t^2-5*t+32=0
只要解最后关于t的方程,其他都可以算出来
估算了一下,t有两个大于零的值,一个约等于3232/255;另一个很小,大约在0.099-0.1之间
再问: 谢谢你的热心回答,不甚感激,但是我现在是那些非变量是符号而不是具体的数值,你能算出来吗?虽然说那些最后都是确定的值,但是我想用符号代替他们,求出A、B、X、Y、T、C关于那些常量的表达式,谢谢高手了。本人是新手,分数不高,望请原谅,好人一生平安。
再答: 没事,我也新手 要用符号的话你试下下面这个方程组: A=q*V/(d*m)-q*x/(mu*m)-2*w*y x=mu*V/d-A*t y=2*w*mu*m*x*t/(q*t+mu*m) d=mu*V*t/d-0.5*A*t^2 就这四个可以了,A,x,y,t是未知量,然后B=2*w*x-q*y/(mu*m)以及C=atan(y/x)并不参与运算的,可以直接代入上述方程的计算结果 但是我并不保证用你原来的方法可以解出,原因参见daliwa7的回答;有可能你需要重写一下方程的表示形式以保证每个未知量的残差都是收敛的。 另外matlab做符号运算不要加载插件吗?
 
 
展开全文阅读
剩余:2000