1 / 37
文档名称:

数值分析实践报告 matlab.docx

格式:docx   大小:99KB   页数:37页
下载后只包含 1 个 DOCX 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

数值分析实践报告 matlab.docx

上传人:niupai11 2022/7/28 文件大小:99 KB

下载得到文件列表

数值分析实践报告 matlab.docx

相关文档

文档介绍

文档介绍:数值计算实践
数值实验报告
数理系
夏赞勋
081628
科082
院(系、部:) 姓 名: 学 号: 班 级: 指导教师:
2011年 01月 14日 北京
拉格朗日插值法
拉格朗日插值法基本原理:
通过平面上不同function newton(A)%A 为两行矩阵,第一行为插值点,第二行为对应插值点的函数值
[m,n]=size(A);
B=zeros(n-1);
k=1;
for i=1:n-1
for j=i+1:n
Z(j) = (A(2,j)-A(2,j-l))/(A(l,j)-A(l,j-k));%求 i 阶差商
B(i,j)=Z(j);%记住各阶差商
end
for j=i+1:n
A(2,j)=Z(j);
end
k=k+1;
end
f=A(2,1);
g=1;
syms x
for i=1:n-1
g=g*(x-A(1,i));
f=f+B(i,i+l)*g;%求牛顿插值多项式
end
fprintf('牛顿插值法可得多项式:’)
f
fprintf(' 牛顿插值法得到的多项式合并同类项后为:')
collect(f)% newton([1 3 6 8;4 6 9 12])
例:有如下表格中有四个插值点及其对应的函数值,用牛顿插值法写出其三次插值多项式:
x
1
3
6
8
i
4
6
9
12
解:
在 matlab 命令窗口输入:
newton([1 3 6 8;4 6 9 12])
可得如下运行结果:
牛顿插值法可得多项式:
f =
3+x+1/70*(x-1)*(x-3)*(x-6)
牛顿插值法得到的多项式合并同类项后为:
ans =
96/35+l/70*x'3T/7*x'2+97/70*x
通过比较对同一题目的运算可知:拉格朗日插值法与牛顿插值法所得的插值多项式是一致的!
最小二乘法
最小二乘法基本原理:
最小二乘法是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘 法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合,这无疑就是我们数值分析所研究的最小二乘法很重要的一块的。设已知
某一组观测数据(X ,f (x )),i = 1,2,…,m,要求在某特定函数类0 (x)寻求一个函数9 (X)作为该组数据的近 ii
似函数,使得二者在x上的残差5 =9(x )- f (x ),i = 1,2,…,m,按某种度量标准为最小,这就是拟合问 i i i i
题。要求残差5按某种度量标准为最小,即要求由残差5构成的残差向量5 = [5 ,5,…,5 ]t的某种范数|5|
i i 0 1 m
为最小,现实生活中,我们用得最多的当然就是2范数了,即|5|| =(区52)2 =忆[9(x )-f (x )]2}t为最
2 i i i
i=0 i =0
,最小二乘法提供了一种数学方法, 利用这种方法可以对实验数据实现在最小平方误差意义下的最好拟合。在曲线拟合中,函数类0 可有不同的 选取方法,我们数值分析中用的最多的自然是最简单与我们最熟悉的多项式。
二乘法算法:
1、 构造法方程组:
具体做法是针对已知的点的坐标(x , y ),先求工xn,n = 0,1…h2,再求工x“y ,n = 0,1—h ,h为所要
i i i i i
ii
拟合的多项式的次数。
2、解法方程组:根据1中构造的方程组,调用列主元高斯消元法(具体算法见列主元高斯消元法的试验)。
3、根据2中求出的法方程组的解X构造拟合多项式:^1 X(i)xi。
i=1
二乘法程序:
func tion leas tsqu(A,n)%A代表离散点的坐标矩阵,第一行为自变量值,第二行为相对应的函数值
%n为要拟合的多项式的次数
[a,b]=size(A);
B=zeros(1,10);
C=zeros(1,10);
Q=0;
D=zeros(n+1);
k=1;
g=0;
f b〉n"2
s=b;
else
s=n"2;
end %一系列用到的变量或者矩阵
for i=1:s
for j=1:b
P=P+A(l,j厂(i-1);
Q=Q+A(l,j厂(i-l)*A(2,j);
end
B(i)=P;
C(i)=Q;
P=0;
Q=0;
end%for 循环嵌套求法方程组的各项系数
for i=1:n+1
for j=i:n+i
D(i,k)=B(j);
k=k+1;
end
D(i