数值分析—实验报告1

数值分析实验报告
专业  信息与计算科学  班级  15级1班  组别  指导教师  汪玉霞   
姓名      史博强      同组人           
实验时间  2017    10    20  日        实验地点 k7—403       
实验名称                插值函数与数据拟合                           
实验目的:
(1)由函数个节点处函数值得出次Lagrange插值函数;
(2)由函数个节点处函数值得出次Newton插值函数;
(3)由函数的个节点处函数值得出Hermite插值函数或分段三次Hermite函数;
(4)由未知函数的离散数据得出最小二乘拟合函数。
实验仪器:
1、支持Intel Pentium Ⅲ及其以上CPU,内存256MB以上、硬盘1GB以上容量的微机; 软件配有Windows98/2000/XP操作系统及MATLAB软件等。
2、了解MATLAB等软件的特点及系统组成,在电脑上操作MATLAB等软件。
实验内容、步骤及程序:
一、Lagrange插值函数
程序:
function yi=lg201541110131(x,y,xin)
n=length(x);
p=zeros(1,n);
for k=1:n
    t=ones(1,n);
    for j=1:n
        if j~=k
            t(j)=(xin-x(j))/(x(k)-x(j));
        end
    end
    p(k)=prod(t);
end
yi=sum(y.*p);
题目:设f(x)=lnx并已知f(x)的数据如下表:
x
0.40
0.50
0.70
f(x)
-0.916291
-0.693147
-0.356675
试用Lagrange插值多项式来计算ln(0.6)的近似值并估计误差
运行结果:
format long
x=[0.40 0.50 0.70];y=[-0.916291 -0.693147 -0.356675];xin=0.6;yi=lg201541110131(x,y,xin)
代谢yi =
  -0.50660833333333
jqz=log(0.6)
jqz =
  -0.51082562376599
wc=yi-jqz
wc =
  0.00421729043266
x=[0.70 0.80 0.90];y=log(x);xin=0.6;yi=lg201541110131(x,y,xin)钚239
yi =
  -0.50595469353139
wc=yi-jqz
wc =  0.00487093023460
数据分析:
                                表:ln(0.6)
内插
外插
x
0.4
0.5
0.7
0.7
0.8
0.9
f(x)
-0.916291
-0.693147
-0.356675
-0.356675
-0.223144
-0.105361
yi
-0.50660833333333
-0.50595469353139
jqz
-0.51082562376599
-0.51082562376599
wc
0.00421729043266
0.0048709302346
小结:
根据以上的数据分析得内插的误差较小,要使x的结果更接近真实值,则要选择内插进行插值,并且插值区间[a,b]越小更接近真实值。运用插值法时要注意几个问题:(1)如果f(x)本身是次数不超过n的多项式,那么满足n+1个插值条件多项式就是它自身;(2)如果插值区间[a,b]很大,那么对给定的x,|wn+1(x)|的值一般会很大,因此,误差可能很大;(3)插值多项式一般仅用来估计插值区间内点的函数值。
二、Newton插值函数
程序:
function [ndcz,Y]=nd201541110131(x,y,xin)
n=length(x);Y=zeros(n);Y(:,1)=y';
for k=1:n-1
    for i=1:n-k
        Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));
    end
end
ndcz=0;
for i=1:n
    z=1;
    for k=1:i-1
        z=z*(xin-x(k));
    end
    ndcz=ndcz+Y(1,i)*z;
End
题目:设f(x)=lnx并已知f(x)的数据如下表:
x
0.40
0.50
0.70
f(x)
-0.916291
-0.693147
-0.356675
试用Newton插值多项式来计算ln(0.6)的近似值并估计误差。
运行结果:
x=[0.40 0.50 0.70];y=[-0.916291 -0.693147 -0.356675];xin=0.6;[ndcz,Y]=nd201541110131(x,y,xin)
ndcz =
  -0.50660833333333
Y =
  -0.91629100000000  2.23144000000000  -1.83026666666667
  -0.69314700000000  1.68236000000000                  0
  -0.35667500000000                  0                  0
大头蚁属
jsz=log(0.6)
jsz =
  -0.51082562376599
wc=ndcz-jsz
wc =
0.00421729043266
数据分析:
一阶均差
二阶均差
三阶均差
-0.916291000000000
2.231440000000001
-1.830266666666669
-0.693147000000000
1.682360000000000
0
-0.356675000000000
0
0
                            表:ln(0.6)
