符号解算返回列表索引超出范围错误
问题描述
我正在使用JuypterLab尝试解决一个简单的代数问题:
3 * r**0.25 * s**0.75 = 14.086
我需要解决介于3和17之间的r值的%s。
import numpy as np
import pandas
import sympy as sym
from sympy import symbols, solve
s = Symbol('s')
expr = 3 * 18**0.25 * s**0.75 = 14.086
sol = solve(expr)
num = sol[10]
num
当我运行代码时,我得到list out of range error
我也试过
s = Symbol('s')
expr = 3 * 18**0.25 * s**0.75
sol = solve(expr)
u = 14.086
num = sol[u]
num
当我运行此代码时,我收到list indices must be integers or slices, not float
s
的值
在3 and 17
之间。
解决方案
渐近方程是使用Eq()
编写的。您可以使用这样的公式(或多个公式列表)调用solve
。通过将s
作为第二个参数提供,您可以告诉solve
您正在查找给定r
的s
表达式。
solve
的结果可以有几种不同的形式,具体取决于方程式。通常它是一个列表,在这种情况下,只有一个表达式可以求解s
,所以只有一个元素的列表。(例如,一个二次方程可以有多个解。)
solve
的结果通常不是单个数字,而是一个符号表达式。在本例中,它是一个涉及变量r
的表达式。要获取特定r
(例如r=10
)的s
的值,可以使用expr.subs(r, 10)
。有时解决方案是数字的,但仍然是其符号形式(例如sqrt(2)
)。调用.evalf()
将提供完全数字的解决方案。
from sympy import Symbol, solve, Eq, plot
r = Symbol('r')
s = Symbol('s')
equation = Eq(3 * r**0.25 * s**0.75, 14)
sol = solve(equation, s) # [7.79846345438935/r**(1/3)]
s_of_r = sol[0]
for ri in range(3, 18):
si = s_of_r.subs(r, ri).evalf()
print(f"for r={ri} the corresponding value for s={si:.6f}")
Sympy还可以进行一些基本的绘图:
plot(s_of_r, (r, 3, 17))
相关文章