非线性方程组求解 matlab这样一个方程我用下面的matlab怎么解不出来呢?请高手赐教,我将不甚感激!clcclear%调整 常量,预估值,收敛残差,最大迭代步 即可计算%常量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%q=1;V=5

来源:学生作业帮助网 编辑:六六作业网 时间:2024/05/05 01:15:34
非线性方程组求解matlab这样一个方程我用下面的matlab怎么解不出来呢?请高手赐教,我将不甚感激!clcclear%调整常量,预估值,收敛残差,最大迭代步即可计算%常量%%%%%%%%%%%%%

非线性方程组求解 matlab这样一个方程我用下面的matlab怎么解不出来呢?请高手赐教,我将不甚感激!clcclear%调整 常量,预估值,收敛残差,最大迭代步 即可计算%常量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%q=1;V=5
非线性方程组求解 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

非线性方程组求解 matlab这样一个方程我用下面的matlab怎么解不出来呢?请高手赐教,我将不甚感激!clcclear%调整 常量,预估值,收敛残差,最大迭代步 即可计算%常量%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%q=1;V=5
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之间

1. 同意“市北吧专用ID”的看法。我没算,但是按照他的化简来说,这个方程最后确实可以化简得很漂亮,没必要弄成非线性方程组问题,而最后可以化成一个简单的非线性方程问题。
2. 你的程序我大致看了一下。大致思路应该也没错。有一个问题,你的这种迭代对于非线性方程问题来说,首先效率太低,其次,我不确定这种迭代最后能不能收敛。这种迭代应该是属于经典迭代的范畴吧,收敛不良好。所以最后你没算出结果,可...

全部展开

1. 同意“市北吧专用ID”的看法。我没算,但是按照他的化简来说,这个方程最后确实可以化简得很漂亮,没必要弄成非线性方程组问题,而最后可以化成一个简单的非线性方程问题。
2. 你的程序我大致看了一下。大致思路应该也没错。有一个问题,你的这种迭代对于非线性方程问题来说,首先效率太低,其次,我不确定这种迭代最后能不能收敛。这种迭代应该是属于经典迭代的范畴吧,收敛不良好。所以最后你没算出结果,可能的原因就是算法不好,再加上初值选得不好,结果不收敛。
3. 非线性方程有些更佳优良的解法。性能最差的解法是Newton的高维切线迭代法。当然,所有非线性方程问题都不能保证迭代收敛,但是Newton的高维切线法如果收敛,那么收敛性会比你的算法更优。较优的改良方法有两类,一个是拟Newton法,主要是降低计算量,但是收敛性没有显著改善;另一个是Newton下降法,收敛性有显著改善。你应该学过数值分析了吧,这些你翻一下书都能找到算法。

收起