【问题标题】:solution system of linear equations in sympysympy中线性方程组的解系统
【发布时间】:2021-04-01 21:43:46
【问题描述】:

你能告诉我吗,我需要在 python 中使用 sympy 符号求解一个线性方程组。我已经对线性方程组的自动创建进行了编程,方程的数量由数字 n(预定义)确定。我也设置了变量。 结果如下:

##########  system of linear equations ##########

 [-mui0*exp(Ea0**2/(T0*k)) - mui0*exp(Ea1**2/(T0*k)) - mui0*exp(Ea2**2/(T0*k)) - mui0*exp(Ea3**2/(T0*k)) + (Eb0**2/(T0*k) - 2*Ec0)*exp(Ea0**2/(T0*k)) + (Eb1**2/(T0*k) - 2*Ec1)*exp(Ea1**2/(T0*k)) + (Eb2**2/(T0*k) - 2*Ec2)*exp(Ea2**2/(T0*k)) + (Eb3**2/(T0*k) - 2*Ec3)*exp(Ea3**2/(T0*k)), -mui1*exp(Ea0**2/(T1*k)) - mui1*exp(Ea1**2/(T1*k)) - mui1*exp(Ea2**2/(T1*k)) - mui1*exp(Ea3**2/(T1*k)) + (Eb0**2/(T1*k) - 2*Ec0)*exp(Ea0**2/(T1*k)) + (Eb1**2/(T1*k) - 2*Ec1)*exp(Ea1**2/(T1*k)) + (Eb2**2/(T1*k) - 2*Ec2)*exp(Ea2**2/(T1*k)) + (Eb3**2/(T1*k) - 2*Ec3)*exp(Ea3**2/(T1*k)), -mui2*exp(Ea0**2/(T2*k)) - mui2*exp(Ea1**2/(T2*k)) - mui2*exp(Ea2**2/(T2*k)) - mui2*exp(Ea3**2/(T2*k)) + (Eb0**2/(T2*k) - 2*Ec0)*exp(Ea0**2/(T2*k)) + (Eb1**2/(T2*k) - 2*Ec1)*exp(Ea1**2/(T2*k)) + (Eb2**2/(T2*k) - 2*Ec2)*exp(Ea2**2/(T2*k)) + (Eb3**2/(T2*k) - 2*Ec3)*exp(Ea3**2/(T2*k)), -mui3*exp(Ea0**2/(T3*k)) - mui3*exp(Ea1**2/(T3*k)) - mui3*exp(Ea2**2/(T3*k)) - mui3*exp(Ea3**2/(T3*k)) + (Eb0**2/(T3*k) - 2*Ec0)*exp(Ea0**2/(T3*k)) + (Eb1**2/(T3*k) - 2*Ec1)*exp(Ea1**2/(T3*k)) + (Eb2**2/(T3*k) - 2*Ec2)*exp(Ea2**2/(T3*k)) + (Eb3**2/(T3*k) - 2*Ec3)*exp(Ea3**2/(T3*k))]

###### vars ###### 
[Ea0, Ea1, Ea2, Ea3, Ea4, Eb0, Eb1, Eb2, Eb3, Eb4, Ec0, Ec1, Ec2, Ec3, Ec4]

###### ###### ###### ###### ###### ###### ###### ###### 

现在当我写:a = linsolve(list_eq,list_var)

