声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1241|回复: 5

[综合讨论] 非线性方程组fsolve的问题

[复制链接]
发表于 2008-2-29 10:46 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
最近最课题需要用到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=[0.99 0.9 2.3 4 1];
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 编辑 ]
回复
分享到:

使用道具 举报

发表于 2008-2-29 14:27 | 显示全部楼层
用一下1stOpt,求解方程组更强也更简单使用,论坛有不少介绍,搜一下。
发表于 2008-2-29 14:59 | 显示全部楼层
你这个方程组方程是什么样子的啊
你这个程序没看明白具体怎么回事
 楼主| 发表于 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 编辑 ]
 楼主| 发表于 2008-2-29 20:29 | 显示全部楼层

回复 2楼 的帖子

1stopt 我用过 每次迭代出来的结果都不一样 一直在变化 所以我觉得并不可信
现在还是没有好的办法
希望大家帮忙!
发表于 2008-2-29 20:38 | 显示全部楼层


把你本问题的1stOpt代码贴出来看看!
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-18 10:30 , Processed in 0.058683 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表