发布时间:2023-05-04 19:30
设U是实线性空间,是定义在区间上的连续函数,在U上定义一个二元实值函数
其中为上的一个权函数,则称为定义在空间U上的内积,若满足以下性质:
则称U为[a.b]上的一个内积空间。
},\\forall f \\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/4b5b0833f1ec4a4583ed660f8dd5a482.gif\" width=\"201\" height=\"22\">
为U上的一个范数,称U为一个赋范空间,且内积范数满足:
对于函数且中的一组子集,若存在使得
则称是在子集 中的最佳平方逼近函数。
那么可以得到一个线性方程组:
& <\\varphi _{0}(x), \\varphi _{1}(x)> & ... & <\\varphi _{0}(x), \\varphi _{n}(x)>\\\\ <\\varphi _{1}(x), \\varphi _{0}(x)>& <\\varphi _{1}(x), \\varphi _{1}(x)> & ... & <\\varphi _{1}(x), \\varphi _{n}(x)> \\\\ \\vdots & \\vdots & &\\vdots \\\\ <\\varphi _{n}(x), \\varphi _{0}(x)>& <\\varphi _{n}(x), \\varphi _{1}(x)> & ... & <\\varphi _{n}(x), \\varphi _{n}(x)> \\end{bmatrix}\\begin{pmatrix} a_{0}\\\\ a_{1}\\\\ \\vdots \\\\ a_{n} \\end{pmatrix}=\\begin{pmatrix} < f(x),\\varphi _{0}(x)> \\\\ < f(x),\\varphi _{1}(x)> \\\\ \\vdots \\\\ < f(x),\\varphi _{n}(x)> \\end{pmatrix}\" class=\"mathcode\" src=\"https://latex.codecogs.com/gif.latex?%5Cbegin%7Bbmatrix%7D%20%3C%5Cvarphi%20_%7B0%7D%28x%29%2C%20%5Cvarphi%20_%7B0%7D%28x%29%3E%20%26%20%3C%5Cvarphi%20_%7B0%7D%28x%29%2C%20%5Cvarphi%20_%7B1%7D%28x%29%3E%20%26%20...%20%26%20%3C%5Cvarphi%20_%7B0%7D%28x%29%2C%20%5Cvarphi%20_%7Bn%7D%28x%29%3E%5C%5C%20%3C%5Cvarphi%20_%7B1%7D%28x%29%2C%20%5Cvarphi%20_%7B0%7D%28x%29%3E%26%20%3C%5Cvarphi%20_%7B1%7D%28x%29%2C%20%5Cvarphi%20_%7B1%7D%28x%29%3E%20%26%20...%20%26%20%3C%5Cvarphi%20_%7B1%7D%28x%29%2C%20%5Cvarphi%20_%7Bn%7D%28x%29%3E%20%5C%5C%20%5Cvdots%20%26%20%5Cvdots%20%26%20%26%5Cvdots%20%5C%5C%20%3C%5Cvarphi%20_%7Bn%7D%28x%29%2C%20%5Cvarphi%20_%7B0%7D%28x%29%3E%26%20%3C%5Cvarphi%20_%7Bn%7D%28x%29%2C%20%5Cvarphi%20_%7B1%7D%28x%29%3E%20%26%20...%20%26%20%3C%5Cvarphi%20_%7Bn%7D%28x%29%2C%20%5Cvarphi%20_%7Bn%7D%28x%29%3E%20%5Cend%7Bbmatrix%7D%5Cbegin%7Bpmatrix%7D%20a_%7B0%7D%5C%5C%20a_%7B1%7D%5C%5C%20%5Cvdots%20%5C%5C%20a_%7Bn%7D%20%5Cend%7Bpmatrix%7D%3D%5Cbegin%7Bpmatrix%7D%20%3C%20f%28x%29%2C%5Cvarphi%20_%7B0%7D%28x%29%3E%20%5C%5C%20%3C%20f%28x%29%2C%5Cvarphi%20_%7B1%7D%28x%29%3E%20%5C%5C%20%5Cvdots%20%5C%5C%20%3C%20f%28x%29%2C%5Cvarphi%20_%7Bn%7D%28x%29%3E%20%5Cend%7Bpmatrix%7D\">
以上的方程组称为正规方程组。
若取,则若要求n次最佳平方逼近多项式
此时,
用H表示对于的矩阵,即
称H为希尔伯特矩阵,记则
的解即为所求。
import numpy as np
import math
import sympy
from scipy import integrate
import matplotlib.pyplot as plt
plt.style.use(\"ggplot\")
def function_d(a,b,n):#求d_k,k=0,1,...,n
x = sympy.symbols(\'x\')
f = sympy.sin(x)
G = [sympy.Symbol(\'t\') for c in range(n)]
v = np.zeros(n)
for i in range(n):
G[i]=f*pow(x,i)
v[i]=sympy.integrate(G[i],(x,a,b))
return v
def function_H(a,b,n):#求解正规矩阵H
y = np.zeros((n,n))
for i in range(n):
for j in range(n):
y[i,j]=1
y[i][j]=integrate.quad(lambda x:pow(x,i+j), a, b)[0]
return y
def function_a(a,b,n):
q = np.zeros((n,n))
g = np.zeros((n, n))
q=function_H(a,b,n)#求解正规方程组H
g=np.linalg.inv(q)
s=v=np.zeros(n)
s=function_d(a,b,n)#求d_k
v=np.dot(g,s)#a=H^-1*d
return v
m=int(input(\"请输入次数:\"))
z=function_a(0,math.pi,m+1)#求a:下限,b:下限,n:n-1次多项式
x = sympy.symbols(\'x\')
s_0 = z[0]
for i in range(m+1):
if i
这里求解的到表达式
def s_1(x):
s_x = z[0]
for i in range(m+1):
if i
得到如下图像
这里可以发现,我们所做的逼近函数和相当接近。
参考资料:
《数值分析》第5版,清华大学出版社
参考链接:
基函数做最佳平方逼近-python黑洞网
数值分析 - 第二章 - 函数逼近 (1) - 最佳平方逼近 - 知乎