yutingting1986 发表于 2011-4-27 20:55:04

急急急!!!!matlab非线性方程组的求解!

本帖最后由 yutingting1986 于 2011-4-27 20:57 编辑

function F = myfun(x)
F =[x(1)^2/x(2)-43.5*T^1.5*(1-exp(-3340/T))*exp(-113165.6/T);
      x(3)^2/x(4)-280.217*T^1.5*(1-exp(-2230/T))*exp(-59940.1/T);

      x(5)^2/(x(4)*x(2))-5.4119*(1-exp(-2230/T))*(1-exp(-3340/T))*
      (1-exp(-2690/T))^2*exp(-46788.55/T);
%空行中间是一个式子
      x(6)*x(7)/x(5)-3.024e-7*T^2.5*exp(-107379.1/T);
      2*x(2)+x(1)+x(5)+x(6)-7.054e-2;
      2*x(4)+x(3)+x(5)+x(6)-1.875e-2;
      x(6)-x(7)];
上面是函数m文件。
T=7000;
format long e;
x0 =;      
options=optimset('Display','iter');   
= fsolve(@myfun,x0,options);

这是我的求解程序,给定的X0值不同结果就不同,而且结果不对,0<x<0.04。不知道该怎么解决,急求求解方法!!!请各位高手帮忙!

anbcjys 发表于 2011-4-28 05:35:52

这类函数一般都和初始有关

南边的北边 发表于 2011-4-28 08:01:11

非线性方程的一个本质特征就是初值的依赖敏感性,这个很好解释!

yutingting1986 发表于 2011-4-28 08:51:38

本帖最后由 yutingting1986 于 2011-4-28 08:53 编辑

2# anbcjys
但是我正好七个方程,七个未知数,而且未知数都是大于0的,不明白为什么会有这么多结果出现,结果还差距很大!有没有更好的求解方法呢?

shamohu 发表于 2011-4-28 08:53:35

本帖最后由 shamohu 于 2011-4-28 09:07 编辑

可以用1stOpt,不依赖初值。如果本题没有“0<x<0.04”约束:
x1: 0.0481882811735849
x2: 0.0025212991383039
x3: -4277.29030085954
x4: 2138.64587086941
x5: 0.0196099884235524
x6: -0.0023008677420717
x7: -0.00230086769882801

如果加上约束,精度差些:
x1: 0.04
x2: 0.00173743938389644
x3: 0.0187413845225222
x4: 4.10586595044022E-8
x5: 1.41446276301407E-7
x6: 8.39191388246271E-6
x7: 8.39191388246271E-6

yutingting1986 发表于 2011-4-28 20:25:32

5# shamohu
多谢您的回答,不过还想麻烦您一下,你这个加上约束的求解是怎么弄的啊,我是matlab初学者,做课题需要这个结果,没有查到你说的这个1stOpt呢,谢谢谢谢!!!

yutingting1986 发表于 2011-4-29 09:24:58

请问您有1stOpt 软件吗?我就下了一个1.5版本的,能麻烦您发给我一份高点版本的吗?要是有教程就更好了,:) 万分感激!邮箱:723927576@qq.com
页: [1]
查看完整版本: 急急急!!!!matlab非线性方程组的求解!