我正在研究python中的两个不同的系统,寻找不动点及其稳定性。成功地解决了第一个问题,但是使用相同的方法会产生一个错误,我不知道如何在第二个方法中处理。
TypeError: loop of ufunc does not support argument 0 of type Zero which has no callable exp method我真的不知道如何处理它,因为当我为这个错误做了一个例外,我只是跳过答案,我确信有可能的答案和分析,我认为他们没有理由不存在。
from sympy import *
from numpy import *
from matplotlib import pyplot as plt
r = symbols('r', real=True)
x = symbols('x', real =True)
#first one
fx =r*x+((x**3)/(1+x**2)) # DEf. both fet and right side in EQ
fps = solve(fx, x)
print(f"The fixed points are: {fps}")
dfx = lambdify(x,fx.diff(x))
for fp in fps:
stable_interval = solve_univariate_inequality(dfx(fp)<0, r, domain=Reals, relational=False)
unstable_interval = solve_univariate_inequality(dfx(fp)>0, r, domain=Reals, relational=False)
#print(type(stable_interval))
print(f"{fp} is stable when {stable_interval}")
#print(type(unstable))
print(f"{fp} is unstable when {unstable_interval}")fx2 = r*x+( x* E**x)
fps2 = solve(fx2, x)
print(f"The fixed points are: {fps}")
dfx2 = lambdify(x,fx2.diff(x))
for fp in fps2:
stable_interval = solve_univariate_inequality(dfx2(fp)<0, r, domain=Reals, relational=False)
unstable_interval = solve_univariate_inequality(dfx2(fp)>0, r, domain=Reals, relational=False)
#print(type(stable_interval))
print(f"{fp} is stable when {stable_interval}")
#print(type(unstable))
print(f"{fp} is unstable when {unstable_interval}")我希望我创建的方法可以应用到第二个系统fx2中,但我不明白为什么这不是真的。
发布于 2022-10-26 20:26:12
奥斯卡在评论中提到,不要混入明星进口:那是正确的!让我们了解一下你在做什么:
from sympy import *您正在从from sympy import *中导入所有东西,比如cos、sin、.from numpy import *,您是从numpy导入所有东西,比如cos、sin、.但是,许多东西都有相同的名称,因此您实际上是在重写以前的导入。结果:一塌糊涂,这肯定会引起错误,因为您的名称空间现在包含指向numpy的名称和指向同情的其他名称。Numpy和Sympy不能很好地合作!解决问题的最佳方法。把事情分开,像这样:
import sympy as sp
import numpy as np或只从一个模块导入所有内容:
from sympy import *
import numpy as np现在,谈谈你的实际问题。使用此命令:
dfx2 = lambdify(x,fx2.diff(x))
# where fx2.diff(x) results in:
# r + x*exp(x) + exp(x)lambdify创建了一个数值函数,该函数将由Numpy计算:请注意,该函数包含一个指数,即Numpy指数。然后,使用dfx2(fp)计算这个函数,其中fp是一个符号对象(意思是,它是Sympy对象)。如前所述,Numpy和Sympy并不能很好地合作。
最简单的解决方案:要求lambdify创建一个由Sympy评估的函数:
dfx2 = lambdify(x, fx2.diff(x), "sympy")现在,一切都如期而至。
或者,您不使用lambdify。相反,您可以将值替换为符号表达式。例如:
dfx2 = fx2.diff(x)
for fp in fps2:
stable_interval = solve_univariate_inequality(dfx2.subs(x, fp)<0, r, domain=Reals, relational=False)
unstable_interval = solve_univariate_inequality(dfx2.subs(x, fp)>0, r, domain=Reals, relational=False)
#print(type(stable_interval))
print(f"{fp} is stable when {stable_interval}")
#print(type(unstable))
print(f"{fp} is unstable when {unstable_interval}")https://stackoverflow.com/questions/74209365
复制相似问题