。以下是对代码的解释:' g- x J" m: x9 p/ F
4 _' P+ o0 G! k1 T- k, f
1.函数定义: " A# ]# S. P6 n/ @9 u$ l/ R7 n ' J2 h; P M+ Z x = -1:0.01:1;. F# g4 J# I0 Q9 E) p4 X
y = 1./(1+25*x.^2); & _* f d! o T8 ~ y1 = -50./(1+25.*x.^2).^2.*x; % y 的导数 . v$ z1 B, w( m1 E n = length(x);) j; [, I3 _- ]! W' C+ ^
x1 = -0.9:0.1:0.9; % l1 c& X6 p' o8 P6 |9 O0 m m = length(x1); 5 p' F- T, ^' q, | 9 {# Y& t" ?( ^' y% v这里定义了原始函数 y 和它的导数 y1,以及需要进行插值的点 x1。6 q5 y: u5 @/ k x! F
: q1 R$ W2 @9 l- z1 k9 @' @
2.三次样条插值:2 h5 X7 X3 q( z3 C/ Z
% v3 A G w0 Y" Y$ R
for k = 1:m0 V! ^' D* w+ ^+ c& K/ j. s
for i = 1:n-1) r# m3 b- Y- W. N" L& B
if (x1(k) >= x(i) && x1(k) <= x(i+1))1 d$ T3 Q$ G4 l6 W% l, |5 X, f
h(i) = x(i+1) - x(i); . K. F8 X" \4 Y6 ?+ G, I t = (x1(k) - x(i)) / h(i);4 v5 k8 \+ `9 Z
u1 = (1+2*t)*(t-1)^2; 0 V* _6 ^( m1 m. o5 | u2 = t*(t-1)^2;9 Y1 S; s3 `1 ^. A
u3 = t^2*(3-2*t);7 C* S3 d( ^" g9 \6 e4 j
u4 = t^2*(t-1);4 m' B, {$ ]" {# o
hm(k) = y(i)*u1 + h(i)*y1(i)*u2 + y(i+1)*u3 + h(i)*y1(i+1)*u4;8 c3 P$ P( e. r+ p' s
end 8 p# r N8 r3 h, e2 y4 w7 p end & i: t |/ K' B/ ^6 C end ' K* g2 P& e6 B: I$ _ . s% j( p" O& h, n |; Q这个部分实现了三次样条插值的过程。对于每个插值点 x1(k),找到对应的区间 (x(i), x(i+1)),然后使用三次插值的公式计算估算值 hm(k)。4 A8 j# ^' [0 V
0 |; f& Q( X7 D" H! l7 j3.绘图:1 x0 R1 R: c+ _) D, F R! e) b \
/ }# G7 M Z0 r: ?+ k* \: h
plot(x, y, x1, hm, 'r'); + ^+ w& f1 l `' n hold on;6 w. U% q9 L/ u, i8 O