为什么sympy无法在Python解决方案上收敛?

马克·麦格文

我有一个方程式正试图找出该方程式的导数等于1。

我使用sympy的solve并从方程式中减去1来求解0,但它永远不会收敛于在这种情况下对于f'(x)= 1应该为x = 260.806的解决方案。

它为什么找不到此解决方案?如果不重新编写除sympy之外的内容,我可以更改什么?它不会引发任何错误,只是会无限期地尝试。

import sympy as sym
from sympy import symbol, symbols, solve, init_printing, diff, lambdify, exp
import matplotlib.pyplot as plt
import numpy as np

x_sym = symbols('x')
init_printing(use_unicode=True)
y_sym_orig = x_sym*exp(0.4*(1-x_sym/550))
y_sym_deriv = diff(y_sym_orig, x_sym, 1)
print('Orig=', y_sym_orig)
print('Deriv=', y_sym_deriv)

y_orig = sym.lambdify(x_sym, y_sym_orig)
y_deriv = sym.lambdify(x_sym, y_sym_deriv)

x_sol=solve(y_sym_deriv-1, x_sym)
print('The derivative has y=1 at: ',x_sol)

plt.figure()
x1 = np.arange(0, 300, .1)
y_graph = y_orig(x1)
y_deriv = y_deriv(x1)
plt.ylabel('y')
plt.xlabel('x')
plt.grid(True, which='both')
plt.ylim(0,1)
plt.plot(x1, y_graph, 'r', label='Original')
plt.plot(x1, y_deriv, 'b', label='Derivitive')
plt.title('Original and Derivitives')
plt.legend()
plt.show()
用户名

SymPy强烈喜欢有理数而不是浮点数。在公式中添加from sympy import Rational和替换0.4Rational('0.4')

y_sym_orig = x_sym*exp(Rational('0.4')*(1-x_sym/550))
y_sym_deriv = diff(y_sym_orig, x_sym, 1)
x_sol = solve(y_sym_deriv-1, x_sym)
print('The derivative has y=1 at: ', x_sol)

版画

The derivative has y=1 at:  [-1375*LambertW(exp(3/5)) + 1375]

笔记:

  • Rational(2, 5)是在SymPy中表示2/5的另一种方法。Rational(0.4)还是Rational(2/5)无济于事:两个版本都首先创建了一个Python浮点型,其有理形式不是2/5,而是3602879701896397/9007199254740992。

  • 在求解之前(如您所愿)打印出方程是一个好主意。在此,导数公式为-0.00108496341646638*x*exp(-0.000727272727272727*x) + 1.49182469764127*exp(-0.000727272727272727*x)原始形式和-x*exp(-x/1375 + 2/5)/1375 + exp(-x/1375 + 2/5)有理形式。考虑到浮点算术与符号数学规则有何不同,方程组充满浮点时用符号法求解是一项艰巨或不可能的任务。

  • 有关更多信息,请参见Python数字与SymPy数字

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Google OR-Tools:解决方案无法使用 python 收敛任务大小的分配

为什么这个 Python 解决方案不是就地解决方案?

在 SymPy 中,为什么我的解决方案 (nonlinsolve) 返回错误答案?

实现收敛的迭代解决方案

无法使用Sympy解决方案找到符号解决方案

Sympy:解决方案的顺序

为什么我的C ++解决方案通过codility无法解决“ Fish”挑战?

OpenCV calibrateCamera无法收敛到正确的解决方案(投影仪校准)

为什么Z3Py无法提供所有可能的解决方案

为什么此GEKKO脚本无法提供更好的解决方案?

为什么需要在GCP上使用Centrify等安全解决方案?

从脚本在clearcase上设置视图会退出脚本,为什么还需要解决方案?

这是为什么GoLang解决方案快则相应的Java解决方案?

为什么此MinDepth级解决方案与递归解决方案相比这么慢?

为什么我的解决方案有效,而其他解决方案却无效?

数独求解器在 Python 中给出了部分解决方案:为什么?

Python 3 try-except:哪种解决方案更好,为什么?

为什么此解决方案不能使用for循环?

为什么我的解决方案对于反转整数是错误的?

为什么此Mutex解决方案不正确?

为什么Firefox忘记变量的值?调试解决方案?

为什么迭代器不是CuncurentModificationException的解决方案?

为什么要在解决方案中添加+1

为什么使用`elem`的解决方案需要`Eq a`约束?

提交项目会提交解决方案,为什么呢?

为什么这只会产生一对解决方案

为什么此递归解决方案不起作用?

为什么 fmincon 产生不同的解决方案

为什么此解决方案不会陷入无限循环?