请帮我逐行分析下列代码在原代码后面做出解释第1题clear;clc;clf;x1=02 04 06 08 10;y1=098 092 081 064 038;n=lengthy1;c=y1;for j=2n 求差商 for i=n-1j ci=ci-ci-1x1i-x1i-j+1; endendsyms x df d;df1=1;d1=y11;for i=2n 求牛顿差值
第1题代码分析:
- clear; %清空命令窗口变量
- clc; %清空命令窗口显示
- clf; %清空当前图形窗口
- x1=[0.2 0.4 0.6 0.8 1.0]; %已知数据的x坐标
- y1=[0.98 0.92 0.81 0.64 0.38]; %已知数据的y坐标
- n=length(y1); %已知数据个数
- c=y1(:); %将已知数据的y坐标向量转化为列向量
- for j=2:n %求差商
-
for i=n:-1:j -
c(i)=(c(i)-c(i-1))/(x1(i)-x1(i-j+1)); %递推求解差商 -
end - end
- syms x df d; %定义符号变量
- df(1)=1;d(1)=y1(1); %df和d分别表示插值多项式的差商和系数,初始化
- for i=2:n %求牛顿差值多项式
-
df(i)=df(i-1)*(x-x1(i-1)); %递推求解差商 -
d(i)=c(i)*df(i); %递推求解插值多项式系数 - end
- P4=vpa(sum(d),5) %P4即为4次牛顿插值多项式,并保留小数点后5位数
- pp=csape(x1,y1, 'variational');%调用三次样条函数
- q=pp.coefs; %q表示样条函数的系数矩阵
- for i=1:4
-
S=q(i,:)*[(x-x1(i))^3;(x-x1(i))^2;(x-x1(i))^1;(x-x1(i))^0]; %逐项计算样条函数的值 -
S=vpa(collect(S),5) %保留小数点后5位数 - end
- figure %新建画布
- ezplot(P4, [0.2,1.08]); %在画布上绘制插值多项式的图像
- hold on; %保持图像
- x2=0.2:0.08:1.08; %生成一系列x坐标
- y2=fnval(pp, x2); %计算样条函数在这些x坐标处的值
- ind=[1,2,11,10]; %选取几个特定的x坐标
- y3=fnval(pp,x2(ind)); %计算这些特定x坐标处样条函数的值
- plot(x2,y2,'r',x2(ind),y3,'go') %绘制样条函数的图像和特定点的散点图
- title('Newton interpolation with deg=4 and cubic splines'); %添加图像标题
- hold off; %释放图像
第2题代码分析:
- function y =lagrange (x0,y0,x) %定义拉格朗日插值函数,输入已知数据的x坐标、y坐标和需要插值的x坐标,输出插值的y坐标
- m=length(x); %需要插值的x坐标个数
- n=length(x0); %已知数据个数
- for i=1:m %逐个计算需要插值的x坐标的y坐标
-
z=x(i); %取出一组需要插值的x坐标 -
s=0; %初始化插值的y坐标 -
for k=1:n %逐个计算拉格朗日插值多项式的每一项 -
p=1.0; %初始化插值多项式的每一项 -
for j=1:n %逐个计算插值多项式的每个乘项 -
if j~=k %如果不是同一个已知数据点 -
p=p*(z-x0(j))/(x0(k)-x0(j)); %计算乘项的值 -
end -
end -
s=p*y0(k)+s; %将每一项相加得到插值的y坐标 -
end -
y(i)=s; %将插值的y坐标存入结果向量中 - end
- clear; %清空命令窗口变量
- clc; %清空命令窗口显示
- clf; %清空当前图形窗口
- x0=[-1:0.02:1]; %已知数据的x坐标
- y0=1./(1+25*x0.^2); %已知数据的y坐标
- plot(x0,y0,'b') %在画布上绘制原曲线
- hold on %保持图像
- x1=linspace(-1,1,11); %选取11个已知数据点
- y1=1./(1+25*x1.^2); %计算这11个点的y坐标
- y0=lagrange(x1,y1,x0); %计算拉格朗日插值得到的y坐标
- plot(x0,y0,'--r') %在画布上绘制插值曲线ᅠ
- x1=linspace(-1,1,21); %选取21个已知数据点
- y1=1./(1+25*x1.^2); %计算这21个点的y坐标
- y0=lagrange(x1,y1,x0); %计算拉格朗日插值得到的y坐标
- plot(x0,y0,'--g') %在画布上绘制插值曲线ᅠ 33
原文地址: https://www.cveoy.top/t/topic/e4uV 著作权归作者所有。请勿转载和采集!