22112211 发表于 2008-2-29 10:46

非线性方程组fsolve的问题

最近最课题需要用到matlab解非线性方程组,我本人是学化工的,实在是有点困难。自己解决了一部分问题,现在卡在了最后的环节上,还请各位大侠帮忙。
       程序内容如下:
       用fun1 调用low,去解方程组,然后输出n1_n8。其中low里的p值要做1,3,5 .x需要1 3 6 9 12. 不知道是初值问题还是方程的问题。请大家帮忙看看,多谢!
      fun1函数:
      myoptions=optimset('MaxIter',100000,'MaxFunEvals',10000,'TolFun',1e-6)
global T n
k0=;
for i=1:3,
    T=550+(i-1)*50;
fsolve('low',k0,myoptions);
    for j=1:8,
      r_5(i,j)=n(j);
    end
end

   low函数:
function y=low(k)
global T n
P=1
x=1
k1=k(1)
k2=k(2)
k3=k(3)
n(8)=k(4)
k4=k(5)
n(1)=1-k1
n(2)=x-k2+k3
n(3)=3*k1-k2-k3
n(4)=k2
n(5)=k3-k4
n(6)=4*k1+k2-3*k3+2*k4
n(7)=k4
y(1)=exp((584.906-4.4735e-1*T-3.0773e-5*T^2+3*(-109.885-9.2218e-2*T+1.4547e-6*T^2))/(0.008314*T))-((P*n(1)/(n(8)-n(7)))*(P*n(3)/(n(8)-n(7)))^(-3)*(P*n(6)/(n(8)-n(7)))^(-4))
y(2)=exp((241.74-4.1740e-2*T-7.4281e-6*T^2-(-109.885-9.2218e-2*T+1.4547e-6*T^2)-393.360-3.8212e-3*T+1.3322e-6*T^2)/(-0.008314*T))-((P*n(2)/(n(8)-n(7)))^(-1)*(P*n(3)/(n(8)-n(7)))^(-1)*(P*n(4)/(n(8)-n(7)))*(P*n(6)/(n(8)-n(7))))
y(3)=exp((-241.74+4.1740e-2*T+7.4281e-6*T^2-(-109.885-9.2218e-2*T+1.4547e-6*T^2)-75.262+7.5925e-2*T+1.8700e-5*T^2)/(-0.008314*T))-((P*n(2)/(n(8)-n(7)))*(P*n(3)/(n(8)-n(7)))^(-1)*(P*n(5)/(n(8)-n(7)))*(P*n(6)/(n(8)-n(7)))^(-3))
y(4)=exp((75.262-7.5925e-2*T-1.8700e-5*T^2+4.58e-4*(P-1))/(-0.008314*T))-((P*n(5)/(n(8)-n(7)))^(-1)*(P*n(6)/(n(8)-n(7)))^2)
y(5)=n(1)+n(2)+n(3)+n(4)+n(5)+n(6)+n(7)-n(8)
end

[ 本帖最后由 eight 于 2008-2-29 10:48 编辑 ]

dingd 发表于 2008-2-29 14:27

用一下1stOpt,求解方程组更强也更简单使用,论坛有不少介绍,搜一下。

咕噜噜 发表于 2008-2-29 14:59

你这个方程组方程是什么样子的啊
你这个程序没看明白具体怎么回事

22112211 发表于 2008-2-29 20:24

回复 3楼 的帖子

方程就是
y(1)=exp((584.906-4.4735e-1*T-3.0773e-5*T^2+3*(-109.885-9.2218e-2*T+1.4547e-6*T^2))/(0.008314*T))-((P*n(1)/(n(8)-n(7)))*(P*n(3)/(n(8)-n(7)))^(-3)*(P*n(6)/(n(8)-n(7)))^(-4))
y(2)=exp((241.74-4.1740e-2*T-7.4281e-6*T^2-(-109.885-9.2218e-2*T+1.4547e-6*T^2)-393.360-3.8212e-3*T+1.3322e-6*T^2)/(-0.008314*T))-((P*n(2)/(n(8)-n(7)))^(-1)*(P*n(3)/(n(8)-n(7)))^(-1)*(P*n(4)/(n(8)-n(7)))*(P*n(6)/(n(8)-n(7))))
y(3)=exp((-241.74+4.1740e-2*T+7.4281e-6*T^2-(-109.885-9.2218e-2*T+1.4547e-6*T^2)-75.262+7.5925e-2*T+1.8700e-5*T^2)/(-0.008314*T))-((P*n(2)/(n(8)-n(7)))*(P*n(3)/(n(8)-n(7)))^(-1)*(P*n(5)/(n(8)-n(7)))*(P*n(6)/(n(8)-n(7)))^(-3))
y(4)=exp((75.262-7.5925e-2*T-1.8700e-5*T^2+4.58e-4*(P-1))/(-0.008314*T))-((P*n(5)/(n(8)-n(7)))^(-1)*(P*n(6)/(n(8)-n(7)))^2)
y(5)=n(1)+n(2)+n(3)+n(4)+n(5)+n(6)+n(7)-n(8)

精度用y来控制,最后y小于10^(-6)就行哦
最后fun1 输出的是n(1) n(2)......

上面的T是变量 用fun1去控制T= 550 600 650 调用low这个函数去求解方程组 P 和X 在low里定义了。然后通过初值迭代。

麻烦了 请帮帮忙!

[ 本帖最后由 22112211 于 2008-2-29 20:30 编辑 ]

22112211 发表于 2008-2-29 20:29

回复 2楼 的帖子

1stopt 我用过 每次迭代出来的结果都不一样 一直在变化 所以我觉得并不可信
现在还是没有好的办法
希望大家帮忙!

dingd 发表于 2008-2-29 20:38

原帖由 22112211 于 2008-2-29 20:29 发表 http://www.chinavib.com/forum/images/common/back.gif
1stopt 我用过 每次迭代出来的结果都不一样 一直在变化 所以我觉得并不可信
现在还是没有好的办法
希望大家帮忙!

把你本问题的1stOpt代码贴出来看看!
页: [1]
查看完整版本: 非线性方程组fsolve的问题