Python 求解耦合二阶常微分方程的_-bvp值误差
我是Python新手,尝试解决BVP问题,基于Python 求解耦合二阶常微分方程的_-bvp值误差,python,scipy,numerical-methods,ode,Python,Scipy,Numerical Methods,Ode,我是Python新手,尝试解决BVP问题,基于scipy.integrate.solve_odepage中的代码。以下是我所做的: mu=0 eta =1 Vz = 1 def dU_dx(U,x): return np.vstack((U[1], (((+Vz-mu)*U[0])/eta -U[1]*(1/x)))) def dV_dx(V,x): return np.vstack((V[1], ((-Vz-mu)*V[0] -V[1]*(1/x)-V[1]*(1/x**2)
scipy.integrate.solve_ode
page中的代码。以下是我所做的:
mu=0
eta =1
Vz = 1
def dU_dx(U,x):
return np.vstack((U[1], (((+Vz-mu)*U[0])/eta -U[1]*(1/x))))
def dV_dx(V,x):
return np.vstack((V[1], ((-Vz-mu)*V[0] -V[1]*(1/x)-V[1]*(1/x**2))/eta))
#Implement evaluation of the boundary condition residuals:
def bc1(ya1,yb1): #for U
return np.array([ya1[0]-1,yb1[0]])
def bc2(ya2,yb2): #for V
return np.array([ya2[0], yb2[0]])
#Define the initial mesh with 5 nodes:
x = np.linspace(0, 1, 5)
#This problem is known to have two solutions. To obtain both of them, we use two different initial guesses for y. We denote them by subscripts a and b.
y_a = np.full((2,x.size), 0.0001) # avoiding divide by zero
y_b = np.full((2,x.size), 0.0001)
y_a[0] = 1
#Now we are ready to run the solver.
from scipy.integrate import solve_bvp
res_a = solve_bvp(dU_dx, bc1, x, y_a, verbose=2)
#res_b = solve_bvp(dV_dx, bc1, x, y_b)
#Plot
x_plot = np.linspace(10**-6, 50, 100)
y_plot_a = res_a.sol(x_plot)[0]
#y_plot_b = res_b.sol(x_plot)[0]
import matplotlib.pyplot as plt
plt.plot(x_plot, y_plot_a, label='y_a')
#plt.plot(x_plot, y_plot_b, label='y_b')
plt.legend()
plt.xlabel("x")
plt.ylabel("y")
plt.show()
这给了我一个错误
ValueError:串联轴的所有输入数组维度必须完全匹配,但沿维度1,索引0处的数组大小为1,索引1处的数组大小为5
据我所知,它们应该匹配,因为我使用了x.size
来构造y\u a
和y\u b
。
谢谢。对不起,我以为我知道出了什么问题,但我错了-我删除了答案,因为答案不是helpful@pygri,好的,谢谢你的尝试:)所以我怀疑dU_dx函数有问题-它应该能够接受x和y_a作为输入,对吗?然而,如果我调用dU_dx(x,y_a),我会得到那个错误-所以你应该尝试修复这个函数,使它可以用这些输入运行。也许你只需要在dU_dx中切换U和x?哦,它工作了!不是我想要的情节,但至少出现了一些东西哈哈。非常感谢你!对不起,我以为我知道哪里出了问题,但我错了——我删除了答案,因为答案不是helpful@pygri,好的,谢谢你的尝试:)所以我怀疑dU_dx函数有问题-它应该能够接受x和y_a作为输入,对吗?然而,如果我调用dU_dx(x,y_a),我会得到那个错误-所以你应该尝试修复这个函数,使它可以用这些输入运行。也许你只需要在dU_dx中切换U和x?哦,它工作了!不是我想要的情节,但至少出现了一些东西哈哈。非常感谢你!我会继续找的。