作业报告使用MATLAB编程2.1Newton插值:clearclcx=[0.2 0.4 0.6 0.8 1];n=length(x);y=zeros(n);y(:,1)=[0.98 0.92 0.81 0.64 0.38]; a=x(1);b=x(end);for j=1:n-1for k=j:n-1temp=y(k+1,j)-y(k,j);y(k+1,j+1)=temp/(x(k+1)-x(k+1-j)); endc(j)=y(j,j);c(j+1)=y(j+1,j+1);endp=c(1);q=1;syms Xfor i=2:nq=q*(X-x(i-1));p=p+c(i)*q;endp=simple(p)for i=1:301t(i)=a+(b-a)/300*(i-1);Nn(i)=eval(subs(p,'X','t(i)')); endplot(t,Nn,'b')hold ongrid onlegend('Newton')title('Newton')xlabel('x')ylabel('f(x)')图像:三次样条插值:M文件spline33.mfunction [yy b c d]=spline3(x,y,xx,flag,vl,vr)if length(x)~=length(y)error('输入数据应成对');endn=length(x);a=zeros(n-1,1);b=a;d=a;dx=a;dy=a;A=zeros(n);B=zeros(n,1);fori=1:n-1a(i)=y(i);dx(i)=x(i+1)-x(i);dy(i)=y(i+1)-y(i);endfori=2:n-1A(i,i-1)=dx(i-1);A(i,i)=2*(dx(i-1)+dx(i));A(i,i+1)=dx(i);B(i,1)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1)); endif flag==0A(1,1)=1;A(n,n)=1;end% --------------------------------- %% 端点一阶导数条件%if flag==1A(1,1)=2*dx(1);A(1,2)=dx(1);A(n,n-1)=dx(n-1);A(n,n)=2*dx(n-1);B(1,1)=3*(dy(1)/dx(1)-vl);B(n,1)=3*(vr-dy(n-1)/dx(n-1));end% --------------- %% 端点二阶导数条件%if flag==2A(1,1)=2;A(n,n)=2;B(1,1)=vl;B(n,1)=vr;end% --------------- %c=A\B;fori=1:n-1d(i)=(c(i+1)-c(i))/(3*dx(i));b(i)=dy(i)/dx(i)-dx(i)*(2*c(i)+c(i+1))/3; end[mmnn]=size(xx);yy=zeros(mm,nn);fori=1:mm*nnfor ii=1:n-1if xx(i)>=x(ii)&xx(i)<x(ii+1)j=ii;break;elseif xx(i)==x(n)j=n-1;endendyy(i)=a(j)+b(j)*(xx(i)-x(j))+c(j)*(xx(i)-x(j))^2+d(j)*(xx(i)-x(j))^3; endend主程序:clear;clc;format short g;x1=[0.2 0.4 0.6 0.8 1.0]';y1=[0.98 0.92 0.81 0.64 0.38]';u1=0;un=0;xx1=[x1(1):0.001:x1(end)]';[yy1 b1 c1 d1]=spline33(x1,y1,xx1,0,u1,un);fprintf('\t\tb1\t\tc1\t\td1\n');disp([b1 c1(1:end-1,1) d1]);plot(x1,y1,'bo',xx1,yy1,'--k');legend('spline')title('spline')grid on;2.3(1)8次拉格朗日插值M文件language1.mfunction f=language(x,y,x0) syms t l;if (length(x)==length(y))n=length(x);elsedisp('x和y的维数不相等!') return;endh=sym(0);fori=1:nl=sym(y(i));for j=1:i-1l=l*(t-x(j))/(x(i)-x(j)); end;for j=i+1:nl=l*(t-x(j))/(x(i)-x(j)); end;h=h+l;endsimplify(h);if(nargin==3)f=subs(h,t,x0);elsef=collect(h);f=vpa(f,6);end主程序:x=[0 1 4 9 16 25 36 49 64];y=[0 1 2 3 4 5 6 7 8];f=language1(x,y)plot(x,y)legend('language')title('language')grid on;(2)三次样条差值:M文件spline33.mfunction [yy b c d]=spline3(x,y,xx,flag,vl,vr) if length(x)~=length(y)error('输入数据应成对');endn=length(x);a=zeros(n-1,1);b=a;d=a;dx=a;dy=a;A=zeros(n);B=zeros(n,1);fori=1:n-1a(i)=y(i);dx(i)=x(i+1)-x(i);dy(i)=y(i+1)-y(i);endfori=2:n-1A(i,i-1)=dx(i-1);A(i,i)=2*(dx(i-1)+dx(i));A(i,i+1)=dx(i);B(i,1)=3*(dy(i)/dx(i)-dy(i-1)/dx(i-1));endif flag==0A(1,1)=1;A(n,n)=1;end% --------------------------------- %% 端点一阶导数条件%if flag==1A(1,1)=2*dx(1);A(1,2)=dx(1);A(n,n-1)=dx(n-1);A(n,n)=2*dx(n-1);B(1,1)=3*(dy(1)/dx(1)-vl);B(n,1)=3*(vr-dy(n-1)/dx(n-1));end% --------------- %% 端点二阶导数条件%if flag==2A(1,1)=2;A(n,n)=2;B(1,1)=vl;B(n,1)=vr;end% --------------- %c=A\B;fori=1:n-1d(i)=(c(i+1)-c(i))/(3*dx(i));b(i)=dy(i)/dx(i)-dx(i)*(2*c(i)+c(i+1))/3;end[mmnn]=size(xx);yy=zeros(mm,nn);fori=1:mm*nnfor ii=1:n-1if xx(i)>=x(ii)&xx(i)<x(ii+1)j=ii;break;elseif xx(i)==x(n)j=n-1;endendyy(i)=a(j)+b(j)*(xx(i)-x(j))+c(j)*(xx(i)-x(j))^2+d(j)*(xx(i)-x(j))^3;endend主程序:clear;clc;format short g;x1=[0 1 4 9 16 25 36 49 64 ]';y1=[0 1 2 3 4 5 6 7 8]';u1=0;un=0;xx1=[x1(1):0.001:x1(end)]';[yy1 b1 c1 d1]=spline33(x1,y1,xx1,1,u1,un); fprintf('\t\tb1\t\tc1\t\td1\n');disp([b1 c1(1:end-1,1) d1]);plot(x1,y1,'bo',xx1,yy1,'--k');legend('spline')title('spline')grid on;4-1(1)M文件function.m:Function y=fun(x);y=sqrt(x)*log(x);主程序Clear;clc;h=0.001;n=1/h;t=0;s1=0;s2=0;fori=1:n-1t=t+function(i*h);endT=h/2*(0+2*t+f(1));T=vpa(T,7)For i=0:n-1s1=s1+function(h/2+i*h);endfori=1:n-1s2=s2+function(i*h);endS=h/6*(0+4*s1+2*s2+f(1));S=vpa(S,7) 综上,得解。