【问题标题】:fsolve problems with the starting pointf 解决起点问题
【发布时间】:2014-02-07 14:12:31
【问题描述】:

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

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 因为它似乎给出了更合理的值。但有时,我认为方法不收敛,结果值太大。

我该怎么做才能找到最佳解决方案?

非常感谢!

【问题讨论】:

    标签: python optimization numpy simpy


    【解决方案1】:

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

    我注意到有许多 (a,Phi) 组合,其中您的函数没有真正的根。您应该根据您要解决的实际问题进行一些数学运算,并确定函数的根源所在。不知道实际问题,我不能为你做。

    此外,如(已删除)答案中所述,这在 b 上是周期性的,因此使用有界求解器(例如 scipy.optimize.minimize using method='L-BFGS-B' 可能有助于将事情保持在控制。请注意,要使用最小化器找到根,请使用函数的平方。如果找到的最小值不接近于零(供您根据问题定义),则实际最小值可能是复共轭对。

    祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-01
      • 1970-01-01
      • 2020-06-28
      • 2019-07-26
      • 2021-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多