scipy 用渐近法数值求解积分

uqxowvwt  于 2022-11-10  发布在  其他
关注(0)|答案(2)|浏览(132)

你好,我在python(34)中很难解出这个方程,我还添加了35和36作为Ci.

的信息

以下是我目前所掌握的情况:

import numpy as np
import scipy as sp
import sympy as smp
smp.init_printing(True)
C_i = smp.Function('C_i')
t, x, v, tao = smp.symbols('t, x, v, tao', positive=True) # tao = lambda x, v: x/v
m2 = smp.Integral((C_i(t-tao))**2,(tao, 0,t))
m2.doit()
m2_s = m2.doit().simplify()
t_arr = np.arange(0,1000,1)
fm2_1 = smp.lambdify((x,v,t), m2_s, ['scipy', {'C_i': lambda e:0.666666}])

我不知道如何添加条件,陶= x/v。我不需要使用sympy,它只是我可以找到网上作为指导。

pkln4tw6

pkln4tw61#

可以使用Integral.transform方法在积分中进行替换:

In [10]: m2
Out[10]: 
t              
⌠              
⎮   2          
⎮ Cᵢ (t - τ) dτ
⌡              
0              

In [11]: m2.transform(tau, (x/v, x))
Out[11]: 
t⋅v              
 ⌠               
 ⎮    2⎛    x⎞   
 ⎮  Cᵢ ⎜t - ─⎟   
 ⎮     ⎝    v⎠   
 ⎮  ────────── dx
 ⎮      v        
 ⌡               
 0

否则我不太确定你的方程34是什么意思。

koaltpgm

koaltpgm2#

你的sympy表达式是一个未赋值的积分:

In [10]: m2_s
Out[10]:

得到的lambda化函数使用scipy.integrate.quad

In [13]: help(fm2_1)
Help on function _lambdifygenerated:

_lambdifygenerated(x, v, t)
    Created with lambdify. Signature:

    func(x, v, t)

    Expression:

    Integral(C_i(t - tao)**2, (tao, 0, t))

    Source code:

    def _lambdifygenerated(x, v, t):
        return quad(lambda tao: C_i(t - tao)**2, 0, t)[0]

    Imported modules:

    from scipy.integrate import quad

当您指定x,v作为函数参数时,它们根本不会在表达式中使用!
如果要对scipy积分进行更多的控制,则应该对要积分的表达式进行lambdify操作:

In [14]: fn = smp.lambdify((C_i,t,tao),(C_i(t-tao))**2)    
In [15]: help(fn)
Help on function _lambdifygenerated:

_lambdifygenerated(C_i, t, tao)
    Created with lambdify. Signature:

    func(C_i, t, tao)

    Expression:

    C_i(t - tao)**2

    Source code:

    def _lambdifygenerated(C_i, t, tao):
        return C_i(t - tao)**2

相关问题