牛顿插值 | MATLAB源码

本文介绍了一种使用牛顿差值公式估计特定点函数值的方法。通过已知正弦函数在几个特定点的值,该代码实现了对任意中间点正弦值的近似计算。
%% 
% 此代码解决了,利用牛顿差值公式,已知 $sin(0.2) \sin(0.3) \sin(0.4)  \sin(0.5)  \sin(0.6)  \sin(0.7)$的情况下,对 
% $\sin(0.55)$ 的差值估计。

clc,clear,close all
%%
% 主程序 | 输入已知量,估计未知量
x_train = [0.2 0.3 0.4 0.5 0.6 0.7];%注意,这里 x_train 应该输入一个行向量
y_train = sin(x_train);
x_test = 0.55;
y_test = myfun(x_test,x_train,y_train)
y_real = sin(0.55)
%% 
% 牛顿差值的函数

function y_test=myfun(x_test,x_train,y_train)
x_train=x_train';y_train=y_train';
n = length(x_train);
total_diff = zeros(n);
total_diff(:,1) = y_train;
for i = 2:n
    total_diff(:,i) = (total_diff(:,i-1)-total_diff(i-1,i-1))./(x_train-x_train(i-1));
end
% total_diff 表示的是各阶均差,注意:主对角线以上的(不包括主对角线)上的数据请忽略。
a = diag(total_diff);
y_test = 0;
for i = 1:n
    r = a(i);
    for j = 1:i
        if j~=1
            r = r*(x_test-x_train(j-1));
        end
    end
    % 利用刚刚计算得到的系数a,得到y_test的估计值
    y_test = y_test + r;
end
end


2021年9月23日15:37:51

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值