实验八
实验内容
1、一阶微分
x | 1 | 1.1 | 1.2 |
f(x) | 0.25 | 0.2265 | 0.2066 |
2、用梯形公式计算积分
3、用三点辛普森公式计算积分
3、用程序说明三点辛普森公式其代数精度是3。
4、用梯形公式和指令 trapz 实现梯形公式求积法, 计算cos(x)在区间[0,π]的结果,并变换节点数, 用表列出积分的变化结果。
实验综述
本实验均基于 MATLAB 2019b 版本
安装MATLAB 2019b 点击查看
实验过程

一阶微分
x | 1 | 1.1 | 1.2 |
f(x) | 0.25 | 0.2265 | 0.2066 |
实验代码
%% 用三点公式计算f'(x)在x=1.0,1.1,1.3的值
% 版本 2019b
%% 代码部分
clc,close,clear;
x = [1.0,1.1,1.2];
y = [0.25,0.2268,0.2066];
n = length(x);
f1(1) = (-3*y(1)+4*y(2)-y(3))/(2*(x(2)-x(1))); %三点公式求导数值
f1(2) = (y(3)-y(1))/(2*(x(2)-x(1)));
f1(n) = (y(n-2)-4*y(n-1)+3*y(n))/(2*(x(2)-x(1)));
fprintf('f(x)在x=1,1.1,1.2的导数值分别为:\n');
disp(f1);
% 根据二次插值多项式求导得出f(x)在x=1.3的导数值
P = @(a) y(1)*(2*a-x(2)-x(3))/(2*(x(2)-x(1))^(2))-y(2)*(2*a-x(1)-x(3))/((x(2)-x(1))^(2))+y(3)*(2*a-x(1)-x(2))/(2*(x(2)-x(1))^(2));
fprintf('f(x)在x=1.3的导数值为:\n');
disp(P(1.3));
实验效果

用梯形公式计算积分
并给出误差估计
实验代码
%% 用梯形公式计算积分
% 版本 2019b
%% 代码部分
clc,close,clear;
fx = @(x) sin(x.^2); %被积函数
a = 0;
b = pi/2; %积分区间
n = 0;
s1 = integral(fx,0,pi/2); %用integral函数计算积分
fprintf('integral函数积分结果:\n');
disp(s1);
s2 = (b-a)*(fx(a)+fx(b))/2; %梯形公式
fprintf('梯形公式积分结果:\n');
disp(s2);
err = abs(s1-s2); %计算误差
fprintf('误差为:\n');
disp(err);
syms x
d = diff(sin(x.^2),2);
M2 = subs(d,x,0);
ERR = eval(M2*((b-a)^(3))/12); %估计误差计算公式
if abs(err) <= abs(ERR)
fprintf('误差小于估计误差%f\n',ERR);
else
fprintf('误差大于估计误差%f\n',ERR);
end
实验效果

用三点辛普森公式计算积分
并给出误差估计
实验代码
%% 用三点辛普森公式计算积分
% 版本 2019b
%% 代码部分
clc,close,clear;
X = [0 pi/2]; %积分区间
fx = @(x) sin(x.^2);
s1 = integral(fx,0,pi/2);
fprintf('integral函数积分结果:%f\n',s1);
s2 = ((X(2)-X(1))/6)*(fx(X(1))+4*(fx((X(1)+X(2))/2))+fx(X(2))); %辛普森三点公式
fprintf('辛普森公式积分结果:%f\n',s2);
err = abs(s2-s1); %计算误差
fprintf('误差为:%f\n',err);
%% Simpson1/3求积公式误差估计
syms x
d = diff(sin(x.^2),4);
M = subs(d,x,pi/2);
ERR = eval(M*((X(2)-X(1))^(5))/2880); %估计误差计算公式
if abs(err) <= abs(ERR)
fprintf('误差小于估计误差%f\n',ERR);
else
fprintf('误差大于估计误差%f\n',ERR);
end
实验效果

用程序说明三点辛普森公式其代数精度是3
实验代码
%% 用程序说明三点辛普森公式其代数精度是3
% 版本 2019b
%% 代码部分
clc,close,clear;
X = [0 1]; %积分区间
%% 用辛普森公式计算x在[0,1]上的积分
fx = @(x) x;
s11 = integral(fx,0,1);
fprintf('integral函数积分结果:%f\n',s11);
s12 = ((X(2)-X(1))/6)*(fx(X(1))+4*(fx((X(1)+X(2))/2))+fx(X(2))); %辛普森三点公式
fprintf('辛普森公式积分结果:%f\n',s12);
err1= abs(s12-s11); %计算误差
fprintf('误差为:%f\n',err1);
%% 用辛普森公式计算x^2在[0,1]上的积分
fx = @(x) x.^2;
s21 = integral(fx,0,1);
fprintf('integral函数积分结果:%f\n',s21);
s22 = ((X(2)-X(1))/6)*(fx(X(1))+4*(fx((X(1)+X(2))/2))+fx(X(2))); %辛普森三点公式
fprintf('辛普森公式积分结果:%f\n',s22);
err2 = abs(s22-s21); %计算误差
fprintf('误差为:%f\n',err2);
%% 用辛普森公式计算x^3在[0,1]上的积分
fx = @(x) x.^3;
s31 = integral(fx,0,1);
fprintf('integral函数积分结果:%f\n',s31);
s32 = ((X(2)-X(1))/6)*(fx(X(1))+4*(fx((X(1)+X(2))/2))+fx(X(2))); %辛普森三点公式
fprintf('辛普森公式积分结果:%f\n',s32);
err3 = abs(s32-s31); %计算误差
fprintf('误差为:%f\n',err3);
%% 用辛普森公式计算x^4在[0,1]上的积分
fx = @(x) x.^4;
s41 = integral(fx,0,1);
fprintf('integral函数积分结果:%f\n',s41);
s42 = ((X(2)-X(1))/6)*(fx(X(1))+4*(fx((X(1)+X(2))/2))+fx(X(2))); %辛普森三点公式
fprintf('辛普森公式积分结果:%f\n',s42);
err4 = abs(s42-s41); %计算误差
fprintf('误差为:%f\n',err4);
disp('由上述结果可见三点辛普森公式其代数精度是3');
实验效果

用梯形公式和指令 trapz 实现梯形公式求积法, 计算cos(x)在区间[0,π]的结果,并变换节点数, 用表列出积分的变化结果
实验代码
%% 用梯形公式和指令 trapz 实现梯形公式求积法, 计算cos(x)在区间[0,pi]的结果,并变换节点数, 用表列出积分的变化结果
% 版本 2019b
%% 代码部分
clc,close,clear;
fx = @(x) cos(x);
hvec = 1e-4:0.01:0.1;
n = 0;
areaxy1(1,:) = 0;
areaxy2(1,:) = 0;
for h = hvec
x = 0:h:pi;
y = fx(x);
n = n+1;
areaxy1(n) = h*(y(1)+y(end)+sum(2*y(2:end-1)))/2 ; %梯形公式
areaxy2(n) = trapz(x,y); % trapz函数
end
fprintf('x:\n');
disp(hvec);
fprintf('梯形公式积分结果:\n');
disp(areaxy1);
fprintf('trapz函数积分结果:\n');
disp(areaxy2);