0.4
0.5
0.7
f(x)
-0.916291
-0.693147
-0.356675
yi
-0.50660833333333
jqz
-0.51082562376599
wc
0.00421729043266e-003
小结:
根据以上的数据分析得Newton插值和Lagrange插值对于计算函数的值是相同的,误差也是相同的,这就说明Newton插值和Lagrange插值在一定程度上近似值相同。
Newton插值多项式便于逐步增加节点,并且计算过程中能估计误差,带导数的插值多项式适合于已知导数情形,当n较大时,这些方法都有数值不稳定的缺陷。
三、Hermite插值函数
程序:
function f=Hermite201541110131(x,y,dy,xin)
syms s;f=0.0;n=length(x);
for i=1:n
    la=1;lp=0.0;
    for j=1:n
        if j~=i
            la=la*(s-x(j))/(x(i)-x(j));
            lp=lp+1/(x(i)-x(j));
        end
    end
  temp1=1-2*(s-x(i))*lp; %lp即为拉格朗基函数在当前节点xi处的倒数值
  temp2=y(i)*temp1*la^2;
  temp3=dy(i)*(s-x(i))*la^2;
  f=f+temp2+temp3;
end
f=simplify(f);            %合并同类项化简
if nargin==3
    f=subs(f,s,'x');f=vpa(f,4);
end
if nargin==4
    f=subs(f,s,xin);
end
题目:
已知函数y=lnx的数据如下表:
电影天地x
0.5
0.6
0.7
y
-0.693147
-0.510826
-0.356675
dy
2
1.666667
1.428571
试用Hermite插值多项式来计算ln(0.64)的近似值并估计误差。
运行结果:
x=[0.5 0.6 0.7];y=[-0.693147 -0.510826 -0.356675];dy=[2 1.666667 1.428571];xin=0.64;
f=Hermite201541110131(x,y,dy,xin)
f =  -0.44628695753600
jqz=log(0.64)
jqz =  -0.44628710262842
wc=f-jqz
wc =
1.450924181356506e-007
数据分析:
                          表:ln(0.64)
0.5
0.6
0.7
y
-0.693147
-0.510826
-0.356675
dy
2
1.666667
1.428571
yi
-0.44628695753600
jqz
-0.44628710262842
wc
1.450924181356506e-007
82se
小结:
根据以上的数据分析得Hermite插值函数误差比Newton插值函数和Lagrange插值
函数都要小,误差在十万分之一以上。当同时知道函数和导数值时,可以采用分段3次Hermite插值,3次样条插值函数不仅在内节点处二阶导数是连续的,而且具有很好的逼近性和收敛性。
四、最小二乘拟合函数
程序:
function S=nihe201541110131(x,y,n,w)
global i;global j;xsjz=zeros(n+1);
for i=0:n
    for j=0:n;
        xsjz(i+1,j+1)=sum(w.*jhs(x,i).*jhs(x,j));
    end
end
csx=zeros(n+1,1);
for i=0:n
    csx(i+1)=sum((w.*jhs(x,i)).*y);
end
S=xsjz\csx;
function jihanshu=jhs(x,k)
        jihanshu=x.^k;
题目:
用多项式拰合表中的离散数据,做最小二乘拟合函数拰合。
x
0.00
0.25
0.50
0.75
1.00
f(x)
0.10
0.35
0.81
1.09
1.96
运行结果:
x=[0.00 0.25 0.50 0.75 1.00];y=[0.10 0.35 0.81 1.09 1.96];n=2;w=1;S=nihe201541110131(x,y,n,w)
S =
  0.12142857142857 0.57257142857143 1.21142857142857
plot(x,y,'*')
hold on
xni=0:0.1:1;yni=S(1)+S(2)*xni+S(3)*xni.^2;plot(xni,yni,'g-')
hold on
x
化学战争 x=[0.00 0.25 0.50 0.75 1.00];y=[0.10 0.35 0.81 1.09 1.96];n=3;w=1;S=nihe201541110131(x,y,n,w)
S =
.0834********
-1.82857142857162  2.02666666666679
plot(x,y,'*')
hold on
xni=0:0.1:1;yni=S(1)+S(2)*xni+S(3)*xni.^2+S(4)*xni.^3;plot(xni,yni,'r-')
hold on
x
数据分析:
n=3时,f(x)图像
n=2时,fx)图像
小结:
根据以上的数据分析得当n=3时拟合度较高,最小二乘法在应用科学中有重要的应用,最佳平方逼近和曲线拟合分别要求误差平方的积分和误差平方之和最小。但在许多实际问题中,变量之间的关系不一定能用多项式很好的拟合。
教师评语:
1.实验结果及解释:( 准确合理、 较准确、 不合理 );
2.实验步骤的完整度:( 完整、 中等、 不完整 );
3.实验程序的正确性:( 很好、 较好、 中等、 较差、 很差 );
4.卷面整洁度:( 很好、  较好、  中等、  较差、  很差 );
评定等级:(    )      教师签名:                  日期:           

本文发布于:2024-09-20 17:26:26,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/633825.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:插值   函数   实验   软件   误差   节点   数值
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议