一、n次拉格朗日插值

根据《插值多项式的性质》中的定理6.1可得

其中(6.19)称为基函数,(6.18)称为拉格朗日多项式,用(6.18)计算插值称为拉格朗日多项式插值。

方法2:通过MATLAB程序计算

>> X = [-2, 0, 1, 2]; Y = [17, 1, 2, 17];
>> p1 = poly(X(1)); p2 = poly(X(2)); p3 = poly(X(3)); p4 = poly(X(4));
>> l01 = conv(conv(p2, p3), p4)/((X(1) - X(2)) * (X(1) - X(3)) * (X(1) - X(4)));
>> l11 = conv(conv(p1, p3), p4)/((X(2) - X(1)) * (X(2) - X(3)) * (X(2) - X(4)));
>> l21 = conv(conv(p1, p2), p4)/((X(3) - X(1)) * (X(3) - X(2)) * (X(3) - X(4)));
>> l31 = conv(conv(p1, p2), p3)/((X(4) - X(1)) * (X(4) - X(2)) * (X(4) - X(3)));
>> l0 = poly2sym(l01), l1 = poly2sym(l11), l2 = poly2sym(l21), l3 = poly2sym(l31)l0 =- x^3/24 + x^2/8 - x/12l1 =x^3/4 - x^2/4 - x + 1l2 =- x^3/3 + (4*x)/3l3 =x^3/8 + x^2/8 - x/4>> P = l01 * Y(1) + l11 * Y(2) + l21 * Y(3) + l31 * Y(4)P =1     4    -4     1>> L = poly2sym(P), x = 0.6; Y = polyval(P, x)L =x^3 + 4*x^2 - 4*x + 1Y =0.2560>> syms M; x = 0.6;
>> R3 = M * abs((x - X(1)) * (x - X(2)) * (x - X(3)) * (x - X(4))) / 24 R3 =(91*M)/2500              >> 

即误差满足

二、拉格朗日多项式和基函数的MATLAB程序

编辑M文件:

%lagran1.m
%求拉格朗日插值多项式和基函数
%输入的量:n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量X,纵坐标向量Y
%输出的量:n次拉格朗日插值多项式L及其系数向量C,基函数l及其系数矩阵L
function [C,L,L1,l] = lagran1(X,Y)
m = length(X); L = ones(m,m);
for k = 1 : mV = 1;for i = 1 : mif k ~= iV = conv(V,poly(X(i))) / (X(k) - X(i));endendL1(k, :) = V; l(k, :) = poly2sym(V);
end
C = Y * L1;
L = Y * l;

>> X = [-2.15 -1.00 0.01 1.02 2.03 3.25];
>> Y = [17.03 7.24 1.05 2.03 17.06 23.05];
>> [C,L,L1,l] = lagran1(X,Y);
>> CC =-0.2169    0.0648    2.1076    3.3960   -4.5745    1.0954>> vpa(L,5)ans =- 0.21686*x^5 + 0.06482*x^4 + 2.1076*x^3 + 3.396*x^2 - 4.5745*x + 1.0954>> L1L1 =-0.0056    0.0299   -0.0323   -0.0292    0.0382   -0.00040.0331   -0.1377   -0.0503    0.6305   -0.4852    0.0048-0.0693    0.2184    0.3961   -1.2116   -0.3166    1.00330.0687   -0.1469   -0.5398    0.6528    0.9673   -0.0097-0.0317    0.0358    0.2530   -0.0426   -0.2257    0.00230.0049    0.0004   -0.0266    0.0001    0.0220   -0.0002>> vpa(l,5)ans =- 0.0056263*x^5 + 0.029875*x^4 - 0.032273*x^3 - 0.029239*x^2 + 0.038157*x - 0.000378620.033098*x^5 - 0.13769*x^4 - 0.050322*x^3 + 0.63051*x^2 - 0.48517*x + 0.0047887- 0.069344*x^5 + 0.21843*x^4 + 0.39608*x^3 - 1.2116*x^2 - 0.31662*x + 1.00330.06865*x^5 - 0.14691*x^4 - 0.53981*x^3 + 0.65279*x^2 + 0.9673*x - 0.0097378- 0.031721*x^5 + 0.035845*x^4 + 0.25295*x^3 - 0.042557*x^2 - 0.22568*x + 0.00226080.0049432*x^5 + 0.00044489*x^4 - 0.026633*x^3 + 0.000092729*x^2 + 0.022008*x - 0.00022006

三、拉格朗日插值及其误差估计的MATLAB程序

编写M文件

%lagrane.m
%拉格朗日插值及其误差估计
%输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量,
%x是以向量形式输入的m个插值点,M在[a,b]上满足|f~(n+1)(x)|≤M
%注:f~(n+1)(x)表示f(x)的n+1阶导数
%输出的量:y为m个插值构成的向量,R是误差限
function [y, R] = lagrange(X, Y, x, M)
n = length(X);m = length(x);
for i = 1:mz = x(i);s = 0.0;for k = 1:np = 1.0; q1 = 1.0; c1 = 1.0;for j = 1:nif j~=kp = p * (z - X(j)) / (X(k) - X(j));endq1 = abs(q1 * (z - X(j)));c1 = c1 * j;ends = p * Y(k) + s;endy(i) = s;R(i) = M * q1 / c1;
end

