matlab实验报告.docx
- 文档编号:16100247
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:23
- 大小:1.66MB
matlab实验报告.docx
《matlab实验报告.docx》由会员分享,可在线阅读,更多相关《matlab实验报告.docx(23页珍藏版)》请在冰点文库上搜索。
matlab实验报告
MATLAB
数学实验报告
指导老师:
班级:
小组成员:
时间:
201_/_/_
Matlab第二次实验报告
小组成员:
1题目:
实验四,MATLAB选择结构与应用实验
目的:
掌握if选择结构与程序流程控制,重点掌握break,return,pause语句的应用。
问题:
问题1:
验证“哥德巴赫猜想”,即:
任何一个正偶数(n>=6)均可表示为两个质数的和。
要求编制一个函数程序,输入一个正偶数,返回两个质数的和。
问题分析:
由用户输入一个大于6的偶数,由input语句实现。
由if判断语句判断是否输入的数据符合条件。
再引用质数判断函数来找出两个质数,再向屏幕输出两个质数即可。
编程:
function[z1,z2]=gede(n);
n=input('pleaseinputn')
ifn<6
disp('dataerror');
return
end
ifmod(n,2)==0
fori=2:
n/2
k=0;
forj=2:
sqrt(i)
ifmod(i,j)==0
k=k+1;
end
end
forj=2:
sqrt(n-i)
ifmod(n-i,j)==0
k=k+1;
end
end
ifk==0
fprintf('twonumbersare')
fprintf('%.0f,%.0f',i,n-i)
break
end
end
end
结果分析:
如上图,用户输入了大于6的偶数返回两个质数5和31,通过不断试验,即可验证哥德巴赫猜想。
纪录:
if判断语句与for循环语句联合嵌套使用可使程序结构更加明晰,更快的解决问题。
2题目:
实验四,MATLAB选择结构与应用实验
目的:
用matlab联系生活实际,解决一些生活中常见的实际问题。
问题:
问题四:
在一边长为1的四个顶点上各站有一个人,他们同时开始以等速顺时针沿跑道追逐下一人,在追击过程中,每个人时刻对准目标,试模拟追击路线,并讨论。
(1)四个人能否追到一起
(2)若能追到一起,每个人跑过多少路程
(3)追到一起所需要的时间(设速率为1)
问题分析:
由正方形的几何对称性和四个人运动的对称性可知,只需研究2个人的运动即可解决此问题。
编程:
holdon
axis([0101]);
a=[0,0];
b=[0,1];
k=0;
dt=;
v=1;
whilek<10000
d=norm(a-b);
k=k+1;
plot(a
(1),a
(2),'r.','markersize',15);
plot(b
(1),b
(2),'b.','markersize',15);
fprintf('k=%.0fb(%.3f,%.3f)a(%.3f,%.3f)d=%.3f\n',k,b
(1),b
(2),a
(1),a
(2),d)
a=a+[(b
(1)-a
(1))/d*dt,(b
(2)-a
(2))/d*dt];
b=b+[(b
(2)-a
(2))/d*dt,-(b
(1)-a
(1))/d*dt];
ifd<=
break
end
end
fprintf('每个人所走的路程为:
%.3f',k*v*dt)
fprintf('追到一起所需要的时间为%.3f',k*dt)
结果分析:
上图为2人的模拟运动路线,有对称性可解决所提问题。
-
上图为运算过程和运算结果。
四个人可以追到一起,走过的路程为,时间也为.
纪录:
此题利用正方形和运动的对称性可以简便运算。
3题目:
实验八,河流流量估计与数据插值
目的:
由一些测量数据经过计算处理,解决一些生活实际问题。
问题:
实验八上机练习题第三题:
瑞士地图如图所示,为了算出他的国土面积,做以下测量,由西向东为x轴,由南向北为y轴,从西边界点到东边界点划分为若干区域,测出每个分点的南北边界点y1和y2,得到以下数据(mm)。
已知比例尺1:
2222,计算瑞士国土面积,精确值为41288平方公里。
测量数据如下:
x=[344856619196101104106118142146150157158]
;
y1=[444547505038303034363441454643373328326555545250666668];
y2=[4459707293100110110110117118116118118121124121121121122116838182868568];
问题分析:
先由题目给定的数据作出瑞士地图的草图,再根据梯形法,使用trapz语句,来估算瑞士国土的面积。
编程:
x=[344856619196101104106118142146150157158];
y1=[444547505038303034363441454643373328326555545250666668];
y2=[4459707293100110110110117118116118118121124121121121122116838182868568];
plot(x,y1,'r.','markersize',15);
plot(x,y2,'r.','markersize',15);
axis([01600135])
grid;holdon
t=7:
158;
u1=spline(x,y1,t);
u2=spline(x,y2,t);
plot(t,u1)
plot(t,u2)
s1=trapz(t,u1);
s2=trapz(t,u2);
s=(s2-s1)*2222*22222/;
fprintf('S=%.0f',s)
结果分析:
上图为由所给数据绘制出的瑞士地图。
上图为运算结果,计算出瑞士的国土面积为42472平方公里,与准确值41288较为接近。
纪录:
使用梯形分割的方法,trapz语句可以方便计算不规则图形面积,但存在一定误差。
4题目:
实验七:
圆周率的计算与数值积分
目的:
将数值积分最基本的原理应用于matlab之中,解决一些与积分有关的问题。
问题:
实验七上机练习题第一题:
(排洪量)某河床的横断面如图所示,为了计算最大排洪量,需要计算其断面积,试根据所给数据(m)用梯形法计算其断面积。
问题分析:
河床断面可近似分割成若干曲边梯形,近似处理把它们当做梯形来计算面积可使问题得到简化。
编程:
clc;clear;
x=[0410121522283440];
y=[013689530];
y1=10-y;
plot(x,y1,'k.','markersize',15);
axis([040010]);
grid;
holdon
t=0:
40;
u=spline(x,y1,t);
plot(t,u);
s=40*10-trapz(t,u);
fprintf('s=%.2f\n',s)
结果分析:
上图为河床的断面图。
上图为计算结果面积约为180.70平方米。
纪录:
使用梯形法计算不规则图形面积十分简便易行。
5题目:
实验七:
圆周率的计算与数值积分
目的:
使用matlab计算解决一些有关积分的问题。
问题:
实验七上机练习题第三题:
从地面发射一枚火箭,在最初100秒内记录其加速度如下,试求火箭在100秒时的速度。
T(s)=[0102030405060708090100];
A(m/s*s)=[];
问题分析:
加速度为速度的微分,已知微分求积分,类似于面积问题,可使用梯形法来计算。
编程:
clc;clear;
x=[0102030405060708090100];
y=[];
plot(x,y,'k.','markersize',15);
axis([01002060]);
grid;
holdon
s=0:
10:
100;
z=spline(x,y,s);
plot(s,y);
v=trapz(x,y);
fprintf('v=%.2f\n',v)
结果分析:
上图为加速度变化图。
上图为计算结果,求得火箭在100秒时速度约为4168.95m/s。
纪录:
梯形法可以推广解决许多已知微分求积分的其他问题。
6题目:
实验七:
圆周率的计算与数值积分
目的:
计算曲线弧长闭曲线周长可使用微元法,ds=sqrt(dx^2+dy^2),在转化微积分问题,累加即可得到结果。
问题:
实验七上机练习题第三题:
计算椭圆想x^2/4+y^2=1的周长,使结果具有五位有效数字。
问题分析:
编程:
s=0;
dx=;
forx=0:
:
dy=((x+.^2)/4)-((x).^2)/4);
ds=sqrt(dx.^2+dy.^2);
s=s+ds;
end
s=4*s;
fprintf('thelengthis')
fprintf('%.4f',s)
结果分析:
上图为计算结果,给定椭圆的周长约为(五位有效数字)
纪录:
计算不规则曲线弧长,可使用微元法,划分为若干小的看做直角三角形,利用勾股定理解决。
7题目:
实验九人口预测与数据拟合
目的:
掌握一些曲线拟合的方法,了解曲线拟合常用函数。
问题:
用电压U=10v的电池给电容器充电,t时刻的电压V(t)=U-(U-V0)exp(-t/τ),其中V0是电容器的初始电压,τ是充电常数,由所给数据确定V0和τ。
t=[1234579];
V=[];
问题分析:
题中已给出函数关系式,为指数函数曲线拟合,将所给函数式整理可得标准的exp形函数曲线,从而便于解决。
编程:
t=[1234579];
V=[];
plot(t,V,'k.','markersize',20);
axis([01004]);
grid;holdon
pause
n=8;
a=sum(t(1:
n));
b=sum(t(1:
n).*t(1:
n));
c=sum(log(V(1:
n)));
d=sum(t(1:
n).*log(V(1:
n)));
A=[na;ab];
B=[c;d];
p=inv(A)*B
x=0:
10;
y=exp(p
(1)+p
(2)*x);
plot(x,y,'r-','linewidth',2)
结果分析:
上图为电压与时间关系图。
上图为计算结果,即U-V0=,所以V0=,-1/τ=,所以τ=
纪录:
曲线拟合的一个重难点是选择合适的曲线函数,才能提高拟合度。
8题目:
实验七圆周率的计算与数值积分
目的:
拓展圆周率的各种计算方法,掌握其他数值的近似计算方法。
问题:
实验七练习2:
计算ln2的近似值(精确到10的-5次方)
(1)利用级数展开的方法来计算
(2)利用梯形法计算
(3)利用抛物线法
问题分析:
级数展开,梯形法,抛物线法是常见的近似运算方法。
编程:
(1)级数展开的方法
clc;clear;
n=0;
r=1;
p=0;
k=-1;
whiler>=
n=n+1;
k=k*(-1);
p1=p+k/n;
r=abs(p1-p);
fprintf('n=%.0f,p=%.10f\n',n,p1);
p=p1;
end
(2)梯形法
clc;clear;
f=inline('1./x');
x=1:
:
2;
y=f(x);
p=trapz(x,y);
fprintf('p=%.6f\n',p)
(3)抛物线法
clc;clear;
f=inline('1./x');
a=1;b=2;n=1;
z=quad(f,a,b);
fprintf('z=%.10f\n',z)
结果分析:
(1)级数展开的方法
(2)梯形法
(3)抛物线法
纪录:
级数展开法,梯形法,抛物线法,计算近似值时应合理利用。
梯形法和抛物线法不易提高精确度,级数展开法可以提高精确度。
9题目:
实验八河流流量估计与数据插值
目的:
掌握求插值多项式的方法,并利用此计算近似值。
问题:
已知y=f(x)的函数表如下
x=[];
y=[];
求四次拉格朗日插值多项式,并由此求f()
问题分析:
利用所给函数表可计算拉格朗日插值多项式。
编程:
functionp=lagrange(x,y)
L=length(x);
a=ones(L);
forj=2:
L
a(:
j)=a(:
j-1).*x';
end
x=inv(a)*y';
fori=1:
L
p(i)=x(L-i+1);
end
x=[];
y=[];
plot(x,y,'k.','markersize',15)
axis([0202])
grid;
holdon;
p=lagrange(x,y);
t=0:
:
;
u=polyval(p,t);
plot(t,u,'r-')
a=polyval(p,
结果分析:
上图为所求结果,估算值和插值多项式。
纪录:
插值多项式是一项十分实用的方法。
10题目:
求正整数n的阶乘:
p=1*2*3*…*n=n!
,并求出n=20时的结果
目的:
练习使用循环变量解决数学问题
问题:
对程序:
Clear;clc;
n=20;
p=1;
fori=1:
n
p=p*i;
fprintf(’i=%.0f,p=%.0f\n’,i,p)
end
进行修改使它:
利用input命令对n惊醒赋值
问题分析:
题中给出程序中“n=20”修改,使用input命令;
讲题中的输出命令放出循环之外。
编程:
clear;clc;
n=input('n=');
p=1;
fori=1:
n
p=p*i;
end
fprintf('i=%.0f,p=%.0f\n',i,p)
结果:
n=20
i=20,p=000
>>
结果分析:
使用input命令可以实现人机对话,使用户自由赋值;输出语句在程序中的位置对输出的结果有很大的影响;在循环内部可以在计算过城中不断输出结果;在循环之外则可以控制只输出最后结果。
11题目:
对于数列{√2},n=1,2,…,求当其前n项和不超过1000时的n的值及合的大小。
目的:
运用条件循环解决文帝个项数的循环程序求解,
问题:
对程序:
clear;clc;
n=0;
s=0;
whiles<=1000
n=n+1;
s=s+sqrt(n);
fprintf(’n=%.0f,s=%.4f\n’,n,s)
end
问题分析:
题中所给程序中的限制变量为上次循环之后的s,导致s超过上限后仍有一次的循环,若把循环变量改为这次的s,则可以避免这种情况的发生。
编程:
clear;clc;
n=0;
s=0;
whiles+sqrt(n)<=1000
n=n+1;
s=s+sqrt(n)
fprintf('n=%.0f,s=%.4f\n',n,s)
end
结果:
……
s=
n=128,s=
s=
n=129,s=
s=
n=130,s=
>>
结果分析:
从结果中可以看出,最后一步为我们需要的答案,从这道题我们可以得出循环变量对一道编程的重要性。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- matlab 实验 报告