声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1861|回复: 5

[编程技巧] fsolve数值求解一直运行没有结果怎么回事啊

[复制链接]
发表于 2015-11-17 13:52 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 subwaylo 于 2015-11-17 13:56 编辑

复制代码
  1. function F = myfun1(x,a)
  2. mu=x(1);
  3. delte=x(2);
  4. alpha=a;
  5. i1z =- 2*ellipticE((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2))*((alpha - mu)^2/delte^2 + 1)^(1/4) - (2*ellipticK((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2)))/(((2*(alpha - mu))/delte - 2*((alpha - mu)^2/delte^2 + 1)^(1/2))*((alpha - mu)^2/delte^2 + 1)^(1/4)) - (ellipticK((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2))*(alpha - mu))/(delte*((alpha - mu)^2/delte^2 + 1)^(1/4));
  6. i1z1 =(2*ellipticK((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2)))/(((alpha + mu)^2/delte^2 + 1)^(1/4)*((2*(alpha + mu))/delte + 2*((alpha + mu)^2/delte^2 + 1)^(1/2))) - 2*ellipticE((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2))*((alpha + mu)^2/delte^2 + 1)^(1/4) + (ellipticK((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2))*(alpha + mu))/(delte*((alpha + mu)^2/delte^2 + 1)^(1/4));
  7. i2z =ellipticK((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2))/(3*((alpha - mu)^2/delte^2 + 1)^(1/4)) - (2*ellipticE((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2))*((alpha - mu)^2/delte^2 + 1)^(1/4)*(alpha - mu))/(3*delte) - (2*ellipticK((-((alpha - mu)/(2*delte) - ((alpha - mu)^2/delte^2 + 1)^(1/2)/2)/((alpha - mu)^2/delte^2 + 1)^(1/2))^(1/2))*(alpha - mu))/(3*delte*((2*(alpha - mu))/delte - 2*((alpha - mu)^2/delte^2 + 1)^(1/2))*((alpha - mu)^2/delte^2 + 1)^(1/4));
  8. i2z1 =ellipticK((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2))/(3*((alpha + mu)^2/delte^2 + 1)^(1/4)) + (2*ellipticE((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2))*((alpha + mu)^2/delte^2 + 1)^(1/4)*(alpha + mu))/(3*delte) - (2*ellipticK((((alpha + mu)/(2*delte) + ((alpha + mu)^2/delte^2 + 1)^(1/2)/2)/((alpha + mu)^2/delte^2 + 1)^(1/2))^(1/2))*(alpha + mu))/(3*delte*((alpha + mu)^2/delte^2 + 1)^(1/4)*((2*(alpha + mu))/delte + 2*((alpha + mu)^2/delte^2 + 1)^(1/2)));

  9. F=[i1z+i1z1; i2z+i2z1-(4/3)*(delte)^(-3/2)];
  10. x0 = [0.01; 0.01];           % 取初值
  11. options = optimset('Display','off');
  12. a=0:0.01:5;             % 变量取值范围[0 5]
  13. for i=1:1:length(a)
  14. kk=a(i);
  15. x = fsolve(@myfun1, x0, options,kk);%求解非线性方程组
  16. x1(i)=x(1); x2(i)=x(2);
  17. end
  18. plot(a,x1,'-b',a,x2,'-r'); xlabel('k'); legend('x1','x2')
复制代码


matlab新手,只是照着论坛上的程序模仿的,运行后直接卡死,是不是计算量太大,有没有好的解决办法,谢谢大家啦
回复
分享到:

使用道具 举报

发表于 2015-11-18 10:10 | 显示全部楼层
有可能是因为方程太复杂,一般情况下fsolve用于求解简单的非线性方程是没有问题的
如果方程比较特殊,建议根据方程的特征寻找适合的求解方法

评分

1

查看全部评分

 楼主| 发表于 2015-11-22 11:46 | 显示全部楼层
弗朗索瓦 发表于 2015-11-18 10:10
有可能是因为方程太复杂,一般情况下fsolve用于求解简单的非线性方程是没有问题的
如果方程比较特殊,建议 ...

实在找不出其它方法啊,画是画出来了,但是初值影响很大,而且同一个初值我不知道能不能试用所有变量,请问还有什么好的办法能画出这个的
 楼主| 发表于 2015-11-22 13:27 | 显示全部楼层

我想用第一次计算k=0的结果给第二次计算k=0.001赋初值该怎么循环编程啊,新手求教
发表于 2015-11-26 10:08 | 显示全部楼层
subwaylo 发表于 2015-11-22 11:46
实在找不出其它方法啊,画是画出来了,但是初值影响很大,而且同一个初值我不知道能不能试用所有变量,请 ...

fsolve属于局部最优算法,其结果敏感于初值是必然的,特别是对于比较方程
你可以尝试修改option中的选项看看是否能够改进

另外可以考虑使用1stOpt,看看求解的效果

评分

1

查看全部评分

发表于 2015-11-26 10:13 | 显示全部楼层
subwaylo 发表于 2015-11-22 13:27
我想用第一次计算k=0的结果给第二次计算k=0.001赋初值该怎么循环编程啊,新手求教

大概的思路是
  1. k = 0;
  2. x0 = [0.01; 0.01];
  3. for i = 1:2
  4.     x = fsolve(@myfun1, x0, options,kk);
  5.     x0 = x;
  6.     k=0.001
  7. end
复制代码

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-12-23 12:42 , Processed in 0.094737 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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