例:用Lagrange插值来求sinx在某点的值,并估计其误差,已知sin0°  = 0, sin30°  = 0.5, sin45° = 0.7071, sin60° = 0.8660, sin90° = 1.

X                       0                         pi/6                         pi/4                        pi/3                     pi/2

Y                       0                         0.5                        0.7071                  0.8660                   1

解:

>> X = [0 pi/6 pi/4 pi/3 pi/2];
>> Y = [0 0.5 0.7071 0.8660 1];
>> x = linspace(0,pi,50);
>> M = 1;
>> [y, R] = lagrange(X, Y, x, M);
>> y1 = sin(x);
>> errorbar(x,y,R,'.g')
>> hold on
>> plot(X, Y, 'or', x, y, '.k', x, y1, '-b');
>> legend('误差','样本点','拉格朗日插值估算','sin(x)');

拉格朗日(lagrange)插值及其MATLAB程序相关推荐

  1. matlab点坐标 一次插值,[转载]坐标转换和插值之matlab程序

    坐标转换和插值之matlab程序 Matlab版本:8.1.0.604 (R2013a) 这里需要用到的命令有:maps, defaultm, projfwd, projinv Matlab版本:8. ...

  2. 拉格朗日(lagrange)插值(MATLAB实现)

    Author:HanDi 上海某高校遥感专业 工科男 相信积微者速成,相信分享的力量 CSDN@这可真是难为我了 在学习气溶胶光学厚度(AOD)反演算法时,遇到了插值方法选择上的难题.对于AOD反演一 ...

  3. 牛顿(Newton)插值及其MATLAB程序

    拉格朗日插值的优点是格式整齐和规范,有误差估计方式,它的缺点是没有承袭性,当需要增加节点时,必须重新计算插值的基函数li(x).本文给出具有承袭性的牛顿插值法及其MATLAB程序.与牛顿插值有关的差商 ...

  4. 埃尔米特(Hermite)插值及其MATLAB程序

    %hermite.m %求埃尔米特多项式和误差估计的MATLAB主程序 %输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量, %以f'(x ...

  5. hermit插值 matlab,埃尔米特(Hermite)插值及其MATLAB程序

    %hermite.m %求埃尔米特多项式和误差估计的MATLAB主程序 %输入的量:X是n+1个节点(x_i,y_i)(i = 1,2, ... , n+1)横坐标向量,Y是纵坐标向量, %以f'(x ...

  6. 插值拟合matlab程序,Matlab插值和拟合

    数值插值 一维插值 YI=interp1(X,Y,XI,METHOD) X.Y为采样点和样本值,XI为表示要插值的点,METHOD默认是线性插值'linear' METHOD可以取 'nearest' ...

  7. 分段二次插值的matlab程序,怎样用matlab进行抛物插值(二次插值)

    4.1问题的提法 一个多项式的幂级数形式可表示为: p(x)= a0xn + a1xn-1 + - + an-1x + an 在MATLAB中,多项式用行向量表示,其元素为多项式的系数,且从左到右按降 ...

  8. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

  9. 线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)

    Lagrange(拉格朗日)插值法 Lagrange插值法是一种多项式插值方法. 1. 线性插值(两点插值或一次插值) 线性插值就是通过两个采样点 ( x 0 , y 0 ) (x_0,y_0) (x ...

最新文章

  1. 近期上海面试总结(一)
  2. php的正则怎么写,一个正则的写法 php
  3. 中标麒麟7.0安装Unity、Qt等
  4. GreenDao 3.x 注解中ToOne和ToMany的个人理解
  5. 使用git提交到github,每次都要输入用户名和密码的解决方法
  6. [转] linux下.tar .gz .tgz .bz2 .bz等解、压包命令详解
  7. AI:**消灭程序员需要一百年吗?
  8. spring boot configuration annotation processor not found in classpath问题解决
  9. iOS开发--UITableView
  10. oracle exp imp
  11. HH SaaS电商系统的拼团系统设计
  12. php多维求组按照健值排序,PHP编程实现多维数组按照某个键值排序的方法小结【2种方法】...
  13. 晨哥真有料丨你喜欢人家啊,你追求人家。你到了什么地步就该放弃了?
  14. 阶段1 语言基础+高级_1-3-Java语言高级_07-网络编程_第3节 综合案例_文件上传_5_综合案例_文件上传案例优化...
  15. 建立景区商城小程序,构建二次消费生态,增加景区收入
  16. mysql数据的查寻练习
  17. 51单片机学习历程(一)单片机入门
  18. elasticsearch版本介绍
  19. 标题一定要长~~~~长~~~~~~~~~~~~~~长~~~~~~~~
  20. 解决[“usingcomponents“][“van-button“]: “@vant/weapp/button/index“ 未找到:

热门文章

  1. setupUi()引起的麻烦
  2. 机器视觉:药液质量检测
  3. OPC数据访问方法简介
  4. 常用RAID类型以及它们的区别
  5. 写得蛮好的linux学习笔记五-认识SHELL(收藏)
  6. CentOS 如何配置防火墙?
  7. 《Storm技术内幕与大数据实践》一第1章 绪论
  8. Spring MVC 基于Method的映射规则(注解版)
  9. ssh登录到esxi机器中后开关虚拟机
  10. linux学习第一课:liunx概论