- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值分析第二次上机作业
【实验任务】用MATLAB语言编写连续函数最佳平方逼近的算法程序(函数式M文件)。并用此程序进行数值试验,写出计算实习报告。【功能要求】在后面的附一leastp.m的基础上进行修改,使其更加完善。要求算法程序可以适应不同的具体函数,具有一定的通用性。所编程序具有以下功能:用Lengendre多项式做基,并适合于构造任意次数的最佳平方逼近多项式。
可利用递推关系
2、被逼近函数f(x)不用内联函数构造,而改用M文件建立数学函数。这样,此程序可通过修改建立数学函数的M文件以适用不同的被逼近函数(要学会用函数句柄)。
3、要考虑一般的情况。因此,程序中要有变量代换的功能。
4、计算组合系数时,计算函数的积分采用变步长复化梯形求积法。
5、程序中应包括帮助文本和必要的注释语句。另外,程序中也要有必要的反馈信息。
6、程序输入(1)待求的被逼近函数值的数据点(可以是一个数值或向量)
(2)区间端点:a,b。
7、程序输出:(1)拟合系数:
(2)待求的被逼近函数值
数值试验要求试验函数:;也可自选其它的试验函数。
用所编程序直接进行计算,检测程序的正确性,并理解算法。分别求二次、三次、。。。最佳平方逼近函数。
分别作出逼近函数和被逼近函数的曲线图进行比较。
(分别用绘图函数plot(,s())和fplot(‘xcosx’,[x1 x2,y1,y2]))计算实习报告要求简述方法的基本原理,程序功能,使用说明。
程序中要加注释。
对程序中的主要变量给出说明。
附源程序及计算结果。
附参考程序Lengendre多项式作基的函数最佳平方逼近算法程序LEASTP.m
(此程序只适用于对函数 构造最佳平方逼近多项式)
function [c,s]=leastp(x)
%LEASTP.m:least-square fitting with legendre polynomials
p1=1;
p2=inline(‘x’,’x’);
p3=inline(‘(3*x^2-1)/2’,’x’);
pp1=1;
pp2=inline(‘x.^2’,’x’);
pp3=inline( ‘(3*x.^2-1)/2.*(3*x.^2-1)/2’,’x’);
fp1=inline(‘x.*exp(x)’,’x’);
fp2=inline(‘(x.^2).*exp(x)’,’x’);
fp3=inline(‘(x*exp(x)).*(3*x.^2-1)/2’,’x’);
c(1)=quad(fp1,-1,1)/2;
c(2)=quad(fp2,-1,1)/quad(pp2,-1,1);
c(3)=quad(fp3,-1,1)/quad(pp3,-1,1);
s=c(1)+c(2)*p2(x)+c(3)*p3(x);
%end
二、被逼近函数用M文件建立(例如下面)
function f=fun(x)
f=1./(1+x.^2);
三、变步长复化梯形求积公式的算法
【方法的基本原理】
本实验应用Legendre多项式作基,构造求解Legendre多项式的函数,用变步长的复化梯形求积方法求解系数C,并编写复化梯形求积函数,求解。
使用说明:
【主程序】
也是求解s(x)的主函数如下:
function [c,s]=leastp_ww(x,nn,m,a,b)
% nn=6;
% m=5;
% a=9;
% b=18;
%%%%%%%%初始值;
%求解最佳逼近函数的函数名称为leastp_ww
%x定义的未知数,开始时须声明;例如 syms x
%nn: legendre多项式的x的最高项次数;
%m: 要求各逼近多项式的s(x)的最高项次数;
%a ,b 分别为逼近函数的下界和上界;
syms t p x pp
m=m+1;
nn=nn+1;
s=0;
%x=(b-a)/2*t+(a+b)
p(1)=1;
p(2)=t;
for n=3:nn
p(n)=((2*n-3)*t*p(n-1)-(n-2)*p(n-2))/(n-1);
p(n)=simple(p(n));
end
ff=inline(fun((b-a)/2*t+(a+b)));
fp1=ff;
c(1)=trapezoid(fp1,-1,1,100)/2;
for i=2:m
c(i)=trapezoid(inline(ff(t)*p(i)),-1,1)/trapezoid(inline(p(i)*p(i)),-1,1,100);
end
pp(1)=1;
xx=1/(b-a)*(2.*x-b-a);
for i=2:m
pp(i)=subs(p(i),t,xx);
end
for i=1:m
文档评论(0)