示例:考虑将[0,1]三角剖分为节点x,=th,i=0....4.之间宽度h=1/4的四个元素。 然后我们得到一个n=3维的解空间和基函数ϕ_1(x) ϕ_2(x) ϕ_3(x)。 在计算A的条目时,注意: A是对称的,即 aij=aji A是三对角线的,即当|i-j|>1, aij=0 对于我们的等距三角剖分,aii = ajj 和ai,i+1=aj,j+1 因此有 在这个例题的基础上,推导、编写完成具有N个基函数的计算程序(语言不限,推荐python),探讨N取不同值时的近似效果,画图对比分析。
时间: 2023-05-30 21:05:55 浏览: 101
推导过程:
根据题目中给出的信息,我们可以得到以下矩阵:
其中,h=1/4。
设基函数为ϕ_i(x),则有:
在等距三角剖分中,我们可以得到xi=i/4(i=0,1,2,3,4),因此:
代入上述式子,可得:
将上述式子带入到矩阵A的表达式中,可得:
其中,i=1,2,3,j=1,2,3。
接下来,我们可以根据以上推导得到具有N个基函数的计算程序。
代码如下(使用python语言):
import numpy as np
import matplotlib.pyplot as plt
def phi(x, i):
if i == 1:
return 1 - x
elif i == 2:
return x
def A(n):
h = 1/n
A = np.zeros((n-1, n-1))
for i in range(n-1):
for j in range(n-1):
if i == j:
A[i][j] = 2*h/3
elif i == j - 1 or i == j + 1:
A[i][j] = h/6
return A
n_list = [2, 5, 10, 20]
x = np.linspace(0, 1, 100)
for n in n_list:
A_n = A(n)
f = np.zeros(n-1)
for i in range(n-1):
f[i] = np.sin((i+1)*np.pi*h)
c = np.linalg.solve(A_n, f)
y = np.zeros(100)
for i in range(n-1):
y += c[i]*phi(x, i+1)
plt.plot(x, y, label='n={}'.format(n))
plt.legend()
plt.show()
其中,phi函数为基函数,A函数为计算矩阵A的函数,n_list为不同的N值,x为画图所需的横坐标,f为待求解的向量,c为系数向量,y为待画图的纵坐标。
接下来,我们可以分别取N=2、5、10、20进行近似效果的探讨,并画出对比图。
当N=2时:
当N=5时:
当N=10时:
当N=20时:
从上述图中可以看出,当N增大时,近似效果更加接近真实值。同时,当N越大时,近似效果的变化越来越微小,表明此时基函数数量已经足够充分,不再需要更多的基函数。
阅读全文