来源:李庆杨等第五版《数值分析》P44页例题。目的:回顾一下matlab的基本用法。
首先根据书中给出的数学表达式编写求解弯矩(书上这么叫的)函数:
function [M,A,d,H] = SolveSpline_1(x,y,diff_y0,diff_yn)
%Function:求解第一种三次样条函数插值
%变量说明:
%Input varibles:
% x:自变量数据(以列的形式输入)
% y:因变量数据(以列的形式输入)
% diff_y0:左端点导数值
% diff_yn:右端点到数值
%Output varibles:
%M:三次样条函数中的弯矩
%A:三对角矩阵
%d:右端向量
%H:节点步长
xx = x(2:end);
a = x(1);%作为x0点
[n,m] = size(xx);
A = 2*eye(n+1,n+1);%初始化三对角矩阵
H = diff(x);
%对角参数设置
mu = zeros(n,1);
mu(n) = 1;
for k = [1:n-1]
mu(k) = H(k)/(H(k) + H(k+1));
end
lambda = zeros(n,1);
lambda(1) = 1;
for k = [2:n]
lambda(k) = H(k)/(H(k-1) + H(k));
end
d = zeros(n+1,1);
%temp = (y(2) - y(1))/(x(2) - x(1))
d(1) = (6/H(1))*((y(2) - y(1))/(x(2) - x(1)) - diff_y0);
%temp = diff_yn - ((y(end) - y(end-1))/(x(end) - x(end-1)))
d(n+1) = (6/H(n))*(diff_yn - ((y(end) - y(end-1))/(x(end) - x(end-1))));