求三次函数的根

2024-04-25 17:40:15 发布

您现在位置:Python中文网/ 问答频道 /正文

事情是这样的。 我尝试在Python中使用fsolve函数来寻找三次函数的根。这个立方函数有一个参数deltaW。我要做的是将参数deltaW-50改为50,同时找到三次函数的根。以下是我的剧本:

from scipy.optimize import fsolve
import matplotlib.pyplot as plt
import numpy as np
import pylab

g = 5.61
gamma = 6.45
kappa = 6.45
J = 6.45
rs = 1.0                            #There are just parameters
m = 5.0*10**(-11)
wm = 2*3.14*23.4

X = []
X1 = []

def func(x):                                #Define the cubic function I  need to solve

        A = 1j*g**2*(kappa + 1j*deltaW)*x*x/(m*wm**2)
        B = J**2 + (1j*deltaW - gamma)*(1j*deltaW + kappa)
        C = A + B
        D = abs(C)*x - J*np.sqrt(2*kappa)*rs
        return D

for deltaW in np.linspace(-50, 50, 1000):
    x0 = fsolve(func, 0.0001)
    X.append(x0)

deltaW = np.linspace(-50, 50, 1000)
plt.plot(deltaW, X)    
plt.show()

运行此脚本时,会收到以下两条消息:

^{pr2}$

很抱歉,我没有足够的声誉把这个剧本的情节放在这里。我的问题是为什么我得到这个信息,为什么我的情节在左边看起来如此怪异。在

是因为我的密码错了吗?在


Tags: 函数import参数asnppltfuncrs
1条回答
网友
1楼 · 发布于 2024-04-25 17:40:15

在几乎所有的寻根案例中,一个好的初始猜测是必不可少的。事实上,有时最好的初步猜测是错误的。这里就是这样。脚本的行为在答案中显示了意外的“尖峰”,可以通过绘制函数和绘制这些尖峰周围找到的根来更深入地观察(嘿,你有一个Python控制台,这真的很简单)。
你会发现解算器返回的解是跳跃式的,尽管函数看起来并没有那么大的不同。问题是,你最初对0.0001的猜测接近于函数的极小值,而解算器却无法想出如何摆脱它。将初始猜测值设置为1.0(很遥远,但是在函数的一个好的、容易下降的部分,它将直接指向根),结果是: enter image description here

所以,有三件事: 1解决方案需要关爱和关注-他们很少汽车。在

  1. 有时“正确”的初始猜测可能与你所知道的正确答案相去甚远,但这样一来,解算器就可以轻松地完成它了。

  2. 交互式Python控制台允许您快速查看正在发生的事情。利用它的力量!

相关问题 更多 >