函数插值计算(Matlab程序)

%Runge函数插值计算
%参考教材:《数值分析》李乃成,梅立泉,科学出版社
%《计算方法教程》第二版 凌永祥,陈明逵
%Runge函数f(x)=(1+25x^2)^(-1),(-1 clear;clc;close all;
format short;
fprintf('输入N:(5,10,15,20)\n');
N=input('');
N
i=0:N;
%format short;
fprintf('插值节点xi');xx=-1+2/N*i
fprintf('插值节点xi处的函数值f(xi)');fx=(1+25*xx.^2).^(-1)
yy=fx;
%----------求Newton插值多项式的各阶差商-------
%注意:数组下表为1...N+1,区别于课本中的0...N
for k=1:N
    for i=N+1:-1:k+1
        yy(i)=(yy(i)-yy(i-1))/(xx(i)-xx(i-k));
    end
end
fprintf('Newton插值多项式的各阶差商');yy
syms x y
%--------用秦九韶算法计算多项式的表达式
y=yy(N+1);
for i=N:-1:1
    y=y*(x-xx(i))+yy(i);
end
fprintf('Newton插值多项式的表达式:');simplify(y)
%----------(自然)三次样条插值多项式-----------
M=zeros(1,N+1);%M(i)对应s(x)在节点x(i)处的二阶导数
h=zeros(1,N);%h(i)=x(i)-x(i-1)
A=zeros(N-1,N-1);%三弯矩方程组的系数矩阵(自然三次样条插值)
b=zeros(1,N-1);a=b;c=b;d=b;
h(1)=xx(2)

你可能感兴趣的:(数值分析,Matlab)