贵州师范大学数学与计算机科学学院学生实验报告
课程名称:数值分析 班级: 实验日期:2013年9月27日
学 号: 姓名: 指导教师:
实验成绩:
一、实验名称
实验二: Lagrange插值与曲线拟合的最小二乘法
二、实验目的及要求
1.让学生掌握Lagrange插值与曲线拟合的最小二乘法
2.让学生能够用这些方法解决一些实际问题
三、实验环境
每人一台计算机,要求安装Windows XP操作系统,Microsoft office20##、MATLAB6.5(或7.0).
四、实验内容
题1: 对函数 ,取n+1个等距分布的插值节点,取不同的n ,作n次Lagrange插值,把和插值多项式的图象绘制在同一张图上进行比较.
题2: 给定数据点
分别用一次,二次,和三次多项式曲线,以及最小二乘法拟合这些数据点,哪一种曲线拟合较好?为什么?你能找出更好的拟合曲线吗?
提示:用残差平方的大小来判断拟合的优劣,越小越好.
五、算法描述及实验步骤
针对实验1:
(1)运用Matlab创建M文件
(2)在命令窗口调用文件
针对实验2:
(1)运用Matlab作出上面表中的数据的散点图
(2)分别作出一次二次三次多项式拟合曲线
(3)比较三种曲线拟合的精度即比较残差平方的大小
六、调试过程及实验结果
1. Lagrange插值:
(1)命令窗口输入:
>> f=shuru(-5,5,10) (回车)
f =
Columns 1 through 6
0.0385 0.0588 0.1000 0.2000 0.5000 1.0000
Columns 7 through 11
0.5000 0.2000 0.1000 0.0588 0.0385
(2)所得结果为图形所示:
2. 曲线拟合的最小二乘法
(1)先作出该散点图的一次拟合曲线(程序如下):
>> x=[-3,-1,0,1,3,5];
>> t=-4:0.01:6;
>> y=[-6,-3,-1,0,1,3];
>> subplot(1,3,1)
>> scatter(x,y,'filled','r');
>> hold on
>> p1=polyfit(x,y,1)
p1 =
1.0776 -1.8980
>> y1=polyval(p1,x);
>> y1t=polyval(p1,t);
>> plot(t,y1t,'k')
>> e1=norm(y1-y)
e1 =
1.6087
>> title('一次多项式曲线拟合','fontsize',12,'fontweight','bold','fontangle','italic')
(2)然后作出其二次拟合曲线:
>> subplot(1,3,2)
>> scatter(x,y,'filled','y');
>> hold on
>> p1=polyfit(x,y,2)
p1 =
-0.0844 1.2584 -1.4156
>> y1=polyval(p1,x);
>> y1t=polyval(p1,t);
>> plot(t,y1t,'r')
>> e1=norm(y1-y)
e1 =
0.8405
>> title('二次多项式曲线拟合','fontsize',12,'fontweight','bold','fontangle','italic')
(3)最后做出其三次拟合曲线:
>> subplot(1,3,3)
>> scatter(x,y,'filled','m');
>> hold on
>> p1=polyfit(x,y,2)
p1 =
-0.0844 1.2584 -1.4156
>> y1=polyval(p1,x);
>> y1t=polyval(p1,t);
>> plot(t,y1t,'r')
>> e1=norm(y1-y)
e1 =
0.8405
>> title('三次多项式曲线拟合','fontsize',12,'fontweight','bold','fontangle','italic')
最后的图像为:
(4)比较精确度:
因为 e1 =1.6087 < e2=0.8405 < e3 = 0.8405
所以显然三次多项式拟合曲线的精度更高
七、总结
八、附录
Lagrange.m 文件:
function f=shuru(a,b,n)
h=(b-a)/n;
x=a:h:b;
f=1./(1+x.^2);
cx=a:0.01:b;
y0=1./(1+cx.^2);
plot(cx,y0,'b--')
hold on
cy=Lagrange(x,f,n,cx');
plot(cx,cy,'g--')
legend('f(x)','Pn(x)',2)
function cy=Lagrange(x,y,n,cx)
m=length(cx);cy=zeros(m,1);
for k=1:n+1
t=ones(m,1);
for j=1:n+1
if j~=k
t=t.*(cx-x(j))./(x(k)-x(j));
end
end
cy=cy+y(k).*t;
end
第二篇:实验报告五 --MATLAB的微积分数值计算(二) 121025
基于MATLAB的微积分数值计算(二)
姓名 马梁 学号 902904149 班级_09计算科学
说明:
(1)要求在Notebook环境下完成;
(2)完成后请以姓名(班级学号)实验报告名称命名并存盘;
(3)在下一次上课之前由学习委员收齐打包以附件形式后发到 lvximing@vip.163.com;
(5)请自行保存备份,以备后用。
一.请编程计算以下不定积分
1、
【程序代码】
syms x C;
y=cos(2*x)/(sin(x)+cos(x));
yj=int(y,x)+C
yj =
C + cos(x) + sin(x)
2、
【程序代码】
syms x C;
y=1/((asin(x))^2*sqrt(1-x^2));
yj=int(y,x)+C
yj =
C - 1/asin(x)
3、
【程序代码】
syms x C;
y=exp(x)*cos(x);
yj=int(y,x)+C
yj =
C + (exp(x)*(cos(x) + sin(x)))/2
二.计算下列定积分
1、
【程序代码】
syms x;
y=sin(x)/(1+cos(x)^2);
I=int(y,x,0,x)
I =
pi/4 - atan(cos(x))
2、
【程序代码】
syms x;
y=x*atan(x);
I=int(y,x,0,1)
I =
pi/4 - 1/2
3、
【程序代码】
syms x;
y=x^3*exp(-x);
I=int(y,x,0,inf)
I =
6
4、
【程序代码】
syms x;
y=x/sqrt(x-1);
I=int(y,x,1,2)
I =
8/3
5. 将函数sinx在展成的9次幂级数
syms x a;
y=sin(x)
m6=taylor(y,x,10,a)
y =
sin(x)
Warning: The syntax of TAYLOR has changed. The old syntax is partially supported in this release, but will be removed in a future release. Use name-value pair arguments to specify order and expansion point. See doc taylor for details.
{> In sym.taylor at 99}
m6 =
sin(a) + (cos(a)*(a - x)^3)/6 - (cos(a)*(a - x)^5)/120 + (cos(a)*(a - x)^7)/5040 - (cos(a)*(a - x)^9)/362880 - (sin(a)*(a - x)^2)/2 + (sin(a)*(a - x)^4)/24 - (sin(a)*(a - x)^6)/720 + (sin(a)*(a - x)^8)/40320 - cos(a)*(a - x)
三.
【程序代码】
四.从网络或参考资料上收集并整理1~2个与所学知识相关的MATLAB程序并运行其结果(添加必要的注释)