2013-2014(1)专业课程实践论文题目:函数的最佳平方逼近
一、算法理论
下面研究在区间[],a b 上一般的最佳平方逼近问题。
对于给定的函数()[,]f x C a b ∈,如果存在
*01(){(),(),,()}n S x Span x x x ϕϕϕ∈
使得
[]22*()()()min ()()()b
b a a a x b x f x S x dx x f x s x dx ρρ≤≤⎡⎤-=-⎣⎦⎰⎰
则称*()s x 是()f x 在集合01{(),(),,()}n Span x x x ϕϕϕ 中的最佳平方逼近函数。
为了求*()s x ,由式可知,该为题等价于求多元函数。
若用H 表示行列式2(1,,,....,)n Gn G x x x =对应的矩阵,则*()s x , H 称为Hilbert 矩阵。
记
01(,,....,)T n a a a a =,01(,,....,)T n d d d d =
其中 (,)(0,1,.....,)k k d f x k n ==
则方程 Ha d =
的解*(0,1,.....)k k a a k n ==即为所求。
二、算法框图
三、算法程序
#include<stdio.h>
#include<math.h>
double function1(double x)
{ double s1;
s1=1/sqrt(4+x*x);//替换函数
return s1;
}
double function2(double x)
{ double s2;
s2=x/sqrt(4+x*x);//替换函数
return s2;
}
double ReiterationOfSimpson(double a,double b,double n,double f(double x))
{ double h,fa,fb,xk,xj;
h=(b-a)/n;
fa=f(a);
fb=f(b);
double s1=0.0;
double s2=0.0;
for(int k=1;k<n;k++)
{ xk=a+k*h;
s1=s1+f(xk);}
for(int j=0;j<n;j++)
{ xj=a+(j+0.5)*h;
s2=s2+f(xj);}
double sn;
sn=h/6*(fa+fb+2*s1+4*s2);
return sn;
}
int main()
{ double a=0.0,b=1.0,Result[2];
int n=5;
Result[0]=ReiterationOfSimpson(a,b,n,function1);
Result[1]=ReiterationOfSimpson(a,b,n,function2);
printf("d0=%f,d1=%f\n\n",Result[0],Result[1]);
double x[2]={Result[0],Result[1]};
double a0,a1;
a0=4*Result[0]-6*Result[1];
a1=12*Result[1]-4*Result[0];
printf("a0=%5.7f,a1=%5.7f\n\n",a0,a1);
}
四、算法实现
例1. 求()f x x =在[1,1]-上的一次最佳平方逼近
解:运行程序,把替换函数分别改成s1=abs(x),s2=x*abs(x), 上机运行截图
例2. 设()1/
0,1上的一次最佳平方逼近多项式。
f x=[]
解:运行程序把替换函数分别改成s1=1/sqrt(4+x*x),s2=x/sqrt(4+x*x)
上机运行截图。