计算方法实验报告代码和结果.docx
文本预览下载声明
1.分段线性差值函数代码:function y=fdxx(x0,y0,x)%定义函数p=length(y0);n=length(x0);m=length(x);if p~=n error(数据输入有误,请重新输入);else fprintf(分段线性差值\n);for t=1:m z=x(t);if zx0(1)||zx0(n) fprintf(x(%d)超出范围;\n,t);break;%若x不在函数表范围内则插值结果不准确endfor i=1:n-1if zx0(i+1)break;%选取合适的两点使x(i)xx(i+1)endend%若x不再函数表范围内,则i=n-1 y(t)=y0(i)*(z-x0(i+1))/(x0(i)-x0(i+1))+y0(i+1)*(z-x0(i))/(x0(i+1)-x0(i));%按照分段线性插值公式求解y fprintf(y(%d)=%f\nx1=%.3f,y1=%.3f,x2=%.3f,y2=%.3f\n\n,t,y(t),x0(i),y0(i),x0(i+1),y0(i+1));%输出插值结果和所需节点endend结果展示: x0=[0.0 0.1 0.195 0.3 0.401 0.5]; y0=[0.39894 0.39695 0.39142 0.38138 0.36812 0.35206]; x=[0.15 0.31 0.47]; y1=fdxx(x0,y0,x)分段线性差值y(1)=0.394039x1=0.100,y1=0.397,x2=0.195,y2=0.391y(2)=0.380067x1=0.300,y1=0.381,x2=0.401,y2=0.368y(3)=0.356927x1=0.401,y1=0.368,x2=0.500,y2=0.352y1 =0.3940 0.3801 0.3569时间复杂度Elapsed time is 0.007477 seconds.2.分段二次差值函数代码:function y=fd2(x0,y0,x)%定义函数分段二次插值p=length(y0);n=length(x0);m=length(x); %计算函数表和x的长度if p~=n error(数据输入有误,请重新输入);%若函数表的x与y长度不一致则输入有误else fprintf(分段二次差值\n\n);for t=1:m %运用循环求解所有点的插值 z=x(t);if zx0(1)|zx0(n) fprinf(x(%d)超出范围;\n,t);break;%如果x不在函数表范围内无法插值end i=n-1; %若下列循环i不变,则i=n-1,for j=1:n-2if z(x0(j+1)+x0(j))/2 i=j;endend%选取i使得x(i-1),x(i),x(i+1)是距x最近的三个点 s=0.0;for k=i-1:i+1 p=1;for l=i-1:i+1if l~=k p=p*(z-x0(l))/(x0(k)-x0(l));endend s=s+y0(k)*p;end%根据分段二次插值公式求y y(t)=s; fprintf(y(%d)=%f\nx1=%.3f y1=%.3f\nx2=%.3f y2=%.3f\nx3=%.3f y3=%.3f\n\n,t,y(t),x0(i-1),y0(i-1),x0(i),y0(i),x0(i+1),y0(i+1));%输出结果和所需节点endend结果展示: y=fd2(x0,y0,x)分段二次差值y(1)=0.394554x1=0.195 y1=0.391x2=0.300 y2=0.381x3=0.401 y3=0.368y(2)=0.380225x1=0.195 y1=0.391x2=0.300 y2=0.381x3=0.401 y3=0.368y(3)=0.357247x1=0.300 y1=0.381x2=0.401 y2=0.368x3=0.500 y3=0.352y =0.3946 0.3802 0.3572时间复杂度Elapsed time is 0.005265 seconds.3.全区间拉格朗日差值函数代码:function y=lagrange(x0,y0,x) %定义函数p=length(y0);n=length(x0);m=length(x); %计算函数表和x的长度if p~=n error(数据
显示全部