Matlab做函数的最佳平方逼近

您所在的位置:网站首页 matlab求内积设置权函数 Matlab做函数的最佳平方逼近

Matlab做函数的最佳平方逼近

2024-01-31 02:16| 来源: 网络整理| 查看: 265

原题是

 分析:f(x)=exp(x),权函数没说默认为1,基也给考虑用1,x^2,x^3,x^4……来进行拟合。区间范围有三个。得的逼近函数为S(x)。

且S(x)=:a_{0}\times 1+a_{1}\times x+a_{2}\times x^{2}+a_{3}\times x^{3} +a_{4}\times x^{4}

 因此问题就转化到了对多项式系数a的求解上。

介绍正则表达式:G*a=d

其中G:

 G中的参数\varphi _{0}=1 \varphi _{1}=x \varphi _{2}=x^{2} \varphi _{3}=x^{3} \varphi _{4}=x^{4},是从基空间中选取的

 (\varphi _{i}\varphi _{j}))表示的是\varphi _{i}\varphi _{j}的内积。

计算方法为\varphi _{i}\varphi _{j}的乘积再乘上权函数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!



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3