寻找方程的数值解

问题描述 投票:1回答:1

我正在求解多个方程,并简化为以下简化版本:

import sympy as sp
Diff = sp.Symbol('Diff')
eq1 = 0.0363984561703043*Diff**(-0.333333333333333)*(0.01 - 1.288e-18*(2.576e-18*Diff - 2.79999921278e-7)**(-0.5)) + 0.0363984561703043*Diff**(-0.333333333333333)*(17857.1428571429*(2.576e-18*Diff - 2.79999921278e-7)**0.5 - 434782608695.652) + 1299.94486322516*Diff**0.666666666666667
ans = sp.solve(eq1 - 1, Diff)
print(ans)

我需要帮助来解决符号(Diff)吗?我已经尝试过solve()nsolve(),但没有给出以下消息的解决方案:

'ValueError:在给定的公差范围内找不到根。(0.00104637107257089658395> 2.16840434497100886801e-19)试试另一个起点或调整参数。'

python sympy numeric
1个回答
0
投票

首先,让我们尝试绘制函数(我不得不多次提高x轴限制,直到最终找到类似于根的东西:]]

eq = sp.Abs(eq1 - 1)
xs = np.linspace(-1e6, 2e7, 100)
ys = [eq.evalf(subs={Diff: x}) for x in xs]
plt.plot(xs, ys)
plt.hlines(0, -1e6, 2e7)

plot(abs)

[好,所以如果有根,它必须位于1.0-1.5 * 10 ^ 7附近。现在,在该区域中观察方程的虚部:

eq = sp.im(eq1 - 1)
xs = np.linspace(1e7, 1.5e7, 100)
ys = [eq.evalf(subs={Diff: x}) for x in xs]
plt.plot(xs, ys)
plt.hlines(0, 1e7, 1.5e7)

plot(im)

它没有达到零,这意味着您的函数没有根。但是,在那一点上,我们看到绝对值图表几乎触及了它,它的确接近零。您可以通过仅解决实际部分来找到这一点:

sp.nsolve(sp.re(eq1 - 1), Diff, 1e7)
> 12173913.2204420

eq1.subs(Diff, 12173913.2204420).evalf()
0.999999925494194 + 0.00149499418051858*I
© www.soinside.com 2019 - 2024. All rights reserved.