没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
双曲型偏微分方程的数值解法(3)
1
第 4 章 双曲型偏微分方程的数值解法(3)
4.1 二阶双曲型方程的紧差分法
本小节介绍形如下式所示的二阶双曲型方程的紧差分方法:
22
2
22
( , ) ( , )
( , ), 0 1, 0 ,
( ,0) ( ), ( ,0) ( ), 0 1,
(0, ) ( ), (1, ) ( ), 0 ,
u x t u x t
a f x t x t T
tx
u
u x x x x x
t
u t t u t t t T
( 1 )
求解步骤
(1)区域离散
(2)得到离散方程
(3)差商代替偏导数
由 Taylor 公式可得:
3 4 5
3 4 5
)
3 4 5
2 2 3 4
2
3
5
6
1
2
(,
2 3 4 5
6
1
2
,
5
(
4
)
))( , (
2 6 24 12
)
0
( , (
2 6 24 12
)
0
k
k
j
j
jk
xt
jk
xt
u h u h u h u h u
u x t u h O h
x x x x x
u h u h u h u h u
u x t u h O h
x x x x x
( 2 )
将上式相加,有:
2
11
4
2
(,
24
24
))(,
( , 2 ( , ( ,
()
))
12
)
jjkk
j k k j k
x t x t
j
u x t u x t u x t
u h u
Oh
hxx
( 3 )
类似地,有:
11
11
2
1 1 1 1 1
4
2
( , ( ,
2
24
24
))
24
24
11 1 1
4
2
( )), ( ,
( , 2 ( , ( ,
()
12
( , 2 ( , ( ,
()
1
))
)
2
)
))
j
k
jkk
jjk
j k k j k
x t x t
j k k j k
x t t
j
j
x
u x t u x t u x t
u h u
Oh
xx
u x t u x t u x t
u h u
Oh
x h x
h
( 4 )
将上式相加,除以 2:
11
11
22
1 1 1 1 1
22
( , ( ,
11
2
))
2 4 4
)
1 1 1
,
2 4 4
)
4
( , (
( , 2 ( , ( ,
1
,
) ) )
2
) ) )
2
( 2 ( , ( ,
1
(
12 22
)
jj
j
k
kkj
k
j k k j k
x t x t
j k k j k
x t x t
j
j
u x t u x t u x t
uu
xx
u x t u x t u x t
h u u
Oh
xx
h
h
( 5 )
双曲型偏微分方程的数值解法(3)
2
再做进一步推导(其中用到了 u 关于 t 的二阶导数的中心差商),可得以下紧差分格式:
1 1 1 1 1 1
1 1 1 1
2
1 1 1 1
0
1 0 0 0
11
(1 6 ) 6 1 12 10 6 1
2 10 10 , 1 1, 1 1,
(
1
0 ,
2(
1
1
6 10 2
),
)
k k k k k k
j j j j
k k k k k k
j
j j j jj
j
j j j
jj
j
j
u u r u r u r u r u
u u u f f f j m k n
u x j m
u r u r u r u
rr
0
2
0
( , ( / 2, 1 1
)
,
( (
)
, 1 .
2)
),
j
k
k
m
j
k
k
f x t x j m
u t u t k n
( 6 )
其中,
22
2
0
a
r
h
( 7 )
式( 6 )的局部截断误差为:
42
()Oh
( 8 )
无论网比 r 如何选取,式( 6 )都是收敛的。
为便于编写程序,现将式( 6 )改写为矩阵形式:
1
11
1
1
21
1
1
2
1
2
1
1
0 1 2
0 1 2 0 1 2 0
1
6 1 12 10 6 1
1
0 12 1 6 0
1 6 0 12 1 6
1 6 10 12 1 6
0
2
1 6 10 12
10 10 (1 6 )
61
k k k
k k k k k
k
k
k
k
m
k
m
k
rr
u
r r r
u
r r r
u
rr
u
r u r u r u
u u u f f f r u
ru
23
1 2 3 1 2 3
32
1 1 1
3
2
1 1 1
2
1 1 1
1
3 2 1 2 1
21
12 10 6 1
2 10 10
6 1 12 10 6 1
2 10 10
6 1 12 10 6 1
k k k
k k k k k k
k k k
k
m
k k k k k
kk
m m m
m m m m m m
mm
k
r u r u
u u u f f f
r u r u r u
u u u f f f
r u r u r u
2
2
1
1 2 1
2 10 10 (1 6 )
k k k k k k k
mm m m m m m
u u u f f f r u
( 9 )
【例题 1】用紧差分法求解双曲型方程初边值问题。
双曲型偏微分方程的数值解法(3)
3
22
22
( , ) ( , )
2 sin , 0 , 0 1,
( ,0) sin , ( ,0) sin , 0 , 1/ 50,
100
(0, ) 0, ( , ) 0, 0 1,
t
u x t u x t
e x x t
tx
u
u x x x x x h
t
u t u t t
( 10 )
提示;已知其精确解为
( , ) sin
t
u x t e x
。要求给出点
4
, ( 1, ,9)
10 5
i
i
处的数值解及误差。
按照式( 6 )编写 python 代码如下:
import numpy as np
e = np.e
pi = np.pi
tau = 1 / 50
h = pi / 100
space_low = 0
space_up = pi
time_low = 0
time_up = 1
a_square = 1
r = a_square * tau**2 / h**2
def numerical_digit(number):
i = 0
while 1:
if abs(np.round(number, i) - number) < 10**(-12):
num = i
break
else:
i += 1
双曲型偏微分方程的数值解法(3)
4
return num
def some_var():
x = np.array([
space_low + h * i for i in range(500)
if space_low + h * i < 1.0000001 * space_up
])
t = np.array([
time_low + tau * i for i in range(1000)
if time_low + tau * i < 1.0001 * time_up
])
num_h = numerical_digit(h)
num_tau = numerical_digit(tau)
return np.round(x, num_h), np.round(t, num_tau), num_tau
def u_x0(x):
return np.sin(x)
def u_0t(t):
return 0
def u_pit(t):
return 0
双曲型偏微分方程的数值解法(3)
5
def u_x1(x):
return 0.5 * (r * u_x0(x - h) + 2 * (1 - r) * u_x0(x) + r * u_x0(x + h) +
tau**2 * f_ik(x, 0) + 2 * tau * np.sin(x))
def f_ik(x, t):
return 2 * (e**t) * np.sin(x)
def abcf_computing(x, t, u_k, u_km1):
b = [10 + 12 * r] * (len(x) - 2)
a = [1 - 6 * r] * (len(x) - 3)
c = a.copy()
f = [(6 * r - 1) * u_km1[0] - (12 * r + 10) * u_km1[1] +
(6 * r - 1) * u_km1[2] + 2 * (u_k[0] + 10 * u_k[1] + u_k[2]) +
tau**2 * (f_ik(x[0], t) + 10 * f_ik(x[1], t) + f_ik(x[2], t)) -
(1 - 6 * r) * u_0t(t + tau)]
for j in range(2, len(x) - 2):
f.append((6 * r - 1) * u_km1[j - 1] - (12 * r + 10) * u_km1[j] +
(6 * r - 1) * u_km1[j + 1] + 2 *
(u_k[j - 1] + 10 * u_k[j] + u_k[j + 1]) + tau**2 *
(f_ik(x[j - 1], t) + 10 * f_ik(x[j], t) + f_ik(x[j + 1], t)))
f.append((6 * r - 1) * u_km1[-3] - (12 * r + 10) * u_km1[-2] +
(6 * r - 1) * u_km1[-1] + 2 * (u_k[-3] + 10 * u_k[-2] + u_k[-1]) +
tau**2 * (f_ik(x[-3], t) + 10 * f_ik(x[-2], t) + f_ik(x[-1], t)) -
(1 - 6 * r) * u_pit(t + tau))
return a, b, c, f
def chase_method(x, t, u_k, u_km1):
剩余27页未读,继续阅读
syphomn
- 粉丝: 111
- 资源: 36
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页