哈尔滨工程大学数学上机实验.docx
《哈尔滨工程大学数学上机实验.docx》由会员分享,可在线阅读,更多相关《哈尔滨工程大学数学上机实验.docx(23页珍藏版)》请在冰豆网上搜索。
![哈尔滨工程大学数学上机实验.docx](https://file1.bdocx.com/fileroot1/2023-7/2/7c959e3c-bc0c-4e71-ac01-57ca6ab66cf1/7c959e3c-bc0c-4e71-ac01-57ca6ab66cf11.gif)
哈尔滨工程大学数学上机实验
实验报告
课程名称
数学实验
实验项目
数学实验上机实践
课程学时
48
上机地点
逸夫楼315,数学科学学院实验室
实验类型
综合类
实验学时
24
班级
20161122
学号
2016112201
姓名
陈宇
作业成绩
(共五档)
A
B
C
D
E
实验
完成情况
(按要求完成实验在括号内打√,没有按要求完成实验在括号内打×)
实验一:
函数绘图实验()
实验二:
微积分实验()
实验三:
数值计算实验()
实验四:
怎样计算Pi?
()
实验五:
素数实验()
实验六:
函数迭代实验()
实验七:
最佳分数近似值实验()
实验八:
分形几何实验()
实验九:
混沌实验()
实验十:
概率统计实验()
实验一:
函数绘图实验
1、实验目的
利用数学软件绘制数学函数曲线及曲面,通过实验了解函数图形的绘制方法。
2、实验内容
⑴在同一个图形中,绘制双曲线,以及的双曲线2条渐近线。
⑵在同一个图形中,绘制球面与锥面相交的曲面。
⑶自选题目:
绘制一个或者多个平面图形、空间曲面图形。
3、程序设计及运行结果
(1)>>x=-5:
0.1:
5;
ezplot('x^2-y^2=1');
y1=x;y2=-x;
holdon;
plot(xy1);
holdon;
plot(xy2);
(2)>>x=-5:
0.1:
5;y=x;z=x;
[xyz]=meshgrid(xyz);
f1=x.^2+y.^2+z.^2-1;
f2=x.^2+y.^2-z;
p1=patch(isosurface(xyzf10));
set(p1'FaceColor''m');
p2=patch(isosurface(xyzf20));
set(p2'FaceColor''w');
(3)
>>x=-5:
0.1:
5;y=x;z=x;
[xyz]=meshgrid(xyz);
f1=x.^2+y.^2+z.^2-9;
f2=x.^2+y.^2-2*z;
p1=patch(isosurface(xyzf10));
set(p1'FaceColor''m');
p2=patch(isosurface(xyzf20));
set(p2'FaceColor''w');
4、讨论与分析
在本次试验中初步了解了matlab,学会了一些简单绘图,加深了对函数的理解为以后实验作个铺垫,由浅入深的了解matlab.
实验二:
微积分实验
1、实验目的
熟悉并了解使用数学软件,进行微积分问题计算的相关数学软件命令,让学生通过实验理解微积分,解决微积分计算上的问题。
2、实验内容
⑴求函数的极值。
⑵计算二重积分其中是由所围成的区域。
⑶自选题目:
计算一个或者多个微积分习题。
3、程序设计及运行结果
(1)>>symsxy;y=2*x^3-6*x^2-18*x+7;ezplot(y[-55])
>>solve(diff(yx)x)
ans=
-1
3
>>y=diff(yx2)
y=
12*x-12
>>x=-1;eval(y)
ans=
-24
>>x=3;eval(y)
ans=
24
(2)>>symsxy;ezplot('y^2-x'[05-33]);holdon;ezplot('x-2'[05-33]);holdoff
>>symsxy;[xy]=solve('y^2-x=0''x-2=y')
x=
1
4
y=
-1
2
>>symsxy;dblquad('x*y'04-12)
ans=
12
(3)计算∫x^4/(4+4*x^2))
>>symsx
>>int(x^4/(4+4*x^2))
ans=
atan(x)/4-x/4+x^3/12
4、讨论与分析
通过本次实验,熟悉了MATLAB中求函数的导数、微分等运算的命令,掌握了MATLAB
中求函数的不定积分、定积分的命令
实验三:
数值计算实验
1、实验目的
应用数学软件进行数值计算方面的相关实验,熟悉程序设计方法。
通过求数值积分、数据拟合等问题,并结合函数绘图,去理解数学、应用数学。
2、实验内容
⑴编写使用梯形法计算积分的程序。
⑵下面的实验数据表示函数的关系,例如,数据如下:
{{01.97687}{0.052.17002}{0.12.34158}{0.152.46389}
{0.22.71512}{0.253.06045}{0.33.27829}{0.353.51992}
{0.43.8215}{0.454.2435}{0.54.55188}{0.554.88753}
{0.65.15594}{0.655.698}{0.76.04606}{0.756.42701}
{0.87.00342}{0.857.50192}{0.97.89178}{0.958.49315}{19.0938}}
试确定此函数关系,同时将这些点与所求出的函数曲线绘制在一个图形中。
⑶自选题目:
计算一个数值计算方面的问题。
3、程序设计及运行结果
(1)>>x=0:
0.01:
1;y=sin(sin(x));trapz(xy)
ans=
0.4306
(2)>>x=0:
0.05:
1
x=
1至9列
00.05000.10000.15000.20000.25000.30000.35000.4000
10至18列
0.45000.50000.55000.60000.65000.70000.75000.80000.8500
19至21列
0.90000.95001.0000
>>y=[1.976872.170022.341582.463892.715123.060453.278293.519923.82154.24354.551884.887535.155945.6986.046066.427017.003427.501927.891788.493159.0938];
>>n=3;
>>A=polyfit(xyn);
>>y1=polyval(Ax);
>>plot(xy'k*'xy1'r-');
(3)Sn=∫012*x^n/(x+1)dx其中n等于123
>>S=zeros(n1);
fori=1:
n
S(i)=quadl(@(x)2*x.^i./(x+1)01);
end
S
S=
0.6137
0.3863
0.2804
4、讨论与分析
从实验结果中我们可以得出,在一定的阶次范围内,拟合阶次越高,计算结果越精确。
最小二乘法虽然看起来简单,但它在数值计算及应用上却非常重要,
实验四:
怎样计算Pi?
1、实验目的
通过计算圆周率,熟悉数学软件的程序设计方法。
2、实验内容
寻找一种及一种以上的方法计算π,请尽量不使用教材《数学实验》中“实验二怎样计算π”中所使用过的方法,参见教材第14页---19页。
3、程序设计及运行结果
>>nd=100;
digits(nd);
nk=14;
a2=1;
k=0;
s0=1103;
fork=1:
nk
n=4*k;
a1=1;
forj=1:
n
a1=vpa(a1*j);
end
a2=vpa(k*a2);
k4=vpa(4*k);
s0=vpa(s0+a1*(1103+26390*k)/(a2^4*396^k4));
end
p=vpa(1/2/sqrt
(2)/s0*9801);
a=vpa(pi100)
a=
3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117068
4、讨论与分析
收敛速度较快,计算结果与pi真实值的近似程度很客观。
实验五:
素数实验
1、实验目的
通过实验理解素数理论,找出素数理论的某些规律。
2、实验内容
本实验是教材《数学实验》中“实验五素数”的练习12,参见教材第43页,原题如下:
对,计算,它们能否都给出素数?
在10000以内的素数中,由公式给出的素数占多少?
类似地,对公式以及公式做同样的判别,你自己能否给出一个或者多个类似的公式?
3、程序设计及运行结果
(1)对的计算
>>f=@(x)x^2+x+41;
a=0;b=0;c=0;k=1;m=1;
while(k<10000)
ifisprime(k)
a=a+1;
end
k=k+1;
end
while(m<100)
ifisprime(f(m))
b=b+1;
elsec=1;
end
m=m+1;
end
ifc==0
disp('Yes!
Allf(n)isprime\n')
elsedisp('*No!
Somef(n)isnotprime?
?
')
end
disp('theprimeratef(n)providingis')
b/a
a
b
*No!
Somef(n)isnotprime?
?
theprimeratef(n)providingis
ans=
0.0692
a=
1229
b=
85
(2)对计算
>>f=@(x)x^2-79*x+1601
a=0;b=0;c=0;k=1;m=1;
while(k<10000)
ifisprime(k)
a=a+1;
end
k=k+1;
end
while(m<100)
ifisprime(f(m))
b=b+1;
elsec=1;
end
m=m+1;
end
ifc==0
disp('Yes!
Allf(n)isprime\n')
elsedisp('*No!
Somef(n)isnotprime?
?
')
end
disp('theprimeratef(n)providingis')
b/a
a
b
f=
@(x)x^2-79*x+1601
*No!
Somef(n)isnotprime?
?
theprimeratef(n)providingis
ans=
0.0765
a=
1229
b=
94
(3)对计算
>>f=@(x)6*x^2+6*x+31;
a=0;b=0;c=0;k=1;m=1;
while(k<10000)
ifisprime(k)
a=a+1;
end
k=k+1;
end
while(m<100)
ifisprime(f(m))
b=b+1;
elsec=1;
end
m=m+1;
end
ifc==0
disp('Yes!
Allf(n)isprime\n')
elsedisp('*No!
Somef(n)isnotprime?
?
')
end
disp('theprimeratef(n)providingis')
b/a
a
b
*No!
Somef(n)isnotprime?
?
theprimeratef(n)providingis
ans=
0.0602
a=
1229
b=
74
(4)在10000以内的素数中,由公式3n^2+2n+1给出的素数占多少?
>>f=@(x)3*x^2+2*x+1
a=0;b=0;c=0;k=1;m=1;
while(k<10000)
ifisprime(k)
a=a+1;
end
k=k+1;
end
while(m<100)
ifisprime(f(m))
b=b+1;
elsec=1;
end
m=m+1;
end
ifc==0
disp('Yes!
Allf(n)isprime\n')
elsedisp('*No!
Somef(n)isnotprime?
?
')
end
disp('theprimeratef(n)providingis')
b/a
a
b
f=
@(x)3*x^2+2*x+1
*No!
Somef(n)isnotprime?
?
theprimeratef(n)providingis
ans=
0.0122
a=
1229
b=
15
4、讨论与分析
本实验运用更多的就是循环语句,循环方法有for语句和while语句,对本实验来说都可以达到结果。
实验六:
函数迭代实验
1、实验目的
通过实验,了解迭代及其相关性质,并利用计算机进行实现函数迭代算法。
2、实验内容
本实验是教材《数学实验》中“实验九迭代
(一)---方程求解”的练习5,参见教材第85页,原题如下:
选用几种迭代格式求的近似值,并同改进的迭代格式做比较。
3、程序设计及运行结果
>>x0=1;err=1;m=1;
whileerr>1e-100&&m<10000
x1=x0-(x0^3-2)*eps/(((x0+eps)^3-2)-(x0^3-2));
err=abs((x1-x0)/x0);
x0=x1;
m=m+1;
end
牛顿迭代
>>symsx
f=x^3-2;
df=diff(fx);
eps=1e-6;
x0=10;
cnt=0;
MAXCNT=200;%最大循环次数
whilecntx1=x0-subs(fxx0)/subs(dfxx0);%去掉这个分号可以看到迭代过程.
if(abs(x1-x0)break;
end
x0=x1;
cnt=cnt+1;
end
ifcnt==MAXCNT
disp'不收敛'
else
vpa(x18)
end
ans=
1.259921
4、讨论与分析
二分法计算对函数的要求是比较宽松的,而且方法从编程思想到实现都比较都比较容易,但是二分法收敛速度不是太快.对同一函数,运用不同迭代方法求解,所得到的结果是有差别的,但大体上结果是接近的,并且迭代次数越多结果越相近。
实验七:
最佳分数近似值实验
1、实验目的
通过对无理数的最佳分数逼近方法的试验,理解近似计算的方法。
2、实验内容
本实验是教材《数学实验》中“实验三最佳分数近似值”的练习3,参见教材第28页。
利用连分数展开方法求出的分母在小于等于1000以内的所有既约分数近似值,并给出这些近似值中的最佳近似值。
3、程序设计及运行结果
function
L=sssm(n)
q
(1)=1;
j=1;
fori=1:
n;
q(i+1)=q(i)+1;
p(i)=round(q(i)*pi);
p(i+1)=round(q(i+1)*pi);
ifabs(pi-p(i)/q(i))>=abs(pi-p(i+1)/q(i+1));
L(j)=p(i+1)/q(i+1);
j=j+1;
end
end
formatrat
p/q
运行结果:
>>sssm(1000)
>>L=sssm(1000)L=
Columns1through7
3.00003.00003.25003.18183.14753.14713.1467
Columns8through14
3.14633.14613.14583.14563.14553.14373.1436
Columns15through21
3.14363.14363.14363.14353.14353.14353.1429
Columns22through28
3.14293.14293.14293.14293.14293.14293.1429
Columns29through35
3.14253.14253.14253.14253.14253.14253.1425Columns36through42
3.14253.14233.14233.14233.14233.14233.1423
Columns43through49
3.14233.14233.14223.14223.14223.14223.1422
Columns50through56
3.14223.14223.14223.14213.14213.14213.1421
Columns57through63
3.14213.14213.14213.14213.14203.14203.1420
Columns64through70
3.14203.14203.14213.14213.14213.14203.1420
Columns71through74
3.14203.14203.14203.1420
4、讨论与分析
通过上述实验,我们也可将误差小、分母小这两个标准综合起来Pi的连分数的展开:
实验结果接近,但还存在误差
上述近似值中最佳逼近至为3.1420.
实验八:
分形几何实验
1、实验目的
通过实验了解分形及分形图像的特点、分形图像的绘制方法。
2、实验内容
本实验是教材《数学实验》中“实验十二迭代
(二)---分形”,参见教材第117-136页。
⑴利用计算机绘出Sierpinski三角形。
⑵自选题目:
绘制其它分形图形。
3、程序设计及运行结果
(1)>>a=1;b=0.5;c=1;
k=7;
A=zeros(23^(k+1));
A(:
1:
3)=[0ab;00c];
forn=1:
k
B=1/2*A;
A(:
1:
3^n)=B(:
1:
3^n);
A(:
3^n+1:
2*3^n)=B(:
1:
3^n)+1/2*[a;0]*ones(13^n);
A(:
2*3^n+1:
3^(n+1))=B(:
1:
3^n)+1/2*[b;c]*ones(13^n);
end
fori=1:
3^k
patch(A(13*i-2:
3*i)A(23*i-2:
3*i)'r');
end
(2)functiontree(nab)
%tree(8pi/8pi/8)n为分形树迭代次数
%ab为分枝与竖直方向夹角
%x1y1x2y2为初始线段两端点坐标nn为迭代次数
n=8;a=pi/6;b=pi/6;
x1=0;y1=0;
x2=0;y2=1;
plot([x1x2][y1y2])
holdon
[XY]=tree1(x1y1x2y2ab);
holdon
W=tree2(XY);
w1=W(:
1:
4);
w2=W(:
5:
8);
%w为2^k*4维矩阵存储第k次迭代产生的分枝两端点的坐标
%w的第i(i=12…2^k)行数字对应第i个分枝两端点的坐标
w=[w1;w2];
fork=1:
n
fori=1:
2^k
[XY]=tree1(w(i1)w(i2)w(i3)w(i4)ab);
W(i:
)=tree2(XY);
end
w1=W(:
1:
4);
w2=W(:
5:
8);
w=[w1;w2];
end
%由每个分枝两端点坐标(x1y1)(x2y2)产生两新点的坐标(x3y3)(x4y4)画两分枝图形并把%(x2y2)连同新点横、纵坐标分别存储在数组XY中
function[XY]=tree1(x1y1x2y2ab)
L=sqrt((x2-x1)^2+(y2-y1)^2);
if(x2-x1)==0
a=pi/2;
elseif(x2-x1)<0
a=pi+atan((y2-y1)/(x2-x1));
else
a=atan((y2-y1)/(x2-x1));
end
end
x3=x2+L*2/3*cos(a+b);
y3=y2+L*2/3*sin(a+b);
x4=x2+L*2/3*cos(a-b);
y4=y2+L*2/3*sin(a-b);
a=[x3x2x4];
b=[y3y2y4];
plot(ab)
axisequal
holdon
X=[x2x3x4];
Y=[y2y3y4];
%把由函数tree1生成的XY顺次划分为两组分别对应两分枝两个端点的坐标并存储在一维%数组w中
functionw=tree2(XY)
a1=X
(1);b1=Y
(1);
a2=X
(2);b2=Y
(2);
a3=X
(1);b3=Y
(1);
a4=X(3);b4=Y(3);
w=[a1b1a2b2a3b3a4b4];
4、讨论与分析
通过本次的实验,我更了解了几何分形图以及用matlab软件产生几何分形图的方法、程序结构。
总的来说,通过本次实验,学习到了matlab软件的一种新的用法,对自己的数学实验能力又提升了不少
实验九:
混沌实验
1、实验目的
通过实验,观察混沌现象,进而发现隐藏在混沌后面的数学规律。
2、实验内容
本实验是教材《数学实验》中“实验十三迭代(三)---混沌”的练习7,参见教材第139页,原题如下:
观察Feigenbaum图。
在它的左部有一条曲线,这代表迭代具有唯一的吸引不动点。
⑴从某一点开始,该条曲线分成两条曲线,这说明了迭代的什么性质?
迭代的点列是如何运动的?
⑵再在下一个分支点,曲线分成几个分支?
这说明迭代的什么性质?
相应的迭代点列是如何运动的?
⑶上述分支过程是否一直进行下去?
是否存在一个极限分支?
在极限分支点之后,Feigenbaum图是否显得很混乱?
⑷估计出等的值,再计算等,它们是否比较接近?
由此猜测数列是否会收敛?
3、程序设计及运行结果
clear;clf;
holdon
axis([05-55]);
grid
fora=0:
0.005:
5
x=[0.2];
fori=2:
150
x(i)=a*sin(pi*x(i-1));
end
pause(0.1)
fori=101:
150
plot(ax(i)'k.');
end
end
4、讨论与分析
混沌系统普遍对初值高度敏感,其行为不可预测,呈现随机性
实验十:
概率统计实验
1、实验目的
通过实验,让学生利用计算机观察随机现象及其相应的性质、规律。
2、实验内容
本实验是教材《数学实验》中“实验六概率”的练习6,参见教材第56-57页,原题如下:
设T是在区间[01]内均匀分布的随机变量。
让T连取n个值,则这n个值的