行业知识
matlab实践(九):分段线性插值与三次样条插值
题目
用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−1x−xj−1yj−1+xj−xj−1x−xj−1yj
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∑nyjLj(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)
下一篇:dog英文怎么读音声音?