文章目录

  • 实验1-误差传播与算法稳定性
    • 问题提出
    • 实验内容
    • 实验要求
    • 程序
    • 运行程序
    • 理论
  • 实验2-多项式插值的震荡和样条插值的收敛
    • 问题提出
    • 实验内容
    • 实验要求
    • 程序
    • 运行程序
  • 总结

实验1-误差传播与算法稳定性

问题提出

考虑一个简单的由积分定义的序列
∫ 0 1 x n e x − 1 d x , n = 1 , 2 , … … \int_{0}^{1}x^ne^{x-1}dx,n=1,2,…… ∫01​xnex−1dx,n=1,2,…… ————式(1)
显然 E n > 0 ( n = 1 , 2 , … … ) E_n>0(n=1,2,……) En​>0(n=1,2,……),当n=1时,利用分部积分得
E 1 = 1 / e E_1=1/e E1​=1/e
而对于n≥2,经分部积分可得
E n = ∫ 0 1 x n e x − 1 d x = x n e x − 1 ∣ 0 1 − ∫ 0 1 n x n − 1 e n − 1 d s , n = 1 , 2 , … … E_n=\int_{0}^{1}x^ne^{x-1}dx=x^ne^{x-1}|_{0}^{1}-\int_{0}^{1}nx^{n-1}e^{n-1}ds,n=1,2,…… En​=∫01​xnex−1dx=xnex−1∣01​−∫01​nxn−1en−1ds,n=1,2,……
也就是
E n = 1 − n E n − 1 , n = 2 , 3 , … … E_n=1-nE_{n-1},n=2,3,…… En​=1−nEn−1​,n=2,3,……————式(2)
而再由式(1),可得
E n = ∫ 0 1 x n e x − 1 d x ≤ ∫ 0 1 x n d x = 1 / ( n + 1 ) E_n=\int_{0}^{1}x^ne^{x-1}dx≤\int_{0}^{1}x^ndx=1/(n+1) En​=∫01​xnex−1dx≤∫01​xndx=1/(n+1) ————式(3)

实验内容

由递推关系式(2)可以得到积分序列 { E n } \{E_n\} {En​}的两种算法。
算法一:式(2)的直接应用,即
E 1 = 1 / e , E n = 1 − n E n − 1 , n = 1 , 2 , … … E_1=1/e,E_n=1-nE_{n-1},n=1,2,…… E1​=1/e,En​=1−nEn−1​,n=1,2,……
算法二:利用式(2)变形得到 E N = 0 E_N=0 EN​=0
E n − 1 = 1 − E n n , n = N − 1 , N − 2 , … … , 3 , 2 E_{n-1}={1-E_n \over n},n=N-1,N-2,……,3,2 En−1​=n1−En​​,n=N−1,N−2,……,3,2

实验要求

从程序观察两种算法的稳定性,再从理论验证。

程序

function f2
%编写算法1和算法2的运行程序,得出序列值和误差
%绘图比较两种算法
Step=str2num(char(inputdlg('输入迭代步数n,要求n大于等于1','步数')));
if Step<1errordlg('输入迭代步数n,要求n大于等于1');return
end
Sd=str2num(char(inputdlg('输入有效数字','有效数字')));
format long;%用库函数integral计算
for n=1:Stepfun=@(x)x.^n.*exp(x-1);func(n)=integral(fun,0,1);
end%算法一
digits(Sd);
func1(1)=vpa(1/exp(1));
for n=2:Stepfunc1(n)=vpa(1-n*func1(n-1));
end
err1=abs(func1-func);%算法二
digits(Sd);
func2(Step)=0;
for n=Step:-1:2func2(n-1)=vpa((1-func2(n)/n));
end
err2=abs(func2-func);clf
subplot(1,2,1)
plot([1:Step],func,'b-');
hold on
plot([1:Step],func1,'g-');
grid on
hold on
plot([1:Step],func2,'r--');
xlabel('n');ylabel('En');
text(2,func1(2),'func1');text(4,func2(4),'func2');text(1,func2(1),'func');subplot(1,2,2)
plot([1:Step],err1,'-');
grid on
hold on
plot([1:Step],err2,'r--');
text(2,err1(2),'err1');text(4,err2(4),'err2');
xlabel('n');ylabel('Err');

运行程序

当迭代步数为10,有效数字为7时

当迭代步数为50,有效数字为7时

可见,迭代次数比较小时,算法一的误差波动比较大。当迭代次数比较大时,算法一的误差会越大。相比下,算法二更为稳定。

