原题是
分析:f(x)=exp(x),权函数没说默认为1,基也给考虑用1,x^2,x^3,x^4……来进行拟合。区间范围有三个。得的逼近函数为S(x)。
且S(x)=:
因此问题就转化到了对多项式系数a的求解上。
介绍正则表达式:G*a=d
其中G:
G中的参数,是从基空间中选取的
(,))表示的是,的内积。
计算方法为,的乘积再乘上权函数w(x)(这里为1)作为被积函数,以x为积分变量,在区间(a,b)上的积分值
关于d
关于a:
其实就是方程组:
我们需要做的就是把G矩阵的逆求出来,然后d左乘上G的逆矩阵就得到系数矩阵a。(这些在matlab上都是比较好实现的)
对于在matlab的实现部分,先介绍2个需要用到的函数:
int(f,x,m,n)函数
可以帮助我们实现积分的计算,有四个参数,f是指被积函数,x是指积分变量,m、n分别代表了积分区间的下限和上限。例如 int(1,s,0,1)即为在0到1上对1积分的值
>> int(1,x,0,1)
ans =
1
Taylor函数:
帮助我们快速的求f(x)的泰勒展开式;taylor函数的使用格式不唯一,下面介绍一种用于实验。
>> syms x
>> f= exp(x);
>> taylor(f,x,'order',5)
ans =
x^4/24 + x^3/6 + x^2/2 + x + 1
上面的意思为求f(x)以x为变量的泰勒展开式的前五项(4阶)。
下面实现部分:
首先定义几个符号变量,以及上下限。
syms x m n
m=[-0.1,-1,-5];
n=[0.1,1,5];
然后确定原函数,积分变量,基,以及创建正则表达式Ga=d中的G,d矩阵,这里是4次所以加上常数项是G是(5,5)的格式,d是(5,1)的格式。
f = exp(x);
var =x;%积分变量
% 定义基空间
room =[1,x,x^2,x^3,x^4]; %基
% 定义一个5*5的矩阵,用来存放正则表达式Ga=d中G的元素。
G =magic(5);
% 定义一个5*1的矩阵D用来存放正则表达式Ga=d中d的元素。
D=[1;2;3;4;5];
然后分别求G和d
G:
for i=1:5
for j=1:5
G(i,j)=(int(room(i)*room(j),var,m,n));
end
end
for i=1:5
D(i,1)=int(f*room(i),var,m,n);
end
将G的逆与d相乘就得到了系数矩阵
a = inv(G)*D;
源码如下:
主函数:
syms x m n
m=[-0.1,-1,-5];
n=[0.1,1,5];
for i = 1:3
get_xishu(exp(x),x,m(1,i),n(1,i))
end
get—xishu函数:
function get_xishu(~,~,m,n)
syms x
f = exp(x);
var =x;%积分变量
% 定义基空间
room =[1,x,x^2,x^3,x^4]; %基
disp('关于f的4阶展开式(麦克劳林)')
Tay = taylor(f,x,'order',5)
% 定义一个5*5的矩阵,用来存放正则表达式Ga=d中G的元素。
G =magic(5);
% 定义一个5*1的矩阵D用来存放正则表达式Ga=d中d的元素。
D=[1;2;3;4;5];
% 获取G
for i=1:5
for j=1:5
G(i,j)=(int(room(i)*room(j),var,m,n));
end
end
% 获取D:
for i=1:5
D(i,1)=int(f*room(i),var,m,n);
end
% 最佳逼近的系数为:a
a = inv(G)*D;
disp('最佳逼近的系数为:')
disp(a)
disp('函数f的四次最佳逼近多项式:')
s = a(1,1)+a(2,1)*x+a(3,1)*x.^2+a(4,1)*x.^3+a(5,1)*x.^4
% 在 积分区间中分100个点用于取值和描图
x = m : (n-m)/100 :n;
% 计算每一个点在泰勒展开式下的取值
T=eval(Tay);
y =exp(x);
%计算每个点在四次最佳逼近多项中的取值
s = a(1,1)+a(2,1)*x+a(3,1)*x.^2+a(4,1)*x.^3+a(5,1)*x.^4;
figure()
plot(x,s,'r',x,y,'g',x,T,'black')
xlabel('x'),ylabel('y');
legend('最佳四次逼近','原函数','泰勒展开式');
title('xxxx');
end
运行结果:
当区间为[-0.1,0.1]时:
最佳逼近的系数为:
1.0000
1.0000
0.5000
0.1668
0.0417
函数f的四次最佳逼近多项式:
s =
(716153323*x^4)/17179869184 + (1466830141885*x^3)/8796093022208 + (549755744457*x^2)/1099511627776 + (17592182552845*x)/17592186044416 + 1125899906876483/1125899906842624
当区间为[-1,1]时:
关于f的4阶展开式(麦克劳林)
Tay =
x^4/24 + x^3/6 + x^2/2 + x + 1
最佳逼近的系数为:
1.0000
0.9980
0.4994
0.1761
0.0436
函数f的四次最佳逼近多项式:
s =
(766974199037*x^4)/17592186044416 + (99157489229861*x^3)/562949953421312 + (35138793930433*x^2)/70368744177664 + (561798649278449*x)/562949953421312 + 1125934743734913/1125899906842624
当区间为[-5,5]时:
关于f的4阶展开式(麦克劳林)
Tay =
x^4/24 + x^3/6 + x^2/2 + x + 1
最佳逼近的系数为:
1.9481
-1.6065
-0.2444
0.5821
0.1194
函数f的四次最佳逼近多项式:
s =
(134470535058449*x^4)/1125899906842624 + (655335705129991*x^3)/1125899906842624 - (17198029307343*x^2)/70368744177664 - (226095998786783*x)/140737488355328 + 68541602106177/35184372088832
done!