【发布时间】:2014-11-15 16:10:47
【问题描述】:
我必须求解 Euler Bernoulli 微分梁方程:
u’’’’(x) = f(x) ;
(x为光束轴点坐标)
和边界条件:
u(0)=0, u’(0)=0, u’’(1)=0, u’’’(1)=a
我研究了数值有限差分理论,它将一系列推导表示为:
U’k = (1/2*h)(Uk+1 - Uk-1)
U’’k = (1/h2)(Uk+1 - 2 Uk + Uk-1)
U’’’k = (1/2h3)(Uk+2 - 2 Uk+1 + 2 Uk-1 + Uk-2)
U’’’’k = (1/h4)(Uk+2 - 4 Uk+1 + 6 Uk - 4 Uk-1 + Uk-2)
(k+1、k+2等都是下标)
我找到了一个表达如下的脚本:
import numpy as np
from scipy.linalg import solveh_banded
import matplotlib.pyplot as plt
def beam4(n,ffun,a):
x = np.linspace(0,1,n+1)
h = 1.0/n
stencil = np.array((1,-4,6))
B = np.outer(stencil,np.ones(n))
B[1,-1] = -2; B[2,0] = 7; B[2,-1] = 1; B[2,-2] = 5
f = ffun(x)
f *= h** 4; f[-1] *= 0.5; f[-1] -= a*h**3
u = np.zeros(n+1)
u[1:] = solveh_banded(B,f[1:],lower=False)
return x,u
但我不明白为什么要这样构建系数矩阵:
stencil = np.array((1,-4,6))
B = np.outer(stencil,np.ones(n))
B[1,-1] = -2; B[2,0] = 7; B[2,-1] = 1; B[2,-2] = 5
f = ffun(x)
f *= h**4; f[-1] *= 0.5; f[-1] -= a*h**3 "
提前致谢!!!!
【问题讨论】:
-
您可以缩进您的代码以便阅读吗?
-
你知道如何用手解这个方程吗?如果没有,我建议先这样做,然后再尝试用 numpy 解决它。
-
sympy会更适合吗? sympy.org/en/index.html -
sympy 为微分方程解提供了很多答案,但我找不到如何解决非初始边界条件...例如在 x'''(1)
标签: python numpy differential-equations