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

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您正在查找给定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))

这篇关于符号解算返回列表索引超出范围错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

Leetcode 234: Palindrome LinkedList(Leetcode 234:回文链接列表)
How do I read an Excel file directly from Dropbox#39;s API using pandas.read_excel()?(如何使用PANDAS.READ_EXCEL()直接从Dropbox的API读取Excel文件?)
subprocess.Popen tries to write to nonexistent pipe(子进程。打开尝试写入不存在的管道)
I want to realize Popen-code from Windows to Linux:(我想实现从Windows到Linux的POpen-code:)
Reading stdout from a subprocess in real time(实时读取子进程中的标准输出)
How to call type safely on a random file in Python?(如何在Python中安全地调用随机文件上的类型?)