Sympy #39;solve#39; returns #39;list index out of range#39; error(符号解算返回列表索引超出范围错误)
本文介绍了符号解算返回列表索引超出范围错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在使用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))
这篇关于符号解算返回列表索引超出范围错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:符号解算返回列表索引超出范围错误
基础教程推荐
猜你喜欢
- 包装空间模型 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- 求两个直方图的卷积 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- 修改列表中的数据帧不起作用 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