理论

  • 设算法一的 E 1 E_1 E1​的误差为 e 1 e_1 e1​,则 E n E_n En​的误差为
    e ( E n ) = e ( 1 − n E n − 1 ) = n e ( E n − 1 ) = … … = n n − 1 e ( E 1 ) = n n − 1 e 1 e(E_n)=e(1-nE_{n-1})=ne(E_{n-1})=……=n^{n-1}e(E_1)=n^{n-1}e_1 e(En​)=e(1−nEn−1​)=ne(En−1​)=……=nn−1e(E1​)=nn−1e1​
  • 设算法一的 E N E_N EN​的误差为 ε N ε _N εN​,由 E N E_N EN​向前递推得到的 E n E_n En​的误差为 ε n ε _n εn​
    ε ( E n − 1 ) = ε ( 1 − E n n ) = ε ( E n ) n = ε ( n ) n , ε (E_{n-1})=ε({1-E_n \over n})={ε(E_n)\over n}={ε(n)\over n}, ε(En−1​)=ε(n1−En​​)=nε(En​)​=nε(n)​,

明显可见,当n越大,算法一的误差越大,而相反算法二的误差越小。

实验2-多项式插值的震荡和样条插值的收敛

问题提出

考虑在一个固定区间上用插值逼近一个函数,显然Lagrange插值中使用的节点越多,插值多项式的次数越高。那么,当插值多项式的次数增加时,插值多项式是否也更加逼近函数呢?下面给出一个例子模拟Runge震荡现象。同时也对比样条插值的收敛情况。

实验内容

设区间[-5,5]上函数
f ( x ) = 1 1 + 25 x 2 f(x)={1\over{1+25x^2}} f(x)=1+25x21​
在区间上做等距划分,分点为
x i = − 1 + 2 i n , i = 0 , 1 , 2 , … … , n x_i=-1+{2i\over n},i=0,1,2,……,n xi​=−1+n2i​,i=0,1,2,……,n
则拉格朗日多项式为
L n ( x ) = ∑ i = o n 1 1 + 25 x i 2 l i ( x ) L_n(x)=\sum_{i=o}^{n}{1\over 1+25x_i^2}l_i(x) Ln​(x)=∑i=on​1+25xi2​1​li​(x)
其中, l i ( x ) , i = 1 , 2 , … … , n l_i(x),i=1,2,……,n li​(x),i=1,2,……,n,是n次Lagrange插值基函数

实验要求

(1)选择不断增大的分点数数目,画出原函数 f ( x ) f(x) f(x),插值多项式函数 L n ( x ) L_n(x) Ln​(x)及3次样条插值函数在[-5,5]上的图像
(2)选择其他函数,例如定义在区间[-5,5]上的函数
h ( x ) = x 1 + x 2 , g ( x ) = a r c t a n x h(x)={x\over 1+x^2},g(x)=arctanx h(x)=1+x2x​,g(x)=arctanx
(3)样条插值最早产生于工业部门,考虑如下问题,某汽车制造商用3次样条插值设计车门的曲线,其中一段的数据如下所示

程序

(1)

function f2
%选择不同的函数和多项式次数,输出原函数、拉格朗日插值函数和三次样条插值函数的图像。n=str2num(char(inputdlg('输入插值多项式的次数N:')));
Nb=char(inputdlg('请选择函数,f(x)、g(x)、h(x)分别对应f、g、h'));
switch Nbcase 'f'func=@(x)1./(1+25*x.^2);case 'h'func=@(x)x./(1+x.^4);case 'g'func=@(x)atan(x);
end      if n<1errordlg('插值多项式的次数输入错误');return;
endx0=linspace(-5,5,n+1);
y0=feval(func,x0);
x=-5:0.1:5;
%拉格朗日插值
Lg=lagrange(x0,y0,x);
%样条插值插值
Sp=interp1(x0,y0,x,'spline');%作图
clf;
subplot(1,2,1);
fplot(func,[-5,5],'r-');
hold on;
plot(x,Lg,'b--');
xlabel('x');ylabel('y');title('拉格朗日插值');
subplot(1,2,2);
fplot(func,[-5,5],'r-');
hold on;
plot(x,Sp,'b--');
xlabel('x');ylabel('y');title('样条插值');function Lg=lagrange(x0,y0,x)
%x0为节点的x坐标
%y0为节点的y坐标
%x为插值点的x坐标if (nargin==3)%当输入参数为3个时,输出对应的插值n=length(x0);m=length(x);for i=1:ml=0;for k=1:ns=1;for j=1:nif k~=js=s*(x(i)-x0(j))/(x0(k)-x0(j));endendl=l+s*y0(k);endLg(i)=l;end
elseif (nargin==2)%当输入参数为2个时,输出插值多项式syms x;n=length(x0);l=0;for k=1:ns=1;for j=1:nif k~=js=s*(x-x0(j))/(x0(k)-x0(j));endendLg=l+s*y0(k);Lg=collect(Lg);Lg = vpa(Lg,6);end
end

(2)

x0=0:10;
y0=[0.8,0.0,0.79,1.53,2.19,2.71,3.03,3.27,2.89,3.06,3.19,3.29,0.2];
x=0:0.1:10;
cs=spline(x0,y0);%当端点斜率已知时,可以用两个额外元素指定值向量 y(一个元素在起点,一个元素在终点)以定义端点斜率。
y=ppval(cs,x);%ppval计算在插值区间中各点上的样条拟合。
plot(x,y)

