MATLAB中文论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 579|回复: 13|关注: 0

[已答复] Matlab fsolve函数解非线性方程组无解

[复制链接]

新手

6 麦片

财富积分


050


14

主题

39

帖子

0

最佳答案
发表于 2017-5-17 20:41:34 | 显示全部楼层 |阅读模式
function xfsolve
clear all;clc
x0=[1 1 1 1 1 1];
options=optimset('Display','iter');
options.MaxFunEvals = 9000000;
options.MaxIter = 40000;
options.TolFun=1e-10;
[x1,fval]=fsolve(@abc,x0,options)

function y=abc(x)
b=0.125;
Si=0.1;
T=1573;

k=[136677915142698000000.0000         39416185.2518         788195720441080.0000         29993723523627600000.0000         4227918645085830000.0000         338.9086         13026.7241         4609.3202         1.8788         6.095025798        0.000335143];

y(1)=log10(x(4))-18421.12/T+6.54-log10(0.73-Si)-2*log10(x(2));

y(2)=log10(x(3))-5141.87/T+17.28-2*log10(x(6))-5*log10(x(2));

y(3)=x(1)+x(2)+x(3)+x(4)+k(1)*x(2)^3*x(3)+k(2)*x(2)^4*x(3)+k(3)*x(1)^2*x(3)+k(4)*x(1)^3*x(3)+k(5)*x(1)^4*x(3)+k(6)*x(1)*x(4)+k(7)*x(1)^2*x(4)+k(8)*x(1)^3*x(4)+k(9)*x(2)^2*x(4)-1;

y(4)=(0.5*x(1)+2*k(3)*x(1)^2*x(3)+3*k(4)*x(1)^3*x(3)+4*k(5)*x(1)^4*x(3)+k(6)*x(1)*x(4)+2*k(7)*x(1)^2*x(4)+3*k(8)*x(1)^3*x(4))*x(5)-b;

y(5)=(x(3)+k(1)*x(2)^3*x(3)+k(2)*x(2)^4*x(3)+k(3)*x(1)^2*x(3)+k(4)*x(1)^3*x(3)+k(5)*x(1)^4*x(3))*x(5)-x(5)*x(3);

y(6)=(x(4)+k(6)*x(1)*x(4)+k(7)*x(1)^2*x(4)+k(8)*x(1)^3*x(4)+k(9)*x(2)^2*x(4))*x(5)-x(5)*x(4);

入门

103 麦片

财富积分


50500


1

主题

161

帖子

22

最佳答案
  • 关注者: 2
发表于 2017-5-17 20:56:21 | 显示全部楼层
可能是由于初值不理想导致的,你可以试试这个帖子里面的方法

http://www.ilovematlab.cn/thread-493240-1-1.html

新手

6 麦片

财富积分


050


14

主题

39

帖子

0

最佳答案
 楼主| 发表于 2017-5-17 21:04:11 | 显示全部楼层
pdl9527 发表于 2017-5-17 20:56
可能是由于初值不理想导致的,你可以试试这个帖子里面的方法

http://www.ilovematlab.cn/thread-493240-1- ...

谢谢啦~~我试试

新手

6 麦片

财富积分


050


14

主题

39

帖子

0

最佳答案
 楼主| 发表于 2017-5-17 21:48:30 | 显示全部楼层
pdl9527 发表于 2017-5-17 20:56
可能是由于初值不理想导致的,你可以试试这个帖子里面的方法

http://www.ilovematlab.cn/thread-493240-1- ...

你好,我用了这个函数,结果提示MultiStart completed some of the runs from the start points. 77 out of 100 local solver runs converged with a positive local solver exit flag.
没有实数解。
[x,fval,exitFlag] = GlobalSolve1(@myfun,6)

MultiStart completed some of the runs from the start points.

77 out of 100 local solver runs converged with a positive local solver exit flag.

x =

   1.0e+13 *

  Columns 1 through 5

  -0.0000 - 0.0000i   0.0000 + 0.0000i  -0.0000 + 0.0000i   0.0000 + 0.0000i  -0.0000 + 0.0000i

  Column 6

   1.4720 + 0.0000i


fval =

  Columns 1 through 5

   7.6959 - 0.0526i   9.5615 + 1.1448i  -0.0187 - 0.0017i   0.0194 + 0.0085i   0.7439 - 0.0032i

  Column 6

   0.0020 + 0.0005i


exitFlag =

     2

论坛优秀回答者

中级

618 麦片

财富积分


5001500


0

主题

1744

帖子

137

最佳答案
  • 关注者: 73
发表于 2017-5-17 22:13:56 | 显示全部楼层
下面1stOpt计算的结果参考下:

x1: -5.91857258716478E-8
x2: 0.00326745047841785
x3: 2.05316569019829E-31
x4: 0.996732608707308
x5: -6242.9722063247
x6: 0.00752097826348841

论坛优秀回答者

中级

618 麦片

财富积分


5001500


0

主题

1744

帖子

137

最佳答案
  • 关注者: 73
发表于 2017-5-17 22:17:09 | 显示全部楼层
似乎多解:
x1: 0.999999999999762
x2: 2.37749665179884E-13
x3: 1.32168480810125E-77
x4: 5.27716248550567E-21
x5: 0.250000000000059
x6: 1.33613097978495

论坛优秀回答者

中级

618 麦片

财富积分


5001500


0

主题

1744

帖子

137

最佳答案
  • 关注者: 73
发表于 2017-5-17 22:18:28 | 显示全部楼层
再一组:
x1: -0.0262603539752282
x2: 0.00331014630448525
x3: 3.18148725230428E-28
x4: 1.02295143843451
x5: 0.0138803104520406
x6: 0.28660382994393

新手

6 麦片

财富积分


050


14

主题

39

帖子

0

最佳答案
 楼主| 发表于 2017-5-17 22:19:07 | 显示全部楼层
shihe 发表于 2017-5-17 22:13
下面1stOpt计算的结果参考下:

x1: -5.91857258716478E-8

谢谢,我也试试:loveliness:

论坛优秀回答者

权威

3445 麦片

财富积分



19

主题

3698

帖子

744

最佳答案
  • 关注者: 287
发表于 2017-5-17 22:48:19 | 显示全部楼层
这里结合 ga+fsolve 也可以求出来:
  1. x0 = ga(@(x)sum(abs(abc(x)).^2), 6);
  2. [x, fval] = fsolve(@abs, x0)
复制代码

x =

   1.0e-06 *

   -0.0002    0.0002   -0.0002   -0.7403   -0.0000   -0.0717


fval =

   1.0e-06 *

    0.0002    0.0002    0.0002    0.7403    0.0000    0.0717

论坛优秀回答者

中级

618 麦片

财富积分


5001500


0

主题

1744

帖子

137

最佳答案
  • 关注者: 73
发表于 2017-5-18 09:32:36 | 显示全部楼层
不知道看错了没有:原公式里有“log10(x(4))”,楼上结果x(4)=-0.7403*1.0e-06,x(4)小于0,对数没法计算了吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /2 下一条

联系我们|版权保护|小黑屋|Archiver|手机版|MATLAB中文论坛 ( 苏ICP备08100737号

GMT+8, 2017-6-29 06:35 , Processed in 0.288564 second(s), 88 queries , XCache On.

Powered by Discuz! X3.3

© 2001-2013 Comsenz Inc.

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