拉格朗日插值法的matlab实现

一、基本原理

比如有如下这些点

x1 x2 x3 x4
y1 y2 y3 y4

那么在拉个朗日原理中可以把过这些点的曲线表示为:

其g(x)y叫做一个插值基函数 (开关),当x=x1时,g1(x)=1,而当x=x2,x3,x4时,g1(x)都为0,其他的也是如此,这样当x=x1时,f(x)中就只保留了g1(x)y1项,其他项都为0,就保证了过点(x1,y1);其他点以此类推;

原理讲解得很简单,具体可以参考其他文献资料。

二、Matlab代码

matlab 复制代码
clear
clc

x = [466 741 950 1422 1634];
y = [7.04 4.28 3.40 2.54 2.13];

x1 = min(x):0.5:max(x);
y1 = lagrange(x,y,x1);
plot(x,y,'ko',x1,y1,'r-')

function fx = lagrange(x0,y0,x)
    m = length(x);
    n = length(x0);
    for i = 1:m
        z = x(i);
        s = 0;
        for k = 1:n
            p = 1;
            for j = 1:n
                if j~=k
                    p = p * (z-x0(j))/(x0(k)-x0(j));
                end
            end
            s = p*y0(k)+s;
        end
        fx(i) = s;
    end
end
相关推荐
q***d1732 小时前
Rust在网络中的协议栈
开发语言·网络·rust
星释2 小时前
Rust 练习册 88:OCR Numbers与光学字符识别
开发语言·后端·rust
一生要强的ymy2 小时前
Polar PHP是世界上最好的语言(困难)
开发语言·php
我命由我123453 小时前
Java NIO 编程 - NIO Echo Server、NIO Client(NIO 异步客户端、NIO Selector 异步客户端)
java·开发语言·网络·java-ee·intellij-idea·intellij idea·nio
前端炒粉4 小时前
35.LRU 缓存
开发语言·javascript·数据结构·算法·缓存·js
星释5 小时前
Rust 练习册 75:ETL与数据转换
开发语言·rust·etl
happyjoey2175 小时前
使用Qt自带的Maintenance Tool将Qt6.9升级为QT6.10
开发语言·qt
p***h6439 小时前
JavaScript在Node.js中的异步编程
开发语言·javascript·node.js
散峰而望9 小时前
C++数组(二)(算法竞赛)
开发语言·c++·算法·github
Porunarufu9 小时前
Java·关于List
java·开发语言