【问题标题】:Obtain the value of a symbol in an equation using sympy?使用 sympy 获取方程中符号的值?
【发布时间】:2021-09-21 16:33:12
【问题描述】:

我正在尝试获取 4 个不同变量的值,同时给出以下等式:

f(t)=k1t+k2(t^2)+k3*(c^(t*0.15))

我还得到了以下结果: f(10)=25; f(15)=130; f(20)=650

我正在尝试在 python 中使用 sympy 的 solve() 来获取未知变量(k 和 c)的这些值,并且当 t=10 时我正在使用等式

from sympy import symbols, Eq, solve
import math
import sys

def Find(t):
 k1 = symbols(' k1')
 k2 = symbols(' k2')
 k3 = symbols(' k3')
 c = symbols(' c')
 eq1 = Eq((k1*t)+(k2*(t**2))+(k3*(c**(0.15*t)))==25)
 sol = solve((eq1), (k1, k2, k3, c))
 num =  {sol[k1]}
 print(num)
 



while(1):
  print("\nValues of variables")
  t = 10
  Find(t)
  print("\nEnd")
  sys.exit()

我的问题在于尝试在 {sol[k1]} 中引用它时无法获得 k1 的值。如果我将 k1 作为索引,我会收到此消息

TypeError: list indices must be integers or slices, not Symbol

如果我尝试用 0 或任何数字替换它,我会收到以下消息:

IndexError: list index out of range

【问题讨论】:

    标签: python sympy


    【解决方案1】:

    如果你运行代码print(sol),你将得到输出[],它是一个空列表,k1 不是一个索引,它是一个对象,所以你不能使用k1 进行索引。因此出现错误。

    这可以作为解决方案吗?

    from sympy import symbols, Eq, solve
    import math
    import sys
    
    def Find(t, v):
        k1, k2, k3, c = symbols('k1'), symbols('k2'), symbols('k3'), symbols('c')
        eq1 = Eq((k1 * t) + (k2 * (t ** 2)) + (k3 * (c ** (0.15 * t))), v)
        sol = solve(eq1, [k1, k2, k3, c])
        return sol
    
    print("\nValues of variables")
    t, v = 10, 25
    sol = Find(t, v)[0]
    
    print(f"k1 = {sol[0]}")
    print(f"k2 = {sol[1]}")
    print(f"k3 = {sol[2]}")
    print(f"c = {sol[3]}")
    

    输出

    Values of variables
    k1 = -0.1*c**(3/2)*k3 - 10.0*k2 + 2.5
    k2 = k2
    k3 = k3
    c = c
    

    如果你像这样为每个符号运行它

    def Find(t, v):
        k1, k2, k3, c = symbols('k1'), symbols('k2'), symbols('k3'), symbols('c')
        eq1 = Eq((k1 * t) + (k2 * (t ** 2)) + (k3 * (c ** (0.15 * t))), v)
        sol = solve(eq1, k1), solve(eq1, k2), solve(eq1, k3), solve(eq1, c)
        return sol
    
    print("\nValues of variables")
    t, v = 10, 25
    sol = Find(t, v)
    
    print(f"k1 = {sol[0]}")
    print(f"k2 = {sol[1]}")
    print(f"k3 = {sol[2]}")
    print(f"c = {sol[3]}")
    

    你得到这个作为输出

    Values of variables
    k1 = [-0.1*c**(3/2)*k3 - 10.0*k2 + 2.5]
    k2 = [-0.01*c**(3/2)*k3 - 0.1*k1 + 0.25]
    k3 = [5.0*(-2.0*k1 - 20.0*k2 + 5.0)/c**(3/2)]
    c = [16.1582601752391*(-0.577350269189626*(-0.1*k1/k3 - k2/k3 + 0.25/k3)**0.333333333333333 - I*(-0.1*k1/k3 - k2/k3 + 0.25/k3)**0.333333333333333)**2, 16.1582601752391*(-0.577350269189626*(-0.1*k1/k3 - k2/k3 + 0.25/k3)**0.333333333333333 + I*(-0.1*k1/k3 - k2/k3 + 0.25/k3)**0.333333333333333)**2, 21.5443469003188*(-0.1*k1/k3 - k2/k3 + 0.25/k3)**(2/3)]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 2021-11-06
      相关资源
      最近更新 更多