《Matlab在物理实验中的应用》实验报告
学生姓名:胡辉 学号:200907302119 专业班级: 通信工程
一、 实验项目名称
驻波的形成
二、 实验目的及意义
1、 学会用matlab做物理实验。
2、 熟悉二维绘图函数命令。
3、 观察和研究驻波的形成及特点。
三、 实验原理
1、驻波的数学表达式
两列相干波,如果振幅相等,传播方向相反,它们的合成波将不是横波而是驻波。设有两列相干横波y1,y2分别向x轴正负方向传播,其表达式如下:
y1 = A1sink(x-vt)
y2 = A2sink(x+vt)
其中|A1|=|A1|,k为常数,根据叠加原理,可得驻波的表达式为:
y= y1+y2= A1sink(x-vt)+ A2sink(x+vt)
=(A1+A2)sinxcos(vt)+(A2-A1)cosxsin(vt)
当A1=A2时
y=(A1+A2)sinxcos(vt)
可以看出驻波是两列横波相乘的结果。
2、驻波的特点
①波腹与波节。
与横波不同的是,在驻波的波线上有些点始终不发生振动,即振幅为零,这些点称为波节;而有些点的振幅始终具有极大值,称之为波腹。横波波线上的质点的振幅是随着波的传播不断变化的。
由上面驻波表达式可知此驻波的振幅为:(A1+A2)|sinx|,
它只与质点的位置x有关,与时间t无关。
②驻波中各质点作同步振动,行波中各质点作波浪式的振动。
驻波中的各质点同时达到各自的最大位移,同时经过各自的平衡位置,因此,我们称驻波各质点作同步振动。
四、 实验内容
1、 在同一窗口绘制y1与y2 的动态波形图,要求y1向x轴正向传播,y2向x轴负向传播,且颜色不同.x考察区间为【0,4】,时间t从t=0到t=10结束,A1=-1,A2=1.k=π,v=1.
2、 导出驻波形成动画,观察研究驻波的振动特点。
3、 在同一窗口中绘制y1,y2,y1与y2,y=y1+y2的动画,各参数要求同1。
五、 实验参考程序
1、两横波Y1与y2程序
% y1与y2
k=pi;v=1;A1=-1;A2=1;
x=0:0.01:4;
t=0:0.01:10;
for i=1:length(t)-1
y1=A1*sin(k*(x-v*t(i)));
y2=A2*sin(k*(x+v*t(i)));
plot(x,y1,'r',x,y2,'b'),axis([-1,5,-1.5,1.5]);
grid on;
xlabel('两列波某一时刻的波形');
pause(0.01);
end
2、驻波
% 驻波
k=pi;v=1;A1=-1;A2=1;
x=0:0.01:4;
t=0:0.01:10;
for i=1:length(t)-1
y1=A1*sin(k*(x-v*t(i)));
y2=A2*sin(k*(x+v*t(i)));
y=y1+y2;
plot(x,y,'r'),axis([-1,5,-2.2,2.2]);
grid on;
xlabel('驻波');
pause(0.01);
end
3、驻波的形成
% 驻波的形成
k=pi;v=1;A1=-1;A2=1;
x=0:0.01:4;
t=0:0.01:10;
for i=1:length(t)-1
y1=A1*sin(k*(x-v*t(i)));
y2=A2*sin(k*(x+v*t(i)));
y=y1+y2;
subplot(2,2,1);
plot(x,y1,'r'),axis([-1,5,-2.2,2.2]);
xlabel('从左到右');
subplot(2,2,2);
plot(x,y2,'b'),axis([-1,5,-2.2,2.2]);
xlabel('从右到左');
subplot(2,2,3);
plot(x,y1,'r',x,y2,'b'),axis([-1,5,-2.2,2.2]);
xlabel(‘两列波某一时刻的波形');
subplot(2,2,4);
plot(x,y,'r'),axis([-1,5,-2.2,2.2]);
xlabel('驻波');
pause(0.01);
end
六、 实验结果
两横波:y1与y2
驻波
驻波的形成
第二篇:Matlab实验三
20##秋20##级《MATLAB程序设计》实验报告
实验三 班级:软件122 姓名:张丽静 学号:122489
一、实验目的
1、掌握建立和执行M文件的方法。
2、掌握选择结构、多分支选择结构程序的编程方法。
3、掌握多种循环结构程序的编程方法。
4、掌握定义函数文件和调用函数文件的方法。
二、实验内容
1、MATLAB M文件的创建与使用。
(1) 建立自己工作目录,如D:\MATLAB。在File菜单中,单击Set Path菜单项,在弹出对话框中建立目标文件夹,:单击Add Folder按钮,将自己的工作目录D:\MATLAB添加到搜索目录之中,按Save按钮保存,如图1。
图1 工作目录设置
(2) 在M文件编辑器中编制命令行文件。在File菜单中,单击New—>M-File,弹出M文件编辑器,如图2:
图2 编辑器
在编辑器中输入如下命令程序:
%求小于20##且为2的整数次幂的正整数。
f(1)=2;
k=1;
while f(k)<1000
f(k+1)=f(k)*2;
k=k+1;
end
f,k
调试后,将其以test1.m形式保存在D:\MATLAB中。
(3) 命令行程序运行。进入命令窗口,键入test1,观察运行结果:
(4) 按上述步骤,在在编辑器中输入如下函数文件:
function f=tt(n)
%求小于任何正整数且为2的整数次幂的正整数。
%c=n(n)
%n可取任意正整数。
%
%20##年8月。
f(1)=2;
k=1;
while f(k)<ceil(n/2) %ceil函数取最近的正整数
f(k+1)=f(k)*2;
k=k+1;
end
f
调试后,将其以test2.m形式保存在D:\MATLAB中。
(5) 进入命令窗口,键入test2(9),观察程序运行结果。
2、编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。
选择一些数据测试编写的函数。
3、编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。其中方均根值(Root Mean Square)的计算公式为:
并用下面数据测试你写的函数:
(1) x=sin(0:0.01:6*pi)
>> x=sin(0:0.01:6*pi);
>> y=text4(x)
(2) x=rand(1,200),得到的x为200个(0,1)之间均匀分布的随机数。
>> x=rand(1,200);
>> y=text4(x)
4、编写一个函数M文件,若给出一个向量,函数返回如下范德蒙矩阵。
例如在命令窗口输入>>v=myvander([2 3 4 5]),得,同时生成一些数据测函数。
5、分别使用while和for编写命令文件,用循环语句编程计算s值:
同时对编写的文件设置断点,观察变量取值的变化情况。
6、数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如:
2®1
3®10®5®16®8®4®2®1
6®3®10®5®16®8®4®2®1
建立命令M文件,完成上述功能,要求显示数字处理过程。
7、设计一个学生身高的管理系统,输出身高的基本分为5等:很高、较高、中等、较矮、矮,其中190cm以上为“很高”,[180cm,190cm)区间为“较高”,[170cm,180cm)为“中等”,[1160cm,170cm)为“较矮”,160cm以下为“矮”,要求分别用if语句和switch语句实现
8、Fibonacci数组的元素满足Fibonacci规则:
ak+2=ak+ak+1,(k=1,2,3,…);且a1= a2=1。
请设计一段程序,求出该数组中第一个大于10000的元素
要求显示的结果为:
i=21
a(i)=10946
或者
a(21)=10946
9、编写一个函数文件and.m,用于求两个输入矩阵的乘积和点乘,然后在命令行窗口中调用该函数,要求:
(1) 当两矩阵是尺寸相同的方阵时,返回它们的乘积和点乘。
(2) 当两矩阵不是尺寸相同的方阵时,则根据它们的尺寸,分别进行乘积或点乘
(3) 当两矩阵的尺寸不能满足乘积或点乘的要求时,则提示“这两个矩阵不能乘”
10、编写一个阶乘函数factorial.m,然后在如下程序中调用该函数,
“分别使用for和while语句找出最小的n值,使得n!>10100,并求出n!”
11、下列程序用来判断一个人的体温是否处于危险状态。调试程序是否正确,如果程序错误指出错误在哪里?并写出正确答案。
temp=input(‘请输入体温: temp = ’);
if temp < 36.5
disp(‘体温偏低’);
elseif temp > 36.5
disp(‘体温正常’);
elseif temp > 38.0
disp(‘体温偏高!’);
elseif temp > 39
disp(‘体温高!!’);
end
12、使用嵌套for循环命令创建下列矩阵:
>> text12();
5 1 0 0 0
1 5 1 0 0
0 1 5 1 0
0 0 1 5 1
0 0 0 1 5
三、源程序和实验结果
1、运行结果如下:
>> test1();
f =
2 4 8 16 32 64 128 256 512 1024
k =
10
>> test2(9);
f =
2 4 8
2、源代码:
function y = text3(x)
%编写一个函数M文件,计算下面函数的值,给出标量x的值,调用该函数后,返回y的值。
if x<=0
y = sin(x);
elseif x>0&x<=3
y=x;
else y=-x+6;
end
end
运行结果如下:
>> y=text3(5)
y =
1
>> y=text3(3.14/2)
y =
1.5700
>> y=text3(-1)
y =
-0.8415
3、源代码:
function y = text4(x)
%编写一个函数M文件,返回向量x中元素的和、平均值、最大值、最小值、均方根值。
y(1)=sum(x);
y(2)=mean(x);
y(3)=max(x);
y(4)=min(x);
y(5)=sqrt(mean(x.^2));
end
运行结果如下:
(1)x=sin(0:0.01:6*pi)
>> x=sin(0:0.01:6*pi);
>> y=text4(x)
y =
-0.0002 -0.0000 1.0000 -1.0000 0.7071
(2)x=rand(1,200),
>> x=rand(1,200);
>> y=text4(x)
y =
99.3810 0.4969 0.9943 0.0099 0.5707
4、源代码:
function y = myvander(x)
%编写一个函数M文件,若给出一个向量 ,函数返回如下范德蒙矩阵
n=length(x);
y = ones(n);
for i = 2:n
y(i,:)=x.^(i-1);
end
end
运行结果如下:
>> v=myvander([2 3 4 5])
v =
1 1 1 1
2 3 4 5
4 9 16 25
8 27 64 125
5、源代码
(1)for循环
function s = text5()
%5/分别使用while和for编写命令文件,用循环语句编程计算s值:
s=0;
for n = 2:1:10
s=s+(n^3-n^2);
end
end
(2)while循环
function s=text5while()
%5、使用while编写命令文件,用循环语句编程计算s
n=2;
s=0;
while n<=10
s=s+(n^3-n^2);
n=n+1;
end
end
运行结果如下
>> text5()
ans =
2640
>> text5while()
ans =
2640
6、源代码:
function y = text6()
%6/任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。
i=2;
n=input('请输入一个正整数');
y(1)=n;
while n~=1
if rem(n,2)==0
n=n/2;
elseif rem(n,2)==1
n=n*3+1;
end
y(i)=n;
i=i+1;
end
end
运行结果如下:
>> y=text6()
请输入一个正整数12
y =
12 6 3 10 5 16 8 4 2 1
7、源代码:
(1)if语句
function []=text7if(x)
if x>=190
disp('很高');
elseif x>=180&x<190
disp('较高');
elseif x>=170&x<180
disp('中等');
elseif x>=160&x<170
disp('较矮');
end
end
(2)switch语句
function []=text7switch(x)
%7/用switch语句实现
switch x
case num2cell(190:300)
disp('很高');
case num2cell(180:190)
disp('较高');
case num2cell(170:180)
disp('中等');
case num2cell(160:170)
disp('较矮');
otherwise
disp('矮');
end
end
运行结果如下:
(1)if语句
>> text7if(175)
中等
>> text7if(190)
很高
(2)switch语句
>> text7switch(175)
中等
>> text7switch(170)
中等
>> text7switch(180)
较高
>> text7switch(160)
较矮
8、源代码:
function [ ] = text8( )
%UNTITLED Summary of this function goes here
% Detailed explanation goes here
a(1)=1;
a(2)=1;
i=2;
while a(i)<10000
i=i+1;
a(i)=a(i-2)+a(i-1);
end
disp(['i=',num2str(i)]);
disp(['a(i)=',num2str(a(i))]);
end
运行结果如下:
>> text8()
i=21
a(i)=10946
9、源代码:
function [] = text9( x,y )
%UNTITLED3 Summary of this function goes here
% Detailed explanation goes here
[a,b]=size(x);
[c,d]=size(y);
if a==b&&c==d&&a==c
z1=x*y;
z2=x.*y;
disp(z1);disp(z2);
elseif b==c
z1=x*y;
disp(z1);
elseif a==c&&b==d
z2=x.*y;
disp(z2);
elseif b~=c
disp('这两个矩阵不能乘');
End
end
运行结果如下:
>> x=[1 2 3];
>> y=[1 2 3 4];
>> text9(x,y)
这两个矩阵不能乘
>> x=[1 2 3;4 5 6];
>> y=[1 2 3;4 5 6];
>> text9(x,y)
1 4 9
16 25 36
>> x=[1 2 3;4 5 6;7 8 9];
>> y=[7 8 9;1 2 3;4 5 6];
>> text9(x,y)
21 27 33
57 72 87
93 117 141
7 16 27
4 10 18
28 40 54
10、源代码:
(1)for循环
function [ ] =factorialfor( )
%UNTITLED4 Summary of this function goes here
% Detailed explanation goes here
s=1;
n=1;
for n=1:1000
s=s*n;
if(s>10100) break;
end
end
disp(n);
end
(2)switch循环
function [ ] = factorialwhile( )
%UNTITLED5 Summary of this function goes here
% Detailed explanation goes here
n=1;
s=1;
while s<=10100
n=n+1;
s=s*n;
end
disp(n);
end
运行结果如下:
>> factorialfor();
8
>> factorialwhile();
8
11、源代码:
function [ ] = text10( )
%UNTITLED6 Summary of this function goes here
% Detailed explanation goes here
temp=input('请输入体温: temp =');
if temp < 36.5
disp('体温偏低');
elseif temp >= 36.5
disp('体温正常');
elseif temp > 38.0
disp('体温偏高!');
elseif temp > 39
disp('体温高!!');
end
End
运行结果如下:
>> text10();
请输入体温: temp =36.5
体温正常
>> text10();
请输入体温: temp =38
体温正常
12、源代码:
function [ ] = test12( )
%UNTITLED8 Summary of this function goes here
% Detailed explanation goes here
a=zeros(5);
for i=1:5
a(i,i)=5;
for j=1:5
if i==j+1||j==i+1
a(i,j) = 1;
end
end
end
disp(a);
end
运行结果如下:
>> text12();
5 1 0 0 0
1 5 1 0 0
0 1 5 1 0
0 0 1 5 1
0 0 0 1 5