第1题代码分析:

  1. clear; %清空命令窗口变量
  2. clc; %清空命令窗口显示
  3. clf; %清空当前图形窗口
  4. x1=[0.2 0.4 0.6 0.8 1.0]; %已知数据的x坐标
  5. y1=[0.98 0.92 0.81 0.64 0.38]; %已知数据的y坐标
  6. n=length(y1); %已知数据个数
  7. c=y1(:); %将已知数据的y坐标向量转化为列向量
  8. for j=2:n %求差商
  9. for i=n:-1:j
    
  10.     c(i)=(c(i)-c(i-1))/(x1(i)-x1(i-j+1)); %递推求解差商
    
  11. end
    
  12. end
  13. syms x df d; %定义符号变量
  14. df(1)=1;d(1)=y1(1); %df和d分别表示插值多项式的差商和系数,初始化
  15. for i=2:n %求牛顿差值多项式
  16. df(i)=df(i-1)*(x-x1(i-1)); %递推求解差商
    
  17. d(i)=c(i)*df(i); %递推求解插值多项式系数
    
  18. end
  19. P4=vpa(sum(d),5) %P4即为4次牛顿插值多项式,并保留小数点后5位数
  20. pp=csape(x1,y1, 'variational');%调用三次样条函数
  21. q=pp.coefs; %q表示样条函数的系数矩阵
  22. for i=1:4
  23. S=q(i,:)*[(x-x1(i))^3;(x-x1(i))^2;(x-x1(i))^1;(x-x1(i))^0]; %逐项计算样条函数的值
    
  24. S=vpa(collect(S),5) %保留小数点后5位数
    
  25. end
  26. figure %新建画布
  27. ezplot(P4, [0.2,1.08]); %在画布上绘制插值多项式的图像
  28. hold on; %保持图像
  29. x2=0.2:0.08:1.08; %生成一系列x坐标
  30. y2=fnval(pp, x2); %计算样条函数在这些x坐标处的值
  31. ind=[1,2,11,10]; %选取几个特定的x坐标
  32. y3=fnval(pp,x2(ind)); %计算这些特定x坐标处样条函数的值
  33. plot(x2,y2,'r',x2(ind),y3,'go') %绘制样条函数的图像和特定点的散点图
  34. title('Newton interpolation with deg=4 and cubic splines'); %添加图像标题
  35. hold off; %释放图像

第2题代码分析:

  1. function y =lagrange (x0,y0,x) %定义拉格朗日插值函数,输入已知数据的x坐标、y坐标和需要插值的x坐标,输出插值的y坐标
  2. m=length(x); %需要插值的x坐标个数
  3. n=length(x0); %已知数据个数
  4. for i=1:m %逐个计算需要插值的x坐标的y坐标
  5. z=x(i); %取出一组需要插值的x坐标
    
  6. s=0; %初始化插值的y坐标
    
  7. for k=1:n %逐个计算拉格朗日插值多项式的每一项
    
  8.     p=1.0; %初始化插值多项式的每一项
    
  9.     for j=1:n %逐个计算插值多项式的每个乘项
    
  10.         if j~=k %如果不是同一个已知数据点
    
  11.             p=p*(z-x0(j))/(x0(k)-x0(j)); %计算乘项的值
    
  12.         end
    
  13.     end
    
  14.     s=p*y0(k)+s; %将每一项相加得到插值的y坐标
    
  15. end
    
  16. y(i)=s; %将插值的y坐标存入结果向量中
    
  17. end
  18. clear; %清空命令窗口变量
  19. clc; %清空命令窗口显示
  20. clf; %清空当前图形窗口
  21. x0=[-1:0.02:1]; %已知数据的x坐标
  22. y0=1./(1+25*x0.^2); %已知数据的y坐标
  23. plot(x0,y0,'b') %在画布上绘制原曲线
  24. hold on %保持图像
  25. x1=linspace(-1,1,11); %选取11个已知数据点
  26. y1=1./(1+25*x1.^2); %计算这11个点的y坐标
  27. y0=lagrange(x1,y1,x0); %计算拉格朗日插值得到的y坐标
  28. plot(x0,y0,'--r') %在画布上绘制插值曲线ᅠ
  29. x1=linspace(-1,1,21); %选取21个已知数据点
  30. y1=1./(1+25*x1.^2); %计算这21个点的y坐标
  31. y0=lagrange(x1,y1,x0); %计算拉格朗日插值得到的y坐标
  32. plot(x0,y0,'--g') %在画布上绘制插值曲线ᅠ 33
请帮我逐行分析下列代码在原代码后面做出解释第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 求牛顿差值

原文地址: https://www.cveoy.top/t/topic/e4uV 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录