benbeny 发表于 2007-3-26 09:33

求助——在matlab中解非线性方程遇到的问题!

我需要解一个三元的非线性方程,下面是我的程序,我解释一下 ,三个未知数m,n,h
T1 T2 P1 P2 G1 G2 G3 W1 W2 U1 U2 M1G1 M1G2 M1W1 M1W2 M1P1 M1U1 M2G3 M2W1 M2P2 M2U2 Ks Qyu Q1;是含有未知数的变量。
其它都是常量,其数值已经给出。这是一个很复杂的方程组,已被我简化写出。我的问题是在我改变常量后,其结果不变。也就是说比如将70改为100,m,n,h还是原来的解!不知道问题出在哪里?希望各位高手指点!
syms m n h T1 T2 P1 P2 G1 G2 G3 W1 W2 U1 U2 M1G1 M1G2 M1W1 M1W2 M1P1 M1U1 M2G3 M2W1 M2P2 M2U2 Ks Qyu Q1;

T1='(70-h)*m+70*n';
T2='h*n';
P1='0.5*9.8*70*70';
P2='0.5*9.8*h*h';
G1='0.5*25*n*70*70';
G2='0.5*25*m*(70-h)*(70-h)';
G3='0.5*25*n*h*h';
W1='9.8*m*(70-h)*h';
W2='0.5*9.8*m*(70-h)*(70-h)';
U1='0.5*9.8*0.2*70*T1';
U2='0.5*9.8*0.2*h*T2';
M1G1='G1*(0.5*T1-(70-h)*m-70*n/3)';
M1G2='G2*(0.5*T1-2*(70-h)*m/3)';
M1W1='W1*(0.5*T1-(70-h)*m/2)';
M1W2='W2*(0.5*T1-(70-h)*m/3)';
M1P1='P1*70/3';
M1U1='U1*(0.5*T1-T1/3)';
M2G3='G3*(0.5*T2-T2/3)';
M2W1='W1*(0.5*T2+0.5*(70-h)*m)';
M2P2='P2*h/3';
M2U2='U2*(0.5*T2-T2/3)';
Ks='0.55*(G1+G2+W1+W2-U1)/P1-1';
Qyu='(G1+G2+W1+W2-U1)/T1+6*(M1W1+M1W2+M1G1+M1G2-M1U1-M1P1)/(T1*T1)';
Q1='(G3+W1-U2)/T2+6*(M2G3+M2W1-M2P2-M2U2)/(T2*T2)';



function y=yafc3(x)
y(1)=1584/1225*x(2)+7352575626214095/18446744073709551616*x(1)*(70-x(3))^2+11/49000*x(1)*(70-x(3))*x(3)-11/7000*(70-x(3))*x(1)-1;
y(2)=(56448*x(2)+87/5*x(1)*(70-x(3))^2+49/5*x(1)*(70-x(3))*x(3)-343/5*(70-x(3))*x(1))/((70-x(3))*x(1)+70*x(2))+(2058*x(1)*(70-x(3))*x(3)*x(2)+147/5*x(1)*(70-x(3))^2*((35/3-1/6*x(3))*x(1)+35*x(2))+367500.0*x(2)*((-35+1/2*x(3))*x(1)+35/3*x(2))+75.0*x(1)*(70-x(3))^2*((-35/3+1/6*x(3))*x(1)+35*x(2))-6*(343/30*(70-x(3))*x(1)+2401/3*x(2))*((70-x(3))*x(1)+70*x(2))-3361400.0000000000000000000000000)/((70-x(3))*x(1)+70*x(2))^2-19.5;
y(3)=(288/25*x(2)*x(3)^2+49/5*x(1)*(70-x(3))*x(3))/x(3)/x(2)+(11.520000000000000000000000000000*x(2)^2*x(3)^3+294/5*x(1)*(70-x(3))*x(3)*(1/2*x(3)*x(2)+(35-1/2*x(3))*x(1))-9.7999999999999999999999999999998*x(3)^3)/x(3)^2/x(2)^2-19.5;
y=;

第一个是我的原始方程,经过整理后变为第二个!x(1)=m,x(2)=n,x(3)=h
x0=
fsolve('yafc3',x0)

xjzuo 发表于 2007-3-26 10:07

好象没有你说的情况出现. 只是需要调节一下,以便收敛.
以下是我的计算结果,你可以参考一下:
%%%%%%%%%%%%%%%%%%%%%
x0=;
fsolve(@yafc3,x0,optimset('Display','off'))
ans = 0.0051    0.6527   10.1007
%%%%%%%%%%%%%%%%%%%%%
%%% 70 改为 100 后
x0=;
fsolve(@yafc3,x0,optimset('Display','off'))
ans = 0.1669    0.4084   36.2235
%%%%%%%%%%%%%%%%%%%%%

benbeny 发表于 2007-3-26 10:23

x0=;
>> fsolve(@yafc4,x0,optimset('Display','off'))

ans =

    0.0036    0.6525   13.1001
这是我的结果,为什么得不出你的结果呢?
能不能把你的程序贴出来?谢谢了

xjzuo 发表于 2007-3-26 16:14

你的函数我没有修改.运行我给的命令就行了.
不明白你为何得不到我的结果.

benbeny 发表于 2007-3-28 20:11

可能是我没有描述清楚,后面的y(1),y(2),y(3)是我整理出来的,所以要将70改为100是要在未整理的方程中改,你的就是只将y(1),y(2),y(3)的70改为100了,这个我运行出来了,但不是我想要的,不知道2楼的这位朋友能否帮忙?在这里先谢谢了!!

xjzuo 发表于 2007-3-29 09:55

问题已经没有什么技术困难, 我想你自己花点时间调试一下就可以解决了.
页: [1]
查看完整版本: 求助——在matlab中解非线性方程遇到的问题!