绘制多变量 SymPy 表达式的切片

问题描述 投票:0回答:1

我正在尝试绘制具有多个变量的表达式。我想为除一个之外的所有符号指定数值,并绘制相对于该一个变量的函数。

表达式如下所示:

我尝试使用这种方法进行绘图:

import numpy as np
import sympy as smp
import matplotlib.pyplot as plt
smp.init_printing() 
dP_single,dP_parallel, Q,mu,L_filter,L_cake,K_filter,K_cake=smp.symbols('dP_single,dP_parallel, Q,mu,L_filter,L_cake,K_filter,K_cake')

Eq1=smp.Eq((-Q*mu*(L_filter+L_cake)/(K_filter+K_cake))-dP_single,0)
Eq2=smp.Eq((-(Q/2)*mu*(L_filter+(L_cake/2))/(K_filter+K_cake))-dP_parallel,0)
sol=smp.solve([Eq1,Eq2],[dP_single,dP_parallel])
display(sol)
Eq2=smp.Eq((1/4)*(-L_cake*Q*mu-2*L_filter*Q*mu)*dP_single/(-L_cake*Q*mu-L_filter*Q*mu)-dP_parallel,0).simplify()
display(Eq2)
sol2=smp.solve(Eq2,dP_parallel)
display(sol2[0].simplify())

def percent_dP_single(L_cake_):
    percent_dPsingle=smp.N(sol2[0].subs({'dP_single':1,'L_cake':L_cake_,'L_filter':.005}))
    return percent_dPsingle 

L_cake=np.linspace(0,.01,200)
plt.plot(L_cake,percent_dP_single(L_cake))

我收到以下错误:

x and y must have same first dimension, but have shapes (200,) and (1,)
python matplotlib sympy
1个回答
0
投票

使用 NumPy

vectorize
类,以便您可以使用 NumPy 数组作为参数来调用
percent_dP_single
函数(当前需要单个标量值):

import numpy as np
import sympy as smp
import matplotlib.pyplot as plt
smp.init_printing() 
dP_single,dP_parallel, Q,mu,L_filter,L_cake,K_filter,K_cake=smp.symbols('dP_single,dP_parallel, Q,mu,L_filter,L_cake,K_filter,K_cake')

Eq1=smp.Eq((-Q*mu*(L_filter+L_cake)/(K_filter+K_cake))-dP_single,0)
Eq2=smp.Eq((-(Q/2)*mu*(L_filter+(L_cake/2))/(K_filter+K_cake))-dP_parallel,0)
sol=smp.solve([Eq1,Eq2],[dP_single,dP_parallel])
display(sol)
Eq2=smp.Eq((1/4)*(-L_cake*Q*mu-2*L_filter*Q*mu)*dP_single/(-L_cake*Q*mu-L_filter*Q*mu)-dP_parallel,0).simplify()
display(Eq2)
sol2=smp.solve(Eq2,dP_parallel)
display(sol2[0].simplify())

# add vectorize decorator
@np.vectorize
def percent_dP_single(L_cake_):
    percent_dPsingle=smp.N(sol2[0].subs({'dP_single':1,'L_cake':L_cake_,'L_filter':.005}))
    return percent_dPsingle 

L_cake=np.linspace(0,.01,200)
plt.plot(L_cake,percent_dP_single(L_cake))
© www.soinside.com 2019 - 2024. All rights reserved.