[已解决] 关于fsolve求解范围的问题

[复制链接]
南海鱼游 发表于 7 天前
本帖最后由 南海鱼游 于 2022-11-23 19:47 编辑

目标:
求解一个如下非线性方程组的解,并想将该解限定在纯虚数的范围内;
示例代码如下:
  1. funHd=@(Zvec)func(Zvec);
  2. x0=[13.7472i 13.7472i 0.0020i];
  3. % options = optimoptions('fsolve','Display','none','PlotFcn',@optimplotfirstorderopt);
  4. [zV,fv] = fsolve(funHd,x0)
  5. function f=func(Zvec)
  6. f=[

  7.                                                             Zvec(3)^2 - ((- Zvec(3)^2 + Zvec(1)*Zvec(2) + 1)^2 - 4*Zvec(1)*Zvec(2))^(1/2)/(2*Zvec(2)) - Zvec(1)*Zvec(2) - (1 + 6632178539682017i/17592186044416)
  8. Zvec(3)^2 - ((- Zvec(3)^2 + Zvec(1)*Zvec(2) + 1)^2 - (Zvec(1)/2 + Zvec(2)/2 + Zvec(3))*(2*Zvec(1) + 2*Zvec(2) - 4*Zvec(3)))^(1/2)/(Zvec(1) + Zvec(2) - 2*Zvec(3)) - Zvec(1)*Zvec(2) - (1 + 6632160806443741i/17592186044416)
  9.                                                             Zvec(3)^2 - ((- Zvec(3)^2 + Zvec(1)*Zvec(2) + 1)^2 - 4*Zvec(1)*Zvec(2))^(1/2)/(2*Zvec(1)) - Zvec(1)*Zvec(2) - (1 + 6632178539682017i/17592186044416)
  10. ];
  11. end
复制代码
请问有无限定解范围为纯虚数的的限定设置?




最佳答案


开水窝瓜 发表于 6 天前
带约束的非线性方程组可能对你会有帮助。

4 条回复


南海鱼游 发表于 7 天前
暂时想到的方法是取变量实部的平方附加到求解函数上去,即原目标函数变为f=abs(f)+addCondtion^2;
暂未找到其他方法;
但是这样带来的问题是,目标函数变复杂,fsolve求解结果不收敛,残差很大;
暂未解决该问题。

shihe 发表于 6 天前
zvec1.realpart: -13.9623872770978
zvec1.imagpart: 13.747190700955
zvec2.realpart: -13.9623872770902
zvec2.imagpart: 13.7471907009334
zvec3.realpart: -5.3970183436627E-6
zvec3.imagpart: 0.00201595656603308

开水窝瓜 发表于 6 天前
带约束的非线性方程组可能对你会有帮助。
回复此楼

南海鱼游 发表于 6 天前
开水窝瓜 发表于 2022-11-24 11:01
带约束的非线性方程组可能对你会有帮助。

很有帮助,多谢;但是还是存在残差很大的问题。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

相关帖子
相关文章
热门教程
站长推荐
快速回复 返回顶部 返回列表