首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用起点解决问题

用起点解决问题
EN

Stack Overflow用户
提问于 2014-02-07 22:12:32
回答 1查看 1K关注 0票数 0

我正在使用fsolve来解决一个非线性方程。我的问题是,根据起点的不同,解决方案会发生变化,我不确定我找到的解决方案是最合理的。这是代码

代码语言:javascript
复制
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import fsolve, brentq,newton


A = np.arange(0.05,0.95,0.01)


PHI = np.deg2rad(np.arange(0,90,1))

def f(b):
    return np.angle((1+3*a**4-3*a**2)+(a**4-a**6)*(np.exp(2j*b)+2*np.exp(-1j*b))+(a**2-2*a**4+a**6)*(np.exp(-2j*b)+2*np.exp(1j*b)))-Phi  


B = np.zeros((len(A),len(PHI)))
for i in range(len(A)):
    for j in range(len(PHI)):
        a = A[i]
        Phi = PHI[j]
        b = fsolve(f, 1)
        B[i,j]= b

我修正了x0 =1,因为它似乎给出了更合理的值。但有时,我认为方法不收敛,结果值太大。

我能做些什么来找到最佳解决方案?

非常感谢!

EN

回答 1

Stack Overflow用户

发布于 2014-02-08 06:12:33

让非线性求解器松散的永恒问题是对你的函数、你的初始猜测、求解器本身以及你试图解决的问题有一个很好的理解。

我注意到有许多(a,φ)组合,其中你的函数没有真正的根。你应该在你试图解决的实际问题的指导下做一些数学计算,并确定函数应该在哪里有根。不知道实际的问题,我不能为你做这件事。

此外,正如a(已删除)答案中所指出的,这在b上是循环的,因此使用有界求解器(例如使用scipy.optimize.minimize =‘L-BFGS-B’的方法)可能有助于将事情保持在控制之下。请注意,要使用最小化器查找根,请使用函数的平方。如果找到的最小值不接近于零(您可以根据问题进行定义),则实际的最小值可能是复共轭对。

祝好运。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21629919

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档