楼主: wuyou136

[我分享] 基于全局优化工具箱求解非线性方程组数值解(无需初值)

  [复制链接]

论坛优秀回答者

权威

3630 麦片

财富积分



20

主题

3779

帖子

769

最佳答案
  • 关注者: 430
 楼主| 发表于 2017-5-23 17:51:23 | 显示全部楼层
li329895720 发表于 2017-5-23 17:39
我调用的也是7楼文件,方程形式改为下式,还是提醒有错误!
syms t1  x0 y0 z0  A B D x y z;
eq1=((x-(6 ...

[x,fval,exitflag,ms,mf] = GlobalSolve(eq,5,[],[],3e3);

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 18:58:07 | 显示全部楼层
wuyou136 发表于 2017-5-23 17:51
[x,fval,exitflag,ms,mf] = GlobalSolve(eq,5,[],[],3e3);

Undefined function 'optimoptions' for input arguments of type 'char'.
还是有问题,这个方程组用solve函数可以求得正确的解,但是用别的数据的时候不能求得正确的解!楼主的方法规定了求解区间,这一点非常适合我这个方程组,但求解出现问题,我matlab版本是2012a,应该不低吧?
Error in GlobalSolve (line 28)
options = optimoptions('particleswarm','display','off');

Error in jsdzd4ff3fsolve (line 10)
[x,fval,exitflag,ms,mf] = GlobalSolve(eq,5,[],[],3e3);

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 19:10:58 | 显示全部楼层
li329895720 发表于 2017-5-23 18:58
Undefined function 'optimoptions' for input arguments of type 'char'.
还是有问题,这个方程组用solv ...

这是用solve求解的
syms t1  x0 y0 z0 xp yp A B D x y z;
%x0=(680*t1*cos(A)*sin(B)+2);
%y0=(680*t1*sin(A)+3);
%z0=(-680*t1*cos(A)*cos(B));
%eq1=((x-(680*t1*cos(A)*sin(B)+x0))^2+(y-(680*t1*sin(A)+y0))^2+(z-(-680*t1*cos(A)*cos(B)))^2)^0.5*cos(D)-(-(x-(680*t1*cos(A)*sin(B)+x0))*cos(A)*sin(B)-(y-(680*t1*sin(A)+y0))*sin(A)+(z-(-680*t1*cos(A)*cos(B)))*cos(A)*cos(B));
eq1=((x-(680*t1*cos(A)*sin(B)+x0))^2+(y-(680*t1*sin(A)+y0))^2+(z-(-680*t1*cos(A)*cos(B)+z0))^2)^0.5*cos(D)-(-(x-(680*t1*cos(A)*sin(B)+x0))*cos(A)*sin(B)-(y-(680*t1*sin(A)+y0))*sin(A)+(z-(-680*t1*cos(A)*cos(B)+z0))*cos(A)*cos(B));
eq11= subs(eq1,[D x y z t1], [pi/6 0 0 0 0.001971118]);       
eq21= subs(eq1,[D x y z t1], [pi/6 0 5 0 0.007317894]);       
eq31= subs(eq1,[D x y z t1], [pi/6 2.5 0 0 0.003680043]);               
eq41= subs(eq1,[D x y z t1], [pi/6 5 0 0 0.010301765]);
eq51= subs(eq1,[D x y z t1], [pi/6 5 2.5 0 0.010318838]);
S=solve(eq11,eq21,eq31,eq41,eq51);
S1=[(S.x0) (S.y0) (S.z0) (S.A) (S.B)]
解得:S1 =

[ 1.2609652656663014108154621711277, 0.82221097160847922021493581258633, -0.97393475042440077472487579975698, -176.10372155982364453721039806016, -62.570053633964552464250661394904]
这组数据解算很正确;
但是有些数据解算就不正确了,试了fsolve也没成功,起始迭代点也不是很好确定,解算的往往不对。

论坛优秀回答者

权威

3630 麦片

财富积分



20

主题

3779

帖子

769

最佳答案
  • 关注者: 430
 楼主| 发表于 2017-5-23 19:15:44 | 显示全部楼层
li329895720 发表于 2017-5-23 18:58
Undefined function 'optimoptions' for input arguments of type 'char'.
还是有问题,这个方程组用solv ...

MATLAB 版本需要在 2015 以上

论坛优秀回答者

权威

3630 麦片

财富积分



20

主题

3779

帖子

769

最佳答案
  • 关注者: 430
 楼主| 发表于 2017-5-23 19:17:01 | 显示全部楼层
li329895720 发表于 2017-5-23 19:10
这是用solve求解的
syms t1  x0 y0 z0 xp yp A B D x y z;
%x0=(680*t1*cos(A)*sin(B)+2);

你可以试试用这个方法确定 fsolve 的初值:
x0 = ga(@(x)sum(abs(x).^2), 5) % 5为求解变量数

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 19:24:55 | 显示全部楼层
wuyou136 发表于 2017-5-23 19:15
MATLAB 版本需要在 2015 以上

好的,非常感谢楼主!

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 20:56:06 | 显示全部楼层
li329895720 发表于 2017-5-23 19:24
好的,非常感谢楼主!

您好,有[x,fval,exitFlag] = GlobalSolve(@myfun,n,lb,ub)的使用说明吗?lb,ub为解的限定范围,怎么用的?

论坛优秀回答者

权威

3630 麦片

财富积分



20

主题

3779

帖子

769

最佳答案
  • 关注者: 430
 楼主| 发表于 2017-5-23 21:18:38 | 显示全部楼层
li329895720 发表于 2017-5-23 20:56
您好,有[x,fval,exitFlag] = GlobalSolve(@myfun,n,lb,ub)的使用说明吗?lb,ub为解的限定范围,怎么用 ...

2L 有使用说明

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 21:40:54 | 显示全部楼层

好的,谢谢老师指导!限定求解范围后,解出来了正确结果,请问下[x,fval,exitflag,ms,mf] = GlobalSolve(eq,5,[],[],3e3);中的3e3是什么,为什么去掉后求解速度更快!

新手

5 麦片

财富积分


050


0

主题

12

帖子

0

最佳答案
发表于 2017-5-23 21:44:43 | 显示全部楼层
li329895720 发表于 2017-5-23 21:40
好的,谢谢老师指导!限定求解范围后,解出来了正确结果,请问下[x,fval,exitflag,ms,mf] = GlobalSolve( ...

fval,exitflag,ms,mf这四个量是什么值?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

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

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