符号解算返回列表索引超出范围错误

2022-04-06 00:00:00 python sympy

问题描述

我正在使用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您正在查找给定rs表达式。

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))

相关文章