Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 求解耦合二阶常微分方程的_-bvp值误差_Python_Scipy_Numerical Methods_Ode - Fatal编程技术网

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)

我是Python新手,尝试解决BVP问题,基于
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?哦,它工作了!不是我想要的情节,但至少出现了一些东西哈哈。非常感谢你!我会继续找的。