连续函数的最佳平方逼近

发布时间:2023-05-04 19:30

  • 我们在分析一般的复杂连续函数时,我们或许没办法直接做公式推导与数值计算,那么我们会寻求一个多项式来逼近这个函数,来简化我们的计算。常见的有连续函数的泰勒展开,今天我们来学习做数值计算时经常用到的——连续函数的最佳平方逼近。

定义1.内积与内积空间

  • 在高等代数中我们曾经学习到了向量空间的内积,在这里我们将会定义函数的内积与内积空间。

设U是实线性空间,\"f(x),g(x)\"是定义在区间\"\\left上的连续函数,在U上定义一个二元实值函数

\"< = \\int_{a}^{b}w(x)f(x)g(x)dx\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/0747f682e5174dfb88252d441b98ef52.gif\" width=\"284\" height=\"45\">

其中\"w(x)\"\"\\left上的一个权函数,则称为\"f(x),g(x)\"定义在空间U上的内积,若满足以下性质:

  1. \"<f,g=,\\forall f,g\\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/df8c754c5c0a4e6e822a3b096e0c478c.gif\" width=\"226\" height=\"17\">,即满足可交换性
  2. \"<kf,g=k,\\forall f,g\\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/108694d8f1454d0587f40563b3f63839.gif\" width=\"255\" height=\"17\">,\"\\forall,即满足齐次性
  3. \"<f+g,g=+,\\forall f,g\\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/9d981c7e88a344f28ca2172f8a4d786a.gif\" width=\"345\" height=\"17\">,即满足可加性
  4. \"<f,f\\geq0,\\forall f \\in \\mathbb{R}\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/719e969ec2b64d7b940ee5c4f68a875b.gif\" width=\"158\" height=\"17\">,\"<f,f=0\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/02b861097fbe4f6b91b3a1418af5518b.gif\" width=\"94\" height=\"17\">,当且仅当\"f\\equiv,即满足非负性

则称U为[a.b]上的一个内积空间。

定义2.内积赋范空间

  • 设U是一个内积空间,有定义

\"\\left},\\forall f \\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/4b5b0833f1ec4a4583ed660f8dd5a482.gif\" width=\"201\" height=\"22\">

为U上的一个范数,称U为一个赋范空间,且内积范数满足:

  1. \"\\left +\\left \\| g \\right \\|^{2},\\forall f,g \\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/eef217f598e449d3a172ebf44cad8c3b.gif\" width=\"369\" height=\"22\">
  2. \"\\left \\right |\\leq \\left \\| f\\left \\| \\right \\| g\\right \\|,\\forall f,g\\in U\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/9893942cd29d4db494e2e1794d139c0f.gif\" width=\"245\" height=\"19\">
  3. \"\\left

定义3.最佳平方逼近

  • 在我们学习了内积和内积空间的基础知识之后,我们要利用内积这一工具来开展接下来的工作,一般来讲,我们会选用距离最近来描述一个拟合的效果好坏程度,在内积空间中,我们通常会使用2-范数来描述距离。

对于函数\"f=\"\\mathbb{C}\\left中的一组子集\"\\varphi,若存在\"S^{\\ast使得

\"\\left

                                               \"=\\min_{S_{0}(x)\\in

则称\"S_{0}(x)\"\"f=在子集 \"\\varphi 中的最佳平方逼近函数。

求解

  • 从上边我们可以知道\"S_{0}(x)=a_{0}\\varphi,若为了使得\"\\left最小,则一般地,我们会采用求偏导数为零的点,来计算最值,即\"\\frac{\\partial,通过化简我们可以得到如下的方程:

\"\\sum_{i=1}^{n}a_{j}\\int_{a}^{b}w(x)\\varphi

那么可以得到一个线性方程组:

\"\\begin{bmatrix} & <\\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\">

 以上的方程组称为正规方程组。

若取\"\\varphi,则若要求n次最佳平方逼近多项式

\"S_{0}(x)=a_{0}+a_{1}x+a_{2}x^{2}+...+a_{n}x^{n}\"

此时,

\"<\\varphi_{i}(x) =\\int_{0}^{1}x^{i+j}dx=\\frac{1 }{ i+j+1}\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/3cabcea9c9064e72bb4ea42f92486a09.gif\" width=\"321\" height=\"46\">

\"<f(x),\\varphi_{i}(x)=\\int_{0}^{1}f(x)x^{k}dx\\equiv d_{k}\" class=\"mathcode\" src=\"https://img.it610.com/image/info8/2766407397d245458fd6d31b6e8a307f.gif\" width=\"281\" height=\"46\">

用H表示\"G_{n}=G(1,x,x^{2},...,x^{n})\"对于的矩阵,即

\"H=\\begin{pmatrix}

称H为希尔伯特矩阵,记\"a=(a_{0},a_{1},...,a_{n})^{T},d=(d_{0},d_{1},...,d_{n})^{T},\"

\"Ha=d\"

的解\"a_{i}=a_{i}^{*},(i=0,1,...,n)\"即为所求。

勒让德多项式

  • 当区间为[0,1],权函数\"w(x)\\equiv时,由\"\\left正交化得到的多项式成为勒让德多项式,并用\"P_{i}(x)\"表示,罗德利克给出了勒让德多项式德简单表达式:

\"P_{x}=1,P_{n}(x)=\\frac{1}{2n!}\\frac{\\mathrm{d^{n}}

用python求解

  • 我们要求已知的函数\"y=\"[0,\\pi]\"上的的最佳平方逼近,我们按照本节课所学的知识给出我们
  • 导入必要的库
import numpy as np
import math
import sympy
from scipy import integrate
import matplotlib.pyplot as plt
plt.style.use(\"ggplot\")
  •  定义求解\"d_{k}\"的函数
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
  •  定义求解正规矩阵H函数
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
  • 定义求解系数向量a的函数
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

这里求解的到表达式\"s_{0}(x)=-1.066\\times10^{-14}x^{3}

  • 绘制\"y=sin(x)\"和逼近函数\"s_{0}(x)=-1.066\\times10^{-14}x^{3}的图像
def s_1(x):
    s_x = z[0]
    for i in range(m+1):
        if i

得到如下图像

\"连续函数的最佳平方逼近_第1张图片\"

 这里可以发现,我们所做的逼近函数和\"y=sin(x)\"相当接近。

参考资料:

《数值分析》第5版,清华大学出版社

参考链接:

基函数做最佳平方逼近-python黑洞网

数值分析 - 第二章 - 函数逼近 (1) - 最佳平方逼近 - 知乎

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号