《工程数值计算》上机实验报告(第二次)
学生姓名  ***       班级   *******        学号  ***********   
任课教师 ***    上机时间 2019 11 5 日, 报告完成  2019 11 6
1.实验目的:
做功计算
重物在力F(x)的拖动下,从x的起始点到最后点的移动过程中,力的大小及角度都是变化的,数据如表所示,试完成以下任务
节点序号
1
2
3
4
5
6
7
8
9
x/m
0
5
10
15
20
25
30
35
40
F(x)/kN
0.0
9.0
13.0
14.0
10.5
12.0
5.0
8.0
9.0
角度/rad
0.50
1.40
0.75
0.90
1.30
1.48
1.50
1.10
0.80
任务 2.1:试计算所做的功(数值积分实验)
(1)分别采用梯形公式、辛普森公式和柯特斯公式计算,并进行比较(参考程序2.1a)。
(2)先对数据点进行多项式回归,再用int函数进行积分计算,并比较(参考程序2.1b)。
任务 2.2:试计算力在位移方向的变化率(数值微分实验)
(1)基于给定的数据点,利用三点插值求各点处的导数(参考程序2.2)。
2.计算方法:针对实验任务,结合课堂内容,说明解决方法,如:采用何种理论,列出相关公式,说明计算步骤,写出程序框图等;
任务2.1:数值积分
计算原理:
梯形公式
辛普森公式   
柯特斯公式
n=4,即五个节点时
流程图:
任务2.2:数值微分
计算原理(三点插值):
已知三个节点上的函数值,则
流程图:
3.程序设计:根据前面提到的计算方法编写程序;写出程序代码,并结合计算方法对程序中关键步骤进行必要的文字说明;
代码:
任务2.1:数值积分
%数据输入
clear;
xi=[0 5 10 15 20 25 30 35 40];
a=xi(1);
b=xi(end);
h=b-a;
Fi=[0;9;13;14;10.5;12;5;8;9];
Th=[0.5;1.4;0.75;0.9;1.3;1.48;1.5;1.1;0.8];
%(1)
%求x方向分力大小
for i=1:length(xi)
    P(i)=Fi(i)*cos(Th(i));
end
%梯形公式,两个求积节点
T=[0.5;0.5];%(系数)
I1=h*(T(1)*P(1)+T(2)*P(9));%(梯形公式)
%辛普森公式,三个求积节点
S=[1/6;2/3;1/6];%(辛普森公式系数)
I2=h*(S(1)*P(1)+S(2)*P(5)+S(3)*P(9));%(辛普森公式)
%柯特斯公式,五个求积节点
C=[7/90;16/45;2/15;16/45;7/90];%(柯特斯公式系数)
I4=h*(C(1)*P(1)+C(2)*P(3)+C(3)*P(5)+C(4)*P(7)+C(5)*P(9));%(柯特斯公式)
%显示结果
I=[I1;I2;I4]
%(2)多项式回归,再用int函数积分计算
Ya=polyfit(xi,P,2);%(2次多项式回归)
Yb=polyfit(xi,P,3);%(3次多项式回归)
Yc=polyfit(xi,P,4);%(4次多项式回归)
%构造回归多项式函数形式
syms x
La=Ya(1)*x^2+Ya(2)*x+Ya(3);%(构造2次多项式函数)
Lb=Yb(1)*x^3+Yb(2)*x^2+Yb(3)*x+Yb(4);%(构造3次多项式函数)
Lc=Yc(1)*x^4+Yc(2)*x^3+Yc(3)*x^2+Yc(4)*x+Yc(5);%(构造4次多项式函数)
%积分计算
Ia=int(La,a,b);
Ib=int(Lb,a,b);
Ic=int(Lc,a,b);
%显示计算结果
II=[vpa(Ia);vpa(Ib);vpa(Ic)]%(将分数转化为小数输出
任务2.2:数值微分
%数据输入
clear;
xi=[0 5 10 15 20 25 30 35 40];%(间隔为空格)
a=xi(1);
b=xi(end);
Fi=[0;9;13;14;10.5;12;5;8;9];
Th=[0.5;1.4;0.75;0.9;1.3;1.48;1.5;1.1;0.8];
n=length(xi);
%主体程序
for i=1:n
    yi(i)=Fi(i)*cos(Th(i));
end
R=zeros(n,2);%(建立一个9*2的矩阵)
%矩阵R的第一列记为点的序数
for i=1:n
    R(i,1)=i;
end
%三点插值求导,导数值记入R矩阵的第二列中
matlab求导for i=1:n
    if i==1
        R(i,2)=(-3*yi(i)+4*yi(i+1)-yi(i+2))/(xi(i+2)-xi(i));%(第一个点的导数)
    else if i==n
            R(i,2)=(yi(i-2)-4*yi(i-1)+3*yi(i))/(xi(i)-xi(i-2));%(最后一个点的导数)
        else
            R(i,2)=(yi(i+1)-yi(i-1))/(xi(i+1)-xi(i-1));%(中间点的导数)
        end
    end
end
%输出结果
R
4.结果分析:给出计算结果(可用数值、图表、曲线表示),并进行分析;
任务2.1:数值积分
由输出结果可以看出,梯形公式、辛普森公式、柯特斯公式的计算结果相差较大
而2、3、4次多项式回归后再积分的结果相差较小,其中2、3次回归结果相差几乎可以不计。
任务2.2:数值微分
由微分结果可以看出,力在位移方向上整体呈现先增加再减小再增加的情况,
5.其他:说明实验中发现的问题及办法,个人体会、收获、思考等。
在列公式计算之前,先将系数储存在一个数组中,方便检查程序。
在多项式回归部分,直接输出结果为分数,使用vpa函数转化为小数输出,方便比较。