苑汐
2021-06-16 12:07
采纳率: 100%
浏览 76

初学者求助:用python解一阶线性微分方程组

目标:由f3,f4求解i(t),e(t)的数值解(给定初值)

想拜托大佬们帮我看看这个思路是否可行,以及为何报错:

from sympy import *

t=symbols('t')

f3=Eq(i(t).diff(t),1/5.1*e(t)-11.45*t**-1.662*i(t))

f4=Eq(e(t).diff(t),-1/5.1*e(t)+4*i(t))

eq=(f3,f4)

# 第一步求解i(t),e(t)的结果:

# i(t)=C1*x0(t) + C2*x0(t)*Integral(0.196078431372549*exp(m)*exp(n)/x0(t)**2, t)

# e(t)=C1*y0(t) + C2*(y0(t)*Integral(0.196078431372549*exp(m)*exp(n)/x0(t)**2, t) + exp(m)*exp(n)/x0(t))

# 其中:

# m=Integral(-0.196078431372549, t)=-0.196078431372549*t

# n=Integral(-11.45*t**(-1.662), t)=17.2960725075529*t**(-0.662)

# 第二步赋初值:C1=4156,C2=25000,将原方程组转换为求解未知函数x0(t),y0(t)的方程组(在下面程序中用x,y分别代替x0,y0):

x,y=symbols('x,y',cls=Function)

f3=Eq(4900.0*Derivative(x(t),t)*Integral(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2,t) + 4156*Derivative(x(t),t) + 4900.0*exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t),1/5.1*(4156*y(t) + 25000*(y(t)*0.196*integrate(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2,t) + exp(-0.196*t)*exp(17.296*t**(-0.662))/x(t)))-11.45*t**-1.662*(4156*x(t) + 25000*x(t)*0.196*integrate(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2,t)))

f4=Eq(-286248.8*t**(-1.662)*exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t) + 4900.0*Derivative(y(t), t)*Integral(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2, t) + 4156*Derivative(y(t), t) - 4900.0*exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t) + 4900.0*y(t)*exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2 - 25000*exp(17.296*t**(-0.662))*exp(-0.196*t)*Derivative(x(t), t)/x(t)**2,-1/5.1*(4156*y(t) + 25000*(y(t)*0.196*integrate(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2,t) + exp(-0.196*t)*exp(17.296*t**(-0.662))/x(t)))+4*(4156*x(t) + 25000*x(t)*0.196*integrate(exp(17.296*t**(-0.662))*exp(-0.196*t)/x(t)**2,t)))

eq=(f3,f4)

results=dsolve(eq)

for result in results:

    print(result)

 

报错:

Traceback (most recent call last):
  File "c:/Users/lenovo/Desktop/1.py", line 96, in <module>
    results=dsolve(eq)
  File "C:\Users\lenovo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sympy\solvers\ode\ode.py", 
line 588, in dsolve
    match = classify_sysode(eq, func)
  File "C:\Users\lenovo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sympy\solvers\ode\ode.py", 
line 1971, in classify_sysode
    type_of_equation = check_nonlinear_2eq_order1(eq, funcs, func_coef)
  File "C:\Users\lenovo\AppData\Local\Programs\Python\Python36-32\lib\site-packages\sympy\solvers\ode\ode.py", 
line 2106, in check_nonlinear_2eq_order1
    (r1[f].subs(x(t),u).subs(y(t),v))/
TypeError: 'NoneType' object is not subscriptable

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

2条回答 默认 最新

  • 盼小辉丶 2021-06-16 16:19
    已采纳

    这个错误是使用了未定义的变量.

    1 打赏 评论
  • 苑汐 2021-06-16 18:39

    感谢!还想追问一下程序里是哪个变量还需要给定义?

    打赏 评论

相关推荐 更多相似问题