the error gets out : SympifyError: Sympify of expression 'could not parse '['' failed, because of exception being raised:
TokenError: ('EOF in multi-line statement', (2, 0))

如何为 sympy 找到线性方程组的解

【问题讨论】:

  • 你应该展示完整的代码来演示这个例子。我不知道如何查看您看到的错误消息。在任何情况下,您显示的方程式在vars 中给出的符号中都不是线性的。

标签: python sympy


【解决方案1】:

这是我的完整代码:

    from sympy import exp,symbols
    from sympy import Float,linsolve

    def chis_znam_construct(T,i_eq,n):
    
        En1 = symbols('Eb:' + str(n+1))
        En0 = symbols('Ea:' + str(n+1))
        En2 = symbols('Ec:' + str(n+1))
        mui = symbols('mui:' + str(n+1))
        k = symbols('k')
        chis=0
        znam=0
        i_levels=0
        eq=[]
        varS=[]
        dictvanfleck=dict({})
        dictvanfleck['eq']=[]        
        dictvanfleck['vars']=[]

    def getvars(f,varS):
        i_var=0
        while i_var<=(len(f)-1):
            varS.append(f[i_var])
            i_var+=1
        return varS
    variable=getvars(En0,varS)
    variable=getvars(En1,varS)
    variable=getvars(En2,varS)

    for i_levels in range(n):
        chis+=((En1[i_levels]**2)/(k*T)- 
              (En2[i_levels]+En2[i_levels]))*exp((En0[i_levels]**2)/(k*T))
        znam+=mui[i_eq]*exp((En0[i_levels]**2)/(k*T))
        i_levels+=1
    print('')
    print('')
    eq.append(chis-znam)
    dictvanfleck['vars']=variable
    dictvanfleck['eq']=eq
    return dictvanfleck


    def eq_construct(T,n):
        i_eq=0
        eq=[]
        for i_eq in range(n):
            eq.append(chis_znam_construct(T[i_eq],i_eq,n))
            i_eq+=1
        return eq 

    print('')
    print('')

    def solve_eq(T,n):
        equations=eq_construct(T,n)
        eqA=equations[1]
        var=eqA['vars']
        i=0
        equat=[]
        while i<=(n-1):
            eqA=equations[i]
            eqq=eqA['eq']
            equat.append(eqq[0])
            i+=1
        list_eq=str(equat)
        list_var=str(var)
        print('')
        print('list_eq',list_eq)
        print('')
        print('list_var',list_var)
        a = linsolve(list_eq,list_var)
        return a 

    n = 4
    T = symbols('T:' + str(n+1))
    equations=solve_eq(T,n)

【讨论】:

    【解决方案2】:

    你会笑,但是发现了一个错误:首先,我从列表中创建了一个元组,一些错误消失了;但最有趣的是,当我明确设置方程和变量时,simpi 无法求解方程:

    n = 4
    T = sp.symbols('T:' + str(n+1))
    Ea0, Ea1, Ea2, Ea3, Ea4, Eb0, Eb1, Eb2, Eb3, Eb4, Ec0, Ec1, Ec2, Ec3, Ec4, T0, T1, T2,
    T3, T4, mui0, mui1, mui2, mui3, mui4 = sp.symbols('Ea0, Ea1, Ea2, Ea3, Ea4, Eb0, Eb1,
    Eb2, Eb3, Eb4, Ec0, Ec1, Ec2, Ec3, Ec4, T0, T1, T2, T3, T4, mui0, mui1, mui2, mui3,
    mui4')
    
    eq_one=sp.Eq(-mui0*exp(Ea0**2/(T0*k)) - mui0*exp(Ea1**2/(T0*k)) - 
    mui0*exp(Ea2**2/(T0*k)) - 
    mui0*exp(Ea3**2/(T0*k)) + (Eb0**2/(T0*k) - 2*Ec0)*exp(Ea0**2/(T0*k)) + 
    (Eb1**2/(T0*k) - 2*Ec1)*exp(Ea1**2/(T0*k)) + (Eb2**2/(T0*k) -
    2*Ec2)*exp(Ea2**2/(T0*k)) + 
    (Eb3**2/(T0*k) - 2*Ec3)*exp(Ea3**2/(T0*k)))
        
        
    
    eq_two=sp.Eq(-mui1*exp(Ea0**2/(T1*k)) - mui1*exp(Ea1**2/(T1*k)) - 
    mui1*exp(Ea2**2/(T1*k)) - mui1*exp(Ea3**2/(T1*k)) + 
    (Eb0**2/(T1*k) - 2*Ec0)*exp(Ea0**2/(T1*k)) + (Eb1**2/(T1*k) - 
    2*Ec1)*exp(Ea1**2/(T1*k)) + (Eb2**2/(T1*k) - 2*Ec2)*exp(Ea2**2/(T1*k)) + 
    (Eb3**2/(T1*k) - 2*Ec3)*exp(Ea3**2/(T1*k)))
         
    
    eq_three=sp.Eq(-mui2*exp(Ea0**2/(T2*k)) - mui2*exp(Ea1**2/(T2*k)) -
    mui2*exp(Ea2**2/(T2*k)) - 
    mui2*exp(Ea3**2/(T2*k)) + (Eb0**2/(T2*k) - 2*Ec0)*exp(Ea0**2/(T2*k)) + 
    (Eb1**2/(T2*k) - 2*Ec1)*exp(Ea1**2/(T2*k)) + (Eb2**2/(T2*k) - 
    2*Ec2)*exp(Ea2**2/(T2*k)) + 
    (Eb3**2/(T2*k) - 2*Ec3)*exp(Ea3**2/(T2*k)))
         
    
    eq_four=sp.Eq(-mui3*exp(Ea0**2/(T3*k)) - mui3*exp(Ea1**2/(T3*k)) - 
    mui3*exp(Ea2**2/(T3*k)) - mui3*exp(Ea3**2/(T3*k)) + (Eb0**2/(T3*k) -
    2*Ec0)*exp(Ea0**2/(T3*k)) + 
    (Eb1**2/(T3*k) - 2*Ec1)*exp(Ea1**2/(T3*k)) + (Eb2**2/(T3*k) - 
    2*Ec2)*exp(Ea2**2/(T3*k)) + 
    (Eb3**2/(T3*k) - 2*Ec3)*exp(Ea3**2/(T3*k)))
    
    
    
    ans = sp.solve((eq_one, eq_two,eq_three,eq_four), (Ea0, Ea1, Ea2, Ea3))
    
    print('ответ :', ans)
    
    raise NotImplementedError('could not solve %s' % eq2)
    
    NotImplementedError: could not solve ....
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-20
      • 2015-10-11
      • 2021-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多