数值分析实践报告-matlab.doc
- 文档编号:75115
- 上传时间:2022-10-02
- 格式:DOC
- 页数:31
- 大小:440KB
数值分析实践报告-matlab.doc
《数值分析实践报告-matlab.doc》由会员分享,可在线阅读,更多相关《数值分析实践报告-matlab.doc(31页珍藏版)》请在冰豆网上搜索。
拉格朗日插值法
拉格朗日插值法基本原理:
通过平面上不同两点可以确定一条直线,这就是拉格朗日线性插值问题,对于不在同一条直线的三个点得到的插值多项式则为抛物线。
拉格朗日插值的基多项式(即基函数)为:
有了基函数以后就可以直接构造如下多项式:
该多项式就是拉格朗日插值法所求得的插值多项式。
拉格朗日插值法算法:
1、根据所给点的坐标依次写出其差值基函数(用循环可以轻易解决)
2、将差值基函数与其对应的点的函数值相乘得:
3、将2中各项累加即得差值多项式:
拉格朗日插值法程序:
functionlagrange(A)%A为一个只有两行的矩阵,第一行为插值点,第二行为插值点对应的函数值
[m,n]=size(A);
f=1;
p=0;%两个用到的变量
symsx
fori=1:
n
f=(x-A(1,i))*f;
end
forj=1:
n
g(j)=f/(x-A(1,j));%求插值基函数的分母
h(j)=subs(g(j),x,A(1,j));%求插值基函数的分子
s(j)=g(j)/h(j)*A(2,j);%插值基函数
end
fork=1:
n
s(j)=collect(s(j));%合并同类项
end
fori=1:
n
p=p+s(i);
end
fprintf('拉格朗日插值法可得多项式:
')
collect(p)%可用lagrange([1368;46912])调试
例:
有如下表格中有四个插值点及其对应的函数值,用lagrange插值法写出其三次插值多项式:
1
3
6
8
4
6
9
12
解:
在matlab命令窗口输入:
lagrange([1368;46912])
可得运行结果:
拉格朗日插值法可得多项式:
ans=
x^3/70-x^2/7+(97*x)/70+96/35
牛顿插值法
牛顿插值法基本原理:
拉格朗日插值多项式的理论在许多方面都有应用,是很不错的一种方法,但就插值问题而言,如果增加一个插值点,原先计算插值的多项式就没有用了,即拉格朗日插值法的继承性很差,牛顿插值法就很好地解决了这个问题,具有很好的继承性。
函数的差商定义为:
在差商的基础上可得牛顿插值多项式:
牛顿插值法算法:
1、根据差商的定义求出各阶差商。
2、依次写出:
。
3、分别与相应的差商相乘,然后累加即可得:
牛顿插值法程序:
functionnewton(A)%A为两行矩阵,第一行为插值点,第二行为对应插值点的函数值
[m,n]=size(A);
B=zeros(n-1);
k=1;
fori=1:
n-1
forj=i+1:
n
Z(j)=(A(2,j)-A(2,j-1))/(A(1,j)-A(1,j-k));%求i阶差商
B(i,j)=Z(j);%记住各阶差商
end
forj=i+1:
n
A(2,j)=Z(j);
end
k=k+1;
end
f=A(2,1);
g=1;
symsx
fori=1:
n-1
g=g*(x-A(1,i));
f=f+B(i,i+1)*g;%求牛顿插值多项式
end
fprintf('牛顿插值法可得多项式:
')
f
fprintf('牛顿插值法得到的多项式合并同类项后为:
')
collect(f)%newton([1368;46912])
例:
有如下表格中有四个插值点及其对应的函数值,用牛顿插值法写出其三次插值多项式:
1
3
6
8
4
6
9
12
解:
在matlab命令窗口输入:
newton([1368;46912])
可得如下运行结果:
牛顿插值法可得多项式:
f=
3+x+1/70*(x-1)*(x-3)*(x-6)
牛顿插值法得到的多项式合并同类项后为:
ans=
96/35+1/70*x^3-1/7*x^2+97/70*x
通过比较对同一题目的运算可知:
拉格朗日插值法与牛顿插值法所得的插值多项式是一致的!
最小二乘法
最小二乘法基本原理:
最小二乘法是一种数学优化技术,它通过最小化误差的平方和寻找数据的最佳函数匹配。
利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。
最小二乘法还可用于曲线拟合,这无疑就是我们数值分析所研究的最小二乘法很重要的一块的。
设已知某一组观测数据,要求在某特定函数类寻求一个函数作为该组数据的近似函数,使得二者在上的残差,按某种度量标准为最小,这就是拟合问题。
要求残差按某种度量标准为最小,即要求由残差构成的残差向量的某种范数为最小,现实生活中,我们用得最多的当然就是2范数了,即为最小.这种要求误差平方和最小的拟合称为曲线拟合的最小二乘法.就是说,最小二乘法提供了一种数学方法,利用这种方法可以对实验数据实现在最小平方误差意义下的最好拟合。
在曲线拟合中,函数类可有不同的选取方法,我们数值分析中用的最多的自然是最简单与我们最熟悉的多项式。
最小二乘法算法:
1、构造法方程组:
具体做法是针对已知的点的坐标,先求再求为所要拟合的多项式的次数。
2、解法方程组:
根据1中构造的方程组,调用列主元高斯消元法(具体算法见列主元高斯消元法的试验)。
3、根据2中求出的法方程组的解构造拟合多项式:
。
最小二乘法程序:
functionleastsqu(A,n)%A代表离散点的坐标矩阵,第一行为自变量值,第二行为相对应的函数值
%n为要拟合的多项式的次数
[a,b]=size(A);
B=zeros(1,10);
C=zeros(1,10);
P=0;
Q=0;
D=zeros(n+1);
k=1;
g=0;
ifb>n^2
s=b;
else
s=n^2;
end %一系列用到的变量或者矩阵
fori=1:
s
forj=1:
b
P=P+A(1,j)^(i-1);
Q=Q+A(1,j)^(i-1)*A(2,j);
end
B(i)=P;
C(i)=Q;
P=0;
Q=0;
end%for循环嵌套求法方程组的各项系数
fori=1:
n+1
forj=i:
n+i
D(i,k)=B(j);
k=k+1;
end
D(i,n+2)=C(i);
k=1;
end%for循环嵌套求法方程组增广矩阵
f=qiujie(D);
symsx
disp('最小二乘拟合多项式为:
')
fori=1:
n+1
g=g+f(i)*x^(i-1);
end
g
functionf=qiujie(B)
[m,n]=size(B);
fori=2:
m
fork=i:
m
if(abs(B(k,i-1))>abs(B(i-1,i-1)))
temp=B(i-1,:
);
B(i-1,:
)=B(k,:
);
B(k,:
)=temp;%换行选主元
end
l(i,k)=B(k,i-1)/B(i-1,i-1);
forj=1:
n
B(k,j)=B(k,j)-l(i,k)*B(i-1,j);%跌代
end
end
end
y=0;
x(m)=B(m,n)/B(m,n-1);
fori=m-1:
-1:
1
forj=1:
m-i
y=y+x(m-j+1)*B(i,n-j);
end
x(i)=(B(i,n)-y)/B(i,n-m-1+i);%回代计算结果
y=0;
end
f=x;
例:
已知数据表如下,试用二次多项式来拟合。
0
1
2
3
4
5
6
15
14
14
14
14
15
16
解:
在matlab命令窗口输入:
A=[0123456;15141414141516];
n=2;
leastsqu(A,n)
得运行结果:
最小二乘拟合多项式为:
g=
(5*x^2)/28-(25*x)/28+209/14
列主元高斯消元法
列主元高斯消元法基本原理:
列主元高斯消元法,是在高斯消元法的基础上改进的一个线性代数中的算法,用来求解线性方程组。
其原理是:
设有方程组:
首先写出方程组的增广矩阵,然后利用初等行变换来把增广矩阵转换成行阶梯阵。
特别注意的是每步消元时,选出主元所在列绝对值最大的数,并将其换到主元的位置上,然后进行消元计算,这是列主元消元在高斯消元基础上的改进,是保证算法稳定性之所在。
接着将之转换为行阶梯阵,判断解的情况,但为了简便,我们在这就仅考虑方程组中方程个数与变量个数相等的情况,即只有唯一解的方程组的情况。
列主元高斯消元法算法:
1、令。
2、选主元:
选出列中位于对角线及其以下元素绝对值中最大者,并将该最大数所在行与第行互换。
3、消元过程:
对,令用乘以所在的行并加到行。
4、,如果,转2,否则转5。
5、回代过程:
列主元高斯消元法法程序:
functionlzygauss(B)
[m,n]=size(B);
fori=2:
m
fork=i:
m
if(abs(B(k,i-1))>abs(B(i-1,i-1)))
temp=B(i-1,:
);
B(i-1,:
)=B(k,:
);
B(k,:
)=temp;%换行选主元
end
l(i,k)=B(k,i-1)/B(i-1,i-1);
forj=1:
n
B(k,j)=B(k,j)-l(i,k)*B(i-1,j);%跌代
end
end
end
y=0;
x(m)=B(m,n)/B(m,n-1);
fori=m-1:
-1:
1
forj=1:
m-i
y=y+x(m-j+1)*B(i,n-j);
end
x(i)=(B(i,n)-y)/B(i,n-m-1+i);%回代计算结果
y=0;
end
fprintf('该线性方程组的解为:
附注(解按x1,x2……的顺序输出)')
x
例:
用列主元高斯消元法解方程组
解:
在matlab命令窗口中输入:
A=[1-23-20;-112-8;2419];
lzygauss(A)
得到如下结果:
该线性方程组的解为:
附注(解按x1,x2……的顺序输出)
x=
13-5
雅各比迭代法
雅各比迭代法基本原理:
设线性方程组的系数矩阵非奇异,且主对角线元素,令
则原方程可以改写为:
令,则上述方程
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数值 分析 实践 报告 matlab
![提示](https://static.bdocx.com/images/bang_tan.gif)