matlab实验报告.docx

上传人:b****8 文档编号:28357244 上传时间:2023-07-10 格式:DOCX 页数:23 大小:1.66MB
下载 相关 举报
matlab实验报告.docx_第1页
第1页 / 共23页
matlab实验报告.docx_第2页
第2页 / 共23页
matlab实验报告.docx_第3页
第3页 / 共23页
matlab实验报告.docx_第4页
第4页 / 共23页
matlab实验报告.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

matlab实验报告.docx

《matlab实验报告.docx》由会员分享,可在线阅读,更多相关《matlab实验报告.docx(23页珍藏版)》请在冰豆网上搜索。

matlab实验报告.docx

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=

>>

结果分析:

从结果中可以看出,最后一步为我们需要的答案,从这道题我们可以得出循环变量对一道编程的重要性。

 

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 农林牧渔 > 林学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1