本文介绍了符号解算返回列表索引超出范围错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用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))
这篇关于符号解算返回列表索引超出范围错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!