function [m_matrix]=hermite(x,y,y0,yn,x_value)
%% 輸入值分配,x_input,y_input均為陣列,y_0,y_n為x_0,x_n分別對應的一階導數值
x_input = x;
y_input = y;
y_0 = y0;
y_n = yn;
%% [~,number] = size(x_input); %獲取輸入x_input的大小1×number
delta_h = zeros(1,number-1); %給delta_h分配陣列大小1×(number-1),並全部初始化為0
delta_f = zeros(1,number-1); %給delta_f分配陣列大小1×(number-1),並全部初始化為0
lambda_ = zeros(1,number-2); %給lambda_分配陣列大小1×(number-2),並全部初始化為0
miu = zeros(1,number-2); %給miu_分配陣列大小1×(number-2),並全部初始化為0
e = zeros(1,number-2); %給e分配陣列大小1×(number-2),並全部初始化為0
% 計算delta_h、delta_f的值
for i = 1:(number-1)
delta_h(i) = x_input(i+1) - x_input(i);
delta_f(i) = (y_input(i+1) - y_input(i))/ delta_h(i);
end%%計算lambda,miu,e
for i=1:number-2
lambda_(1,i) = delta_h(1,i+1) / (delta_h(1,i+1) + delta_h(1,i));
miu(1,i) = 1 - lambda_(1,i);
e(1,i) = 3*(lambda_(1,i)*delta_f(1,i) + miu(1,i)*delta_f(1,i+1));
enda = zeros(number-2,number-2); %初始化係數矩陣a,(n-2)*(n-2)
b = zeros(number-2,1); %初始化係數矩陣b,(n-2)*1
%當i=1時
a(1,1) = 2;
a(1,2) = miu(1,1);
b(1,1) = e(1,1) - lambda_(1,1) * y_0;
%當i=2:n-2時
for i = 2:number-3
b(i,1) = e(1,i);
a(i,i-1) = lambda_(1,i);
a(i,i) = 2;
a(i,i+1) = miu(1,i);
end%當i=n-1時
a(number-2,number-3) = lambda_(1,number-2);
a(number-2,number-2) = 2;
b(number-2,1) = e(1,number-2) - miu(1,number-2)*y_n;
%% 計算a的逆,a*b
m_matrix = a\b;
m = zeros(1,number);
m(1,1) = y_0;
m(1,number) = y_n;
for i = 2:number-1
m(1,i) = m_matrix(i-1,1);
endfor i =1:number-1
% 獲取相鄰兩點間的插值函式
x_ = linspace(x_input(1,i),x_input(1,i+1));
s1 = y_input(1,i).*((x_-x_input(1,i+1)).^2).*(delta_h(1,i) + 2.*(x_ - x_input(1,i)))./(delta_h(1,i).^3);
s2 = y_input(1,i+1).*((x_-x_input(1,i)).^2).*(delta_h(1,i) + 2.*(x_input(1,i+1) - x_))./(delta_h(1,i).^3);
s3 = m(1,i).*((x_ - x_input(1,i+1)).^2).*(x_ - x_input(1,i))./(delta_h(1,i).^2);
s4 = m(1,i+1).*((x_ - x_input(1,i)).^2).*(x_ - x_input(1,i+1))./(delta_h(1,i).^2);
s = s1 + s2 + s3 +s4;
% 判斷輸入的x屬於哪個插值區間,滿足則計算對應的f(x)的值
if x_value>x_input(1,i)&&x_value
驗證資料:
已知資料x0
1234
5678
910y2.51
3.30
4.04
4.70
5.22
5.54
5.78
5.40
5.57
5.70
5.80
邊界條件為y'0 = 0.8,y'n = 0.2.
測試結果:
hermite插值 分段插值 Hermite插值
1.分段二次多項式插值 試用分段 4段 二次多項式插值來近似 0,1 區間上的 runge 函式 1 取區間的 8 等分點,計算插值節點處的函式值 2 每次取 3 個相鄰的等分點為一組,呼叫 polyinterp 函式,計算繪圖求值點 3 繪圖.2.hermite插值 編寫程式,繪製繪製多項式 p ...
分段二次插值例題 分段三次插值
摘 要用函式來表示變數間的數量關係廣泛應用於各學科領域,但是在實際 問題中,往往是通過實驗 觀測以及計算等方法,得到的是函式在一些點 上的函式值。如何通過這些離散資料找到函式的乙個滿足精度要求且便於 使用的近似表示式,是經常遇到的問題。對於這類問題我們解決的方法為插值法,而最常用也最簡單的插值方 法...
拉格朗日插值 分段線性插值 三次樣條插值
本篇主要介紹在三種插值方法 拉格朗日插值 分段線性插值 三次樣條插值,以及這三種方法在matlab中如何實現。令上式稱為 matlab沒有現成的lagrange函式,需要手動寫,如下 x0,y0為原始座標點,維度必須相同。x為待插值的點。y是返回值,是最終插值結果。function y lagran...