程序问答   发布时间:2022-06-01  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了Python 中的 Polyeig(Orr-Sommerfeld 方程)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决Python 中的 Polyeig(Orr-Sommerfeld 方程)?

开发过程中遇到Python 中的 Polyeig(Orr-Sommerfeld 方程)的问题如何解决?下面主要结合日常开发的经验,给出你关于Python 中的 Polyeig(Orr-Sommerfeld 方程)的解决方法建议,希望对你解决Python 中的 Polyeig(Orr-Sommerfeld 方程)有所启发或帮助;

我正在做一个小项目,试图使用 Python 确定 Orr-Sommerfeld 方程的特征值,这是特定的方程:

Python 中的 Polyeig(Orr-Sommerfeld 方程)

在特定的边界条件下:

Python 中的 Polyeig(Orr-Sommerfeld 方程)

注意到的数量 U 是通过解决 Blasius 方程(我求解)推导出的速度。我们还虑以下数量:

? = 0、? = 0.125、?? = 520 和 ? = ∂/∂?。

问题的目的是找到?,为此建议将问题写成如下:

? = ?1 + ?2 ? + ?3 ?^2 + ?4 ?^3 + ?5 ?^4

知道这是一个特征值问题,我试着写了这段代码来解决它:

ny=99
long=70
y=np.linspace(-long,long,ny+2)
beta=0
I=np.IDentity(ny+1)
w=0.125
Re=520
dy=long/ny

# We discretize our operators

D2 = sp.diags([1,-2,1],[-1,(ny+1,ny+1) )/dy**2 
D4=sp.diags([1,-4,6,[-2,-1,1,2],ny+1) )/dy**4

# Here we use the Blasius resolution with the boundary value problem solver of Python

U=res.y[0] 
U2=res.Y[2]

然后我们像这样构造矩阵:

A=U2 #Alpha
B=-U #Alpha**3
C=-w*D2 #Alpha**0
D=D2*U #Alpha
E=w*I #Alpha**2
F=(1/(Re*1j))*D4 #Alpha**0
G=(1/(Re*1j))*I #Alpha**4
H=-(1/(Re*1j))*2*D2 #Alpha**2
M1=C+F
M2=A+D
M3=H+E
M4=B
M5=G
V=A+B+C+D+E+F+G+H

通常情况下,使用 Matlab 我知道我们可以应用 Matlab 的“polyeig”求解器来实现这个问题,但我认为 Python 中没有直接的等价物,所以我试着写这样的问题:通过尝试带回问题的一维表示(两个矩阵 L 和 K 的目标):

L1=np.array([[-M1,0],[0,0]])
Z=np.zeros((2,2))
L=np.block([[L1,Z],[Z,Z]])
B1=np.array([[M2,M3]])
B2=np.array([[M4,M5]])
K=np.block([[B1,B2]])

#V=(C+F)+(Alphar +1j*Alphai)*(A+D)+((Alphar +1j*Alphai)**2)*(H+E) +((Alphar +1j*Alphai)**3)*B +((Alphar +1j*Alphai)**4)*G

# We implement the values of the boundary conditions

V[0]=0
V[ny]=0
V[1]=V[0]
V[ny]=V[ny-1]

Alpha=linalg.eigvals(V)
plt.plot(Alpha.real,Alpha.imag,'.')
plt.xlim(-0.1,0.4)
plt.ylim(-0.2,0.5)

不幸的是它不起作用,因为当我将“linalg.eigvals”应用于 L 和 K 时,我遇到了错误...

ValueError: object arrays are not supported 

有人可以建议我如何在我的情况下使用 Matlab 的“polyeig”替代品吗?

非常感谢您的帮助。

PS:这是用于 Blasius 方程的求解器,以便完全运行代码:

import numpy as np
from scipy.integrate import solve_bvp
import matplotlib.pyplot as plt

    
def blasius(t,u):
    F,dF,ddF = u
    return [dF,ddF,-0.5*(F*ddF)]

def cond(u0,u1): return [u0[0],u0[1],1.0-u1[1]]

x = np.linspace(0,10,100)
u = [x,np.exp(-X),np.exp(-X)]

res = solve_bvp(blasius,cond,x,u)
    
plt.plot(res.x,res.y[0],label="$f(\eta)$")
plt.xlabel("$\eta$")
plt.ylabel("f")
plt.title("Blasius solution")
plt.grID()

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

大佬总结

以上是大佬教程为你收集整理的Python 中的 Polyeig(Orr-Sommerfeld 方程)全部内容,希望文章能够帮你解决Python 中的 Polyeig(Orr-Sommerfeld 方程)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:Python中的