非线性方程组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 编辑 ] 用一下1stOpt,求解方程组更强也更简单使用,论坛有不少介绍,搜一下。 你这个方程组方程是什么样子的啊
你这个程序没看明白具体怎么回事
回复 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 编辑 ]
回复 2楼 的帖子
1stopt 我用过 每次迭代出来的结果都不一样 一直在变化 所以我觉得并不可信现在还是没有好的办法
希望大家帮忙! 原帖由 22112211 于 2008-2-29 20:29 发表 http://www.chinavib.com/forum/images/common/back.gif
1stopt 我用过 每次迭代出来的结果都不一样 一直在变化 所以我觉得并不可信
现在还是没有好的办法
希望大家帮忙!
把你本问题的1stOpt代码贴出来看看!
页:
[1]