拉格朗日插值和牛顿插值 matlab

news/2024/11/9 19:27:12

 

 

 

1. 已知函数在下列各点的值为

 

0.2

0.4

0.6

0.8

1.0

 

0.98

0.92

0.81

0.64

0.38

 

用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式在点的值。

 

程序:

x=[0.2 0.4 0.6 0.8 1.0];

y=[0.98 0.92 0.81 0.64 0.38];

x0=[0.2 0.28 0.44 0.76 1 1.08];

[f,f0]=Lagrange(x,y,x0)

 

function [f,f0] = Lagrange(x,y,x0) 

%求已知数据点的Lagrange插值多项式f,并计算插值多项式f在数据点x0的函数值f0  

syms t;

n = length(x);                                   

f = 0.0;

for i = 1:n

    l = y(i);

    for j = 1:i-1

         l = l*(t-x(j))/(x(i)-x(j));     

    end;

    for j = i+1:n

         l = l*(t-x(j))/(x(i)-x(j));     

    end;

    f = f + l;                              

    simplify(f);                        

    if(i==n)

       f0 = subs(f,'t',x0);               

       f = collect(f);                   

       f = vpa(f,6);               

    end

end

 

结果:

>> Untitled3

 

f =

 

- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98

 

 

f0 =

 

[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]

 

牛顿:

%y为对应x的值,A为差商表,C为多项式系数,L为多项式

%X为给定节点,Y为节点值,x为待求节点

function[y,A,C,L] = newton(X,Y,x,M)

n = length(X);

m = length(x);

for t = 1 : m

    z = x(t);

    A = zeros(n,n);

    A(:,1) = Y';

    s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;

        for j = 2 : n

            for i = j : n

                A(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));

            end

            q1 = abs(q1*(z-X(j-1)));

            c1 = c1 * j;

        end

        C = A(n, n); q1 = abs(q1*(z-X(n)));

        for k = (n-1):-1:1

            C = conv(C, poly(X(k)));

            d = length(C);

            C(d) = C(d) + A(k,k);

        end

        y(t) = polyval(C,z);

 

end

L = poly2sym(C);

 

x=[0.2 0.4 0.6 0.8 1.0];

y=[0.98 0.92 0.81 0.64 0.38];

x0=[0.2 0.28 0.44 0.76 1 1.08];

m=1;

[y,A,C,L]=newton(x,y,x0,m)

 

结果:

y =

 

    0.9800    0.9622    0.9020    0.6800    0.3800    0.2403

 

 

A =

 

    0.9800         0         0         0         0

    0.9200   -0.3000         0         0         0

    0.8100   -0.5500   -0.6250         0         0

    0.6400   -0.8500   -0.7500   -0.2083         0

    0.3800   -1.3000   -1.1250   -0.6250   -0.5208

 

 

C =

 

   -0.5208    0.8333   -1.1042    0.1917    0.9800

 

 

L =

 

- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/50

 

 

2. 在区间上分别取,用两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。

程序:

x=-1:0.2:1;

y=1./(1+25*x.^2);

x0=-1:0.01:1;

[f,f0]=Lagrange(x,y,x0)

plot(x0,f0)

结果:

f =

 

- 220.942*t^10 + 494.91*t^8 - 381.434*t^6 + 123.36*t^4 - 16.8552*t^2 + 1.0

 

3.下列数据点的插值

 

0.01

1

4

9

16

25

36

49

64

 

0.1

1

2

3

4

5

6

7

8

可以得到平方根函数的近似多项式, 要求用上述9个点作8次插值多项式,并在区间画出的曲线。

程序:

x=[0.01 1   4   9   16  25  36  49  64];

y=[0.1  1   2   3   4   5   6   7   8];

x0=0.01:0.1:64;;

[f,f0]=Lagrange(x,y,x0)

plot(x0,f0)

xlim([0 64]);

结果:

f =

- 2.73858e-10*t^8 + 5.6069e-8*t^7 - 0.00000453906*t^6 + 0.000186698*t^5 - 0.00418177*t^4 + 0.0510128*t^3 - 0.32628*t^2 + 1.19115*t + 0.0881211

 

转载于:https://www.cnblogs.com/wander-clouds/p/9911920.html


http://www.niftyadmin.cn/n/2103129.html

相关文章

零基础学习hadoop开发先明白这层关系

零基础学习hadoop开发先明白这层关系大数据hadoop无疑是当前互联网领域受关注热度最高的词之一,大数据技术的应用正在潜移默化中对我们的生活和工作产生巨大的改变。这种改变给我们的感觉是“水到渠成”,更为让人惊叹的是大数据已经仅仅是互联网行业的风…

Python-计算机硬件基础

预习计算机硬件基础1,CPU/内存、硬盘2,存储器什么是编程语言什么是编程编程的目的运行程序的三大核心硬件重要:运行程序,硬件的工作过程 -------------------------------------------------------------- 1,语言&…

设计模式-UML关系基础

设计模式-UML关系基础UML关系基础 类之间的关系 泛化 类在继承中表现为泛化和实现。继承关系为is-a的关系,两个对象之间用is-a表示为继承关系。eg,自行车是车,猫是动物。泛化关系用空心箭头表示如下图。A继承自B 用空心箭头表示A继承自B泛化关…

Perl 一段非常有用的代码,用来修改文件并备份

需求: 文件系统上有N个文件,他们都是.dat的文本文件,内容形式如下(类似于一个状态卡): Program name: grantie Author: Jackie Company: Symantec Department: QA Phone: 86 1234 5678 Date: Tues March 9,…

Java面向对象----继承概念,super关键字

继承概念: 继承需要符合的关系 is-a , 父类通用更抽象,子类更特殊更具体 类之间的关系 继承体现组合体现实现接口体现继承的意义 代码重用 体现不同抽象层次 extends关键字 Super关键字 代表的是父类的对象的引用 package com.tanlei.newer;public class TeachersDemo {publi…

yii的安装

1.安装composer windows系统直接下载Composer-Setup.exe 运行安装。 2.安装Composer asset plugin composer安装完成后,在一个可通过web访问的目录(如phpstudy的www目录)下,运行以下命令: composer global require &qu…

vector的capacity增长方式

vector的capacity()调用返回vector中最大能够存储的元素个数&#xff0c;也即在下一次需要扩充容量之前能容纳的元素个数。reserve会使容器在必要的时候增长&#xff0c;以便容纳制指定数目的元素。 #include <iostream> #include <vector> using namespace std; i…

前端学习细小知识点记录(日志)

2018/11/7 prompt(string,defaultvalue):类似于警告框alert(),其为提示用户进行输入的对话框&#xff0c;返回string类型。Number()与parseInt()的区别&#xff1a;两者都是进行字符串到数字的转换&#xff0c;但是Number()对于参数中包含非数字时&#xff0c;一律判定为NaN,而…