小工具知识网

当前位置: 首页 > 行业知识 > matlab实践(九):分段线性插值与三次样条插值

行业知识

matlab实践(九):分段线性插值与三次样条插值

2026-11-08 09:46:43 来源:互联网转载

题目

用matlab对572所在区间分别进行分段线性插值、三次样条插值,计算出151,159,984,995的对数值,画出图形并在图形上用红色圆圈标记151,159,984,995所在的点,同时在图形中显示这些点的坐标。

说明:假设125,528,765;则插值区间为【120,770】

1.分段线性插值、三次样条插值

1.1分段线性插值

Step1:根据已知 的取值点,求出每个取值点对应的线性插值多项式,表示为:

L j ( x ) = x − x j − 1 x j − x j − 1 y j − 1 + x − x j − 1 x j − x j − 1 y j L_{j}(x)=\frac{x-x_{j-1}}{x_{j}-x_{j-1}}y_{j-1}+ \frac{x-x_{j-1}}{x_{j}-x_{j-1}}y_{j} Lj​(x)=xj​−xj−1​x−xj−1​​yj−1​+xj​−xj−1​x−xj−1​​yj​

Step2:根据已知的取值点,使用第一步中求出的每个取值点对应的线性插值多项式,然后求已知 个点对应的线性插值多项式 。其表达式为:

L ( x ) = ∑ j = 0 n y j L j ( x ) L (x)=\sum_{j=0}^{n} y_{j}L_{j}(x) L(x)=j=0∑n​yj​Lj​(x)

选取以150开始,间隔为50,到1000结束的点,然后使用分段线性插值法,计算出151,159,984,995的对数值。

x = 150:50:1000;y = B(15:5:100)+2.*B(b==10);figure(2)xx=[151,159,984,995];for i=1:4    yy(i)=fdxx(x,y,xx(i));endxx1=150:1:999;for i=1:850    yyy(i)=fdxx(x,y,xx1(i));endplot(xx1,yyy)hold onscatter(xx,yy)text(xx,yy, {'151','159','984','995'}, 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'right'); % 添加文字标注hold ongrid onplot(x,y,'o')% 添加坐标轴标签和标题xlabel('x');ylabel('ln(x)');title('插值点与分段线性插值');legend('分段线性插值点坐标','插值点')% 显示图形grid on;function yy=fdxx(x,y,xx)    n=size(x,2);    for i=1:n-1        if x(i)'151','159','984','995'}, 'VerticalAlignment', 'bottom', 'HorizontalAlignment', 'right'); % 添加文字标注xlabel('x'), ylabel('ln(x)')title('插值点与三次样条函数') legend('三次样条插值点坐标','插值点')function [D,h,A,g,M]=threesimple(X,Y)%        自然边界条件的三次样条函数(第二种边界条件)%        此函数为M值求值函数%        D,h,A,g,M输出量分别为系数矩阵D,插值宽度h,差商表A,g值,M值          n=length(X);          A=zeros(n,n);A(:,1)=Y';D=zeros(n-2,n-2);g=zeros(n-2,1);         for  j=2:n            for i=j:n                A(i,j)=(A(i,j-1)- A(i-1,j-1))/(X(i)-X(i-j+1));            end         end                  for i=1:n-1             h(i)=X(i+1)-X(i);         end         for i=1:n-2             D(i,i)=2;             g(i,1)=(6/(h(i+1)+h(i)))*(A(i+2,2)-A(i+1,2));         end         for i=2:n-2             u(i)=h(i)/(h(i)+h(i+1));             n(i-1)=h(i)/(h(i-1)+h(i));             D(i-1,i)=n(i-1);             D(i,i-1)=u(i);                      end         M=D\g;         M=[0;M;0];         endfunction s=threesimple1(X,Y,x)%        自然边界条件函数 %        s函数表示三次样条插值函数插值点对应的函数值%        根据三次样条参数函数求出的D,h,A,g,M%        x表示求解插值点函数点,X为已知插值点                 [D,h,A,g,M]=threesimple(X,Y)         n=length(X); m=length(x);             for t=1:m            for i=1:n-1               if (x(t)

上一篇:如何在Word里一次性给全部汉字加拼音?

下一篇:dog英文怎么读音声音?