运行程序

(1)选择函数f(x)



显然可见,当多项式次数越高,拉格朗日插值函数在区间两段发生明显的偏离,而使用三次样条插值函数则会无限逼近原函数。
(2)

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

MATLAB运用——多项式插值相关推荐

  1. MATLAB之多项式插值

    MATLAB之多项式插值 一.算法原理 1.插值问题定义 当精确函数 y = f(x) 非常复杂或未知时,在区间[a,b]上一系列节点x0,x1,x2,......xn处测得函数值f(x0).f(x1 ...

  2. 吉布斯现象与插值优化(上)Matlab实现多项式插值

    前言 傅里叶变换是贯穿一系列课程的应用,从起初的不知其所以然到学习电路理论时的轮廓逐渐清晰. 在电路理论的结课复习阶段,我在图书馆找到国外教材翻阅,关注到行文中提到的吉布斯现象(Gibbs Pheno ...

  3. matlab 平滑曲线连接_平滑轨迹插值方法之多项式插值(附代码)

    前言 今天我们来聊聊轨迹插值,在机器人的运动规划和控制领域,参考轨迹的生成是一个历史悠久的问题,已经发展出了一系列的方法.今天我们就来聊一聊轨迹插值领域中最常见的轨迹插值方法:多项式插值. 说明:本文 ...

  4. matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见"计算基本理论". 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值 ...

  5. 解决龙格现象matlab,matlab实现Lagrange多项式插值观察龙格现象

    Matlab进行Lagrange多项式插值 拉格朗日插值法对函数y=1./(1+25*x.^2)在区间[-1,1]进行5次.10次.15次插值观察龙格现象 主程序 1.拉格朗日 function [c ...

  6. 基于神经网络多项式插值的图像超分辨重构研究-附Matlab代码

    ⭕⭕ 目 录 ⭕⭕ ✳️ 一.引言 ✳️ 二.基于单帧图像的超分辨率重构技术 ✳️ 2.1 最近邻域插值法 ✳️ 2.2 双线性插值法 ✳️ 2.3 双三次插值法(Keys'插值) ✳️ 三.神经网络 ...

  7. matlab对多项式求导,matlab中多项式求导

    1 0.5 0 -0.5 -1 -1.5 -2 -2 -1.5 -1 -0.5 0 0.5 1 1.5 2 4.对比用多项式函数的 polyder 函数及符号函数中的 diff 函数,求导 x2+2x ...

  8. MATLAB数据分析(插值运算和曲线拟合)

    MATLAB数据分析(插值运算和曲线拟合) MATLAB数据分析 在数学研究和工程应用中,我们常常需要对某些环节进行反复的测验或测试,以获取更多的数据支持最优决策,但是由于环境条件的限制,我们往往只能 ...

  9. matlab二元多项式求值,matlab多项式代入求值

    Matlab 多项式运算与方程求根 ? Matlab多项式运算无论是在线性代数中,还是信号处理.自动控制等理论 中,多项式运算都有着十分重要的地位,因此,MATLAB 为多项式的操作提供了相应的函数库 ...

最新文章

  1. 学习Java知识应该注意哪些基础原则
  2. 《c语言从入门到精通》看书笔记——第1章 C语言的概述
  3. mysql取消mvvc机制_MySQL探秘(六):InnoDB一致性非锁定读
  4. Github中国区Star超过1W的大佬和他们的公众号,太强了!
  5. 接口自动化关联解决方案
  6. v380怎么设置云存储_计算机网络云计算技术在应用中的不足及缺陷
  7. 互联网十几年 我们错失了哪些创业机会
  8. js对象与this指向
  9. excel常用函数公式
  10. 努比亚 Z17(Nubia NX563J) 解锁BootLoader 并刷入recovery
  11. activex控件无法安装解决方法
  12. 网页设计配色: 色彩的调和
  13. 【蓝桥杯备赛笔记 02】费解的开关
  14. 迅雷极速版修改边下边播的默认播放器为PotPlayer
  15. 【数据结构】【A鹿】malloc和其他相关预备知识
  16. electron打包时报错could not find: “C:\Users\xxxx\AppData\Local\Temp\t-OLh5E0\0-messages.nsh“
  17. 论文研究范围从什么角度怎么写?
  18. 狄马:荒谬的苦难哲学
  19. Datax-web版安装(含安装包)
  20. 大数据风控是在做什么?

热门文章

  1. java通信:远程画板
  2. 127.0.0.1是什么地址?localhost呢?
  3. 基于xml的数据交换技术
  4. 报错 - 使用marked报错 marked__WEBPACK_IMPORTED_MODULE_4___default(...) is not a function
  5. 微信小程序实现按钮数组单击更改颜色
  6. python-实现保留3位有效数字(四舍六入五成双规则)
  7. 作为程序员的我,常用的工具软件有这些
  8. cmd命令下修复硬盘/U盘
  9. 基于Spring boot的图书馆图书借阅管理系统的设计与实现
  10. day6python基础数据补充