文档库 最新最全的文档下载
当前位置:文档库 › MatLab讲义

MatLab讲义

MatLab讲义
MatLab讲义

2011年数学中国国赛培训讲座 Matlab的基础及数学建模中的应用

周吕文:zhou.lv.wen@https://www.wendangku.net/doc/274866415.html,

大连大学数学建模工作室&中国科学院力学研究所

2011年7月

第一部分 MatLab基础

1 简单介绍

MATLAB是Matrix Laboratory“矩阵实验室”的缩写。MatLab语言是由美国的Clever Moler博士于1980年开发的,初衷是为解决“线性代数”课程的矩阵运算问题。1984年由美国 MathWorks公司推向市场,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。

在数学建模竞赛中,由于只有短短的三到四天,而论文的评判不仅注重计算的结果更注重模型的创造性等很多方面,因此比赛中把大量的时间花费在编写和调试程序上只会喧宾夺主,是很不值得的。使用MATLAB 可以很大程度上的方便计算、节省时间,使我们将精力更多的放在模型的完善上,所以是较为理想的。

这里快速的介绍一下MATLAB与数学建模相关的基础知识,并列举一些简单的例子,很多例子都是源于国内外的数学建模赛题。希望能帮助同学们在短时间内方便、快捷的使用MATLAB 解决数学建模中的问题。当然要想学好MatLab更多的依赖自主学习,一个很好的学习MatLab的方法是查看MatLab的帮助文档:

z如果你知道一个函数名,想了解它的用法,你可以用'help'命令得到它的帮助文档:>>help functionname

z如果你了解含某个关键词的函数,你可以用'lookfor'命令得到相关的函数:

2 基本命令与函数

基本运算

z变量的赋值

实数赋值>> x=5;

复数赋值>> x=5+10j; (或>>x=5+10i)

z向量的一般值方法

行向量赋值:>>x=[1 2 3]; (或x=[1, 2 ,3])

列向量赋值:>>y=[1;2;3];

矩阵的赋值:>>x=[1 2 3; 4 5 6; 7 8 9];

z常用矩阵(zeros ones eye)

n行m列0矩阵:>>x=zeros(n,m);

n行m列1矩阵:>>x=ones(n,m);

n 阶的单位阵:>>y=eye(n);

z矩阵行列操作

>> A=[1 2 3;4 5 6;7 8 9]

A=

1 2 3

4 5 6

7 8 9

>>x=A(1,3) %取第一行的第三列元素

x=

3

>>y=A(2, :) %取第二行元素

y=

4 5 6

>>z=A(1:2,1:3)%取一到二行,一到三列的元素

Z=

1 2 3

4 5 6

z矩阵运算(+ - * / \ ^ / ‘)

z数组运算(点运算)

>>A=[1 2; 3 4]

A=

1 2

3 4

>>B=A*A

B=

7 10

15 22

>>C=A.*A

C=

1 4

9 16

常用数学函数

sin sum limit asin sort int

solve exp round

log fix dsolve log10 ceil diff sqrt floor det abs rand

sign flipud/fliplr

固定变量

pi

i,j

inf –inf

NaN

ans

自定义函数

z M文件文件名一律以字母打头

z函数名不能与系统函数重名

function [output 1, …] = functionname(input1, …)

% comment of this function

MatLab command 1;

MatLab command 2;

… …

[例2.1]做一个将角度转为孤度的函数

function

% DEG2RAD convert degrees to radians

%

% USAGE: Radians = deg2rad(Degrees)

% Degrees =[degrees, minutes, seconds]

%

% zhou lvwen. 2011/7/25

Radians = pi * Degrees * [1/180; 1/180/60; 1/180/60/60];

[例2.2]灰色G(1,1)模型

function [q,e,E] = GM(Q,t)

% E = contrary error

% e = absolute error

Q1 = cumsum(Q); % 一阶累加

B1 = Q1';B1(1)=[];B2=Q1';B2(end)=[];

B=[-0.5*(B1+B2) ones(length(B1),1)]; % 构造矩阵B

Xn=Q';Xn(1)=[]; % 构造矩阵Xn

c=(B'*B)^-1*B'*Xn;a=c(1);u=c(2) % 计算a和u

q1=(Q(1)-u/a)*exp(-a.*t)+u/a; % 计算出ql

q2=diff(q1);q=[q1(1) q2]; % 还原成q

e=Q-q(1:length(Q)); % 算绝对误差

E=e./Q; % 算相对误差

2 流程控制语句

z for end

z if else end / if elseif else end

[例2.3]计算10以内的奇数和

% Sum of the odd numbers between 1 and 10

Sum = 0;

for i = 1:10

if mod(i,2)

Sum =Sum + i;

end

end

Sum

3 二/三维作图

简单作图

z Plot

z Xlabel ylabel xtick ytick xticklabel yticklabel z text legend

z axis ylim ylim

z grid on/off grid minor

z subplot

z linewidth makersize

作图函数

fplot polar bar

pie contour quiver image plot3

meshgrid

mesh surf contour3

meshc surfc

[例3.2]用plot3作三维螺旋线x = -pi:0.05:pi;

y1 = sin(x);

y2 = cos(x);

plot(x,y1,'-bs',x,y2,'-m^');

title('Helix');

xlabel('x');

ylabel('y');

text(0,0,'zero');

legend('sin','cos')

grid on

第二部分例题精讲

1人口问题

表1是1790年至1900年美国人口数(单位:百万),请用指数增长模型拟合美国人口变化。

表1. 1790 年至1900年美国人口数(单位:百万)

1790 3.9 1840 17.1 1890 62.9

1800 5.3 1850 23.2 1900 76.0

1810 7.2 1860 31.4

1820 9.6 1870 38.6

1830 12.9 1880 50.2

参考程序:prediction_of_population.m

% translate the qustion into polynomial fit,then we can use the

% polyfit fuction

% P = x0 * exp(r*t) => lnP = lnx0 + r * t

% \|/ \|/ \|/ \|/

% Y = a2 + a1* x

t=1790:10:1900;

population=[3.9 5.3 7.2 9.6 12.9 17.1 23.2 31.4 38.6 50.2 62.9 76.0];

Y=log(population);

X=t;

a=polyfit(X,Y,1);

x0=exp(a(2))

r=a(1)

ti=1790:1950;

poi=x0*exp(r*ti);

plot(t,population,'k.', ti,poi,'b', 'markersize', 18,'linewidth',2);

legend('Actual data', 'Fit result')

xlabel('Year');

ylabel('Population')

2图像处理

在Matlab 中,图可以表示成矩阵,矩阵也可能表示成图。对图像的处理就可转化为对矩阵的处理(见附件1)。设计算法求出任一矩阵的边界矩阵(算法应具有一般性)。边界矩阵是要找出图形的边界。下面为边界矩阵的定义:

B B 的边界矩阵

图1边界矩阵的定义

参考程序:Boundary.m, main_of_boundary.m function boundary=Boundary(M) [I,J]=size(M); i=2:I-1; j=2:J-1;

SUM=M(i-1,j)+M(i+1,j)+M(i,j-1)+M(i,j+1);%Sum of four neighbours m=M(i,j);

m(SUM==4)=0; % if all of (i,j)'s four neighbours==1 then m(i,j)=0 M(i,j)=m; boundary=M;

'A.txt'

boundary=Boundary(M); subplot(1,2,1)

image(M*255) % show the M matrix subplot(1,2,2)

image(boundary*255) % show the boundary matrix

00 1 0 00 1 1 1 01 1 1 1 1

1 1 1 1 0

0 1 1 0 0

0010001010100011001001100

3矩阵构造

用元胞自动机模型研究收费站设置多少收费亭最佳时,需要根据给定的高速公路(车道数L),和收费亭数目B以及与收费站结构有关的参数生成相应的格子(矩阵).每个格子可能的状态有三种:用1表示车辆,0表示空位,-888表示不可进入区域.

图2 收费站的离散化

参考程序:create_plaza.m

function

plaza = zeros(plazalength,B+2); % 1 = car, 0 = empty, -888 = forbid

v = zeros(plazalength,B+2); % velocity of automata (i,j), if it exists

time = zeros(plazalength,B+2); % cost time of automata (i,j) if it exists

plaza(1:plazalength,[1,2+B]) = -888;

%left: angle of width decline for boundaries

toptheta = 1.3;

bottomtheta = 1.2;

for col = 2:ceil(B/2-L/2) + 1

for row = 1:(plazalength-1)/2 - floor(tan(toptheta) * (col-1))

plaza(row, col) =-888;

end

for row = 1:(plazalength-1)/2 - floor(tan(bottomtheta) * (col-1))

plaza(plazalength+1-row, col) =-888;

end

end

fac = ceil(B/2-L/2)/floor(B/2-L/2);

%right: angle of width decline for boundaries

toptheta = atan(fac*tan(toptheta));

bottomtheta = atan(fac*tan(bottomtheta));

for

for row = 1:(plazalength-1)/2 - floor(tan(toptheta) * (col-1))

plaza(row,B+3-col) =-888;

end

for row = 1:(plazalength-1)/2 - floor(tan(bottomtheta) * (col-1))

plaza(plazalength+1-row,B+3-col) = -888;

end

end

%% Alternative method %%

% topgap = 5;

% bottomgap = 1;

% plaza = zeros(plazalength,B+2);

% plaza(1:plazalength,[1,2+B]) = -888;

% if mod(B-L,2)==0

% for col = 2:B/2 - L/2 + 1

% for row = 1:(plazalength-1)/2 - topgap * (col-1)

% plaza(row,[col, B+3-col]) = -888;

% end

% for row =(plazalength+3)/2 + bottomgap*(col-1):plazalength % plaza(row,[col, B+3-col]) = -888;

% end

% end

% else

% plaza(1:plazalength, B+3) =-888;

% for col = 2:(B+1)/2 - L/2 + 1

% for row = 1:(plazalength-1)/2 - topgap * (col-1)

% plaza(row, [col, B+4-col]) = -888;

% end

% for row =(plazalength+3)/2 + bottomgap*(col-1):plazalength % plaza(row, [col, B+4-col]) = -888;

% end

% end

% end

%%

4地面搜索

地震后,有一块km 5050×的地面须要搜索,以抢救伤员。将地面打上网格,每一小格代表一平方公里,每平方公里的人口密度都不一样。如下图所示,不同颜色代表不同的人口密度。人口密度矩阵为p=peaks(50)+ 6.5259。因为人员有限,在24小时内,我们只能搜索km 55×的范围。请问第一天搜索平面上的哪一块可使我们救得的人数最多。

2

4

6

8

10

12

14

图3 人口密度分布

参考程序:optimization_search_area.m

% the density of population matrix

%the center of first search area should subject to {3<=x<=47,3<=y<=47} x=3:47; y=3:47;

Total_people=0; I=0;J=0; for i=x for j=y

search_area=p(i-2:i+2,j-2:j+2);

total_people=sum(sum(search_area)); if total_people>Total_people Total_people=total_people; I=i;J=j; end end end

p(I-2:I+2,J-2:J+2)=inf; surf(p)

view(180,90) axis off colorbar

5 数据处理

5.1 学分积点: 附件3给出了100个学生的学号和五门课程成绩。假如高数、英语、

力学、C 语言、体育的学分分别为6、5、4、3、1.5,根据下列公式求所有学生的学分积点:

∑∑×?学科学分

学科学分学科成绩积点=

i i i Max }0,510/{

参考程序:Score_of_student.m, caculate_grade.m

achievement=xlsread('code','sheet1','C2:K23');result=caculate_grade(achievement); result=round(result*10)/10;

xlswrite('code',result,'sheet1','L2');

function result=caculate_grade(achievement) credit_hour=[3 3 3 1.5 2 2 1 0.25 3 ]'; achievement=achievement/10-5; achievement(achievement<0)=0;

result=achievement*credit_hour/sum(credit_hour);

5.2 背靠背: NBA 共有30支球队,在这5个多月中共有1230场比赛,每支球队要进行82场比赛。附件中给出每个球队的赛程,其中时间已经按先后顺序排好了。求出每个球队背靠背的次数,即连续两天都打球的总场数。

参考程序:Back_to_back.m fid = fopen('Team.txt','r');

Team_name={'魔术';'奇才';'老鹰';'山猫';'热火'; '凯尔特人';'猛龙';'76人';'网';'尼克斯'; ... '活塞';'骑士';'步行者';'公牛';'雄鹿';'黄蜂';'马刺';'火箭';'小牛';'灰熊'; ... '爵士';'掘金';'开拓者';'森林狼';'超音速';'湖人';'太阳';'勇士';'国王';'快船'}; Time=load('Time.txt'); I=ones(30,1);

j_max=length(Time); for j=1:j_max tline = fgetl(fid); for i=1:30

if strcmp(tline,Team_name(i)); sign_time(i,I(i))=Time(j); I(i)=I(i)+1; end end end

Sign_time=sort(sign_time,2); S=diff(Sign_time,[],2); S(S~=1)=0; S=sum(S,2);

disp('the number of back to back of each team is:') for i=1:30;

disp(strcat(Team_name(i),num2str(S(i)))) end

6灌溉问题

有80×30的一块地要灌溉,现有一种喷头,喷出的水分布为

()()()()R

π

?

20

33=

D≤

=,

R

R

r

r

R

r

如果在如下图位置装有喷头,请作出相关分布平面图,并计算分布均匀度。Array

图4.喷头位置分布

参考程序:

irrigation_system.m

q=10;%scaling matrix

% location of the sprinkers

% Layout 1

sprinkery=[5 15 25 5 15 25 5 15 25 5 15 25 5 15 25]*q+1;

sprinkerx=[0 0 0 20 20 20 40 40 40 60 60 60 80 80 80]*q+1;

% % Layout 2

% sprinkery=[5*ones(1,9) 25*ones(1,9)]*q+1;

% sprinkerx=[0:10:80 0:10:80]*q+1;

% % layout 3

% sprinkery=[4.2*ones(1,9) 25.8*ones(1,9)]*q+1;

% sprinkerx=[0:10:80 0:10:80]*q+1;

% % layout 4

% sprinkery=[4.2*ones(1,9) 25.8*ones(1,9)]*q+1;

% sprinkerx=[-2 8 18 30 40 50 62 72 82 -2 8 18 30 40 50 62 72 82]*q+1;

%define a vacant field

field=zeros(30*q+1,80*q+1);

[x,y]=meshgrid(1:(80*q+1),1:(30*q+1));

for i=1:length(sprinkery)

% calculate the distance of every

r=sqrt((x-sprinkerx(i)).^2+(y-sprinkery(i)).^2)/q;

field=field+distr(r);

end

image(60/max(max(field))*field);

colormap gray

plot_sprinker(sprinkerx,sprinkery)

DU=Distribution_Uniformity(field)

distr.m

function precipitation = distr(r)

R=19;

precipitation=3/(pi*R^3)*(R-r);

precipitation(precipitation<0)=0;

plot_sprinker.m

function plot_sprinker(sprinkerx,sprinkery)

% plot the sprinkers and pipe

hold on

plot(sprinkerx,sprinkery,'or','markersize',8,'linewidth',2)

for i = 1:length(sprinkery)/3

x=[1:3]+3*(i-1);

y=[1:3]+3*(i-1);

plot(sprinkerx(x),sprinkery(y),'linewidth',4)

end

Distribution_Uniformity.m

function DU=Distribution_Uniformity(field)

% To compute DU

Field=sort(field(:));

Low_quarter=Field(1:round(0.25*length(Field)));

%DU=average_precipitation_rate_of_low_quarter/average_precititation_rate DU=mean(Low_quarter)/mean(Field);

第三部分 习题

注:以下习题无标准答案, 本人也不给出参考答案, 做的同学可以将做的程序发送至zhou.lv.wen@https://www.wendangku.net/doc/274866415.html, 或QQ 邮箱. 我将评点并反馈, 评点的前提是你的程序我得看得懂, 这就要求你写的程序要很规范并注释的很好.

1. 矩阵处理: 图像的扩充:设计算法,以得到任一图像的扩充矩阵(算法应具有一般性)

B B 的扩充矩阵

2. 矩阵构造: 设计两个m 函数,实现以下两种情况下任意介的矩阵的生成。若为输入3,则返回如下(左)3介矩阵;若为输入5,则返回如下(右)5介矩阵:

???????????

??

???=??

??

?

?????=25242019112321181210221713

9416148531576

2198475362153X X ???????

?????????=??

??

?

?????=98

7

6

5

102120194112225183

12232417213141516

154369278153X X 3. 数据处理: 人口问题

根据附件1给出的是01-05年的市镇乡各年龄段的男女死亡率以及出生率,请分别计算下面各量

z 05年全国人口的各年龄段的死亡率(按年龄分)以及男女的死亡率(按性别分) z 作出5年内市男性各年龄各死亡率的均值曲线。

z 作出94-05市镇乡男女出生比的走势曲线图(三条曲线,按市镇乡分)。 4. Gamma 刀问题: 附件2是来自哈佛大学网站的一组人脑切片图,假设每个切片的厚度为1 2

mm ,图片的每个像素表示12

mm ,试作出肿瘤的空间三维图(提示:建立三维数组表示空间,读入图片,每一张图对应数组中的一层的数据,用0和1表示正常组织和肿瘤组织)。

5. 排队论: 09年全国赛赛题B 是关于眼科病床的合理安排(附件3),现将问题作简化:设白内障一律按单眼处理。下图是医院排队过程的示意图。

00 0 0 000 1 0 00 1 1 1 0

0 1 1 1 0

00 0 0 0

0010001110111111111101110

按下列不同要求,分别建立一定的模型并编写相关排队论仿真程序

z 假设四种病人按先到先服务的原则住院(即没有任何病人有优先权),编写相关排队论仿

真程序(可参考附件7给出的收费站的排队论仿真程序),以得到每一个病人的等待时间. z 在此基础上,考虑病人的优先权,重新编写相关排队论仿真程序,并将模拟给果与数据

处理中的第二小题的结果作比较。(提示:给某一天按时间顺序排队病人队列进行调整,结合病种重新排队)

6.作图题: 根据附件4所给的Sprinkler Profiles数据,请作出一个喷头的获水量分布,效

果类似于图1(提示:本题涉及简单的数据插值).

7.数据拟合: 根据附件5所给信息,完成下列操作:

1.作出1880~2007年的年平均气温随时间的变化趋势图。

2.对1980~2007年的年平均气温作一次拟合,并画出拟合曲线。

8.数独拼图游戏:编写一个程序,解出下面这道数独游戏题。游戏规则:在9×9的格子中,用1到9共9

个阿拉伯数字填满整个格子,要求符合:

z 每一行都用到1,2,3,4,5,6,7,8,9,位置不限;

z 每一列都用到1,2,3,4,5,6,7,8,9,位置不限;

z 每3×3的格子都用到1,2,3,4,5,6,7,8,9,位置不限; 7 9 4

6 5 2

53 7 8

29 1

8 4 3

2

7

4

9 6

6

2 3

病床

matlab的RBF-BP神经网络讲义

matlab的RBF BP神经网络讲义 一、RBF神经网络 1985年,Powell提出了多变量插值的径向基函数(Radical Basis Function,RBF)方法, 1988年,Moody和Darken提出了一种神经网络结构,即RBF神经网络。 RBF网络是一种三层前向网络,其基本思想是:(1)用RBF作为隐单元的“基”构成隐含层空间,将输入矢量直接(即不需要通过权连接)映射到隐空间(2)当RBF的中心点确定后,映射关系也就确定(3)隐含层空间到输出空间的映射是线性的。 newrb()函数 功能 建立一个径向基神经网络 格式 net = newrb(P,T,GOAL,SPREAD,MN,DF) 说明 P为输入向量,T为目标向量,GOAL为圴方误差,默认为0,SPREAD为径向基函数的分布密度,默认为1,MN为神经元的最大数目,DF为两次显示之间所添加的神经元神经元数目。 例子: 设[P,T]是训练样本,[X,Y]是测试样本; net=newrb(P,T,err_goal,spread); %建立网络 q=sim(net,p); e=q-T; plot(p,q); %画训练误差曲线 q=sim(net,X); e=q-Y; plot(X,q); %画测试误差曲线 二、BP神经网络 训练前馈网络的第一步是建立网络对象。函数newff()建立一个可训练的前馈网络。这需要4个输入参数。 第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。 第二个参数是一个设定每层神经元个数的数组。 第三个参数是包含每层用到的传递函数名称的细胞数组。 最后一个参数是用到的训练函数的名称。 举个例子,下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经元(3),第二层有一个神经元(1)。 第一层的传递函数是tan-sigmoid,输出层的传递函数是linear。 输入向量的第一个元素的范围是-1到2[-1 2],输入向量的第二个元素的范围是0到5[0 5],训练函数是traingd。 net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd'); 这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。 我们可能要多次重新初始化权重或者进行自定义的初始化。 下面就是初始化的详细步骤。 在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实

MatLab讲义

2011年数学中国国赛培训讲座 Matlab的基础及数学建模中的应用 周吕文:zhou.lv.wen@https://www.wendangku.net/doc/274866415.html, 大连大学数学建模工作室&中国科学院力学研究所 2011年7月

第一部分 MatLab基础 1 简单介绍 MATLAB是Matrix Laboratory“矩阵实验室”的缩写。MatLab语言是由美国的Clever Moler博士于1980年开发的,初衷是为解决“线性代数”课程的矩阵运算问题。1984年由美国 MathWorks公司推向市场,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。 在数学建模竞赛中,由于只有短短的三到四天,而论文的评判不仅注重计算的结果更注重模型的创造性等很多方面,因此比赛中把大量的时间花费在编写和调试程序上只会喧宾夺主,是很不值得的。使用MATLAB 可以很大程度上的方便计算、节省时间,使我们将精力更多的放在模型的完善上,所以是较为理想的。 这里快速的介绍一下MATLAB与数学建模相关的基础知识,并列举一些简单的例子,很多例子都是源于国内外的数学建模赛题。希望能帮助同学们在短时间内方便、快捷的使用MATLAB 解决数学建模中的问题。当然要想学好MatLab更多的依赖自主学习,一个很好的学习MatLab的方法是查看MatLab的帮助文档: z如果你知道一个函数名,想了解它的用法,你可以用'help'命令得到它的帮助文档:>>help functionname z如果你了解含某个关键词的函数,你可以用'lookfor'命令得到相关的函数: 2 基本命令与函数 基本运算 z变量的赋值 实数赋值>> x=5; 复数赋值>> x=5+10j; (或>>x=5+10i) z向量的一般值方法 行向量赋值:>>x=[1 2 3]; (或x=[1, 2 ,3]) 列向量赋值:>>y=[1;2;3]; 矩阵的赋值:>>x=[1 2 3; 4 5 6; 7 8 9]; z常用矩阵(zeros ones eye) n行m列0矩阵:>>x=zeros(n,m); n行m列1矩阵:>>x=ones(n,m); n 阶的单位阵:>>y=eye(n); z矩阵行列操作 >> A=[1 2 3;4 5 6;7 8 9] A= 1 2 3 4 5 6 7 8 9 >>x=A(1,3) %取第一行的第三列元素 x= 3

天津大学matlab讲义-应用基础第一章

MATLAB应用基础 赵国瑞 天津大学电子信息工程学院 计算机基础教学部 2000.3 制作

概述 MATLAB是世界流行的优秀科技应用软件之一。具有功能强大(数值计算、符号计算、图形生成、文本处理及多种专业工具箱)、界面友好,可二次开发等特点。 自1984年由美国MathWorks公司推向市场以来,先后发布了多个版本,1993年发布4.0版,1996年发布5.0版,1999年发布5.3版。目前发布的为6.5版。 MATLAB有专业和学生版之分。二者功能相同,但计算规模和计算难度有差别。 在国内外,已有许多高等院校把MATLAB列为本科生、研究生必须掌握的基本技能。我校自1999年列为研究生选修课程。而且有很多教师、研究生把它作为进行科研的重要工具。 国内关于MATLAB的书籍很多,如: 《精通MATLAB 5.3》张志涌等编著北京航空航天大学出版社,2000.8 《科学计算语言MATLAB简明教程》杜藏等编著南开大学出版社,1999.6 《精通MATLAB 5》张宜华编写清华大学出版社,1999.6 《精通MATLAB--综合辅导与指南》 Duane Hanselman、Bruce Littlefield编著李人厚等译较西安交通大学出版社,1998.1 等等 本课程主要介绍MATLAB 5.3的基本功能和基础知识。至于其包含的多种工具箱,如仿真工具箱、解非线性方程(组)工具箱、优化工具箱等,应通过本学习后,结合各专业自己进一步学习和使用。 第1章MATLAB基础 1.1 源文件(M-文件) 分为两类:函数文件和非函数文件。 都用扩展名.M 1.1.1函数文件 格式1(无返回值函数) function函数名(输入表) %称为函数头 函数体 例如: function box(opt_box); %BOX Axis box. % BOX ON adds a box to the current axes. % BOX OFF takes if off. % BOX, by itself, toggles the box state. % % BOX sets the Box property of the current axes. % % See also GRID, AXES. % Copyright (c) 1984-98 by The MathWorks, Inc. % $Revision: 1.5 $ $Date: 1997/11/21 23:32:59 $

MATLAB讲义

第一章基础准备及入门 什么是MATLAB? MATLAB是MathWorks公司于1984年推出的数学软件,是一种用于科学工程计算的高效率的高级语言。MATLAB最初作为矩阵实验室(Matrix Laboratory),主要向用户提供一套非常完善的矩阵运算命令。随着数值运算的演变,它逐渐发展成为各种系统仿真、数字信号处理、科学可是化的通用标准语言。 在科学研究和工程应用的过程中,往往需要大量的数学计算,传统的纸笔和计算机已经不能从根本上满足海量计算的要求,一些技术人员尝试使用Basic,Fortran,C\C++等语言编写程序来减轻工作量。但编程不仅需要掌握所用语言的语法,还需要对相关算法进行深入分析,这对大多数科学工作者而言有一定的难度。与这些语言相比, MATLAB的语法更简单,更贴近人的思维方式。用MATLAB编写程序,犹如在一张演算纸上排列公式和求解问题一样高效率,因此被称为“科学便笺式”的科学工程计算语言。 MATLAB由主包和功能各异的工具箱组成,其基本数据结构是矩阵。正如其名“矩阵实验室”,MATLAB起初主要是用来进行矩阵运算。经过MathWorks 公司的不断完善,时至今日,MATLAB已经发展成为适合多学科、多工作平台的功能强大的大型软件。 本章有两个目的:一是讲述MATLAB正常运行所必须具备的基础条件;二是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方法。 本章的前两节分别讲述:MATLAB的正确安装方法和MATLAB 环境的启动。因为指令窗是MATLAB最重要的操作界面,所以本章用第 1.3、1.4 两节以最简单通俗的叙述、算例讲述指令窗的基本操作方法和规则。这部分内容几乎对MATLAB各种版本都适用。 MATLAB6.x 不同于其前版本的最突出之处是:向用户提供前所未有的、成系列的交互式工作界面。了解、熟悉和掌握这些交互界面的基本功能和操作方法,将使新老用户能事半功倍地利用MATLAB去完成各种学习和研究。为此,本章特设几节用于专门介绍最常用的交互界面:历史指令窗、当前目录浏览器、工作空间浏览器、内存数组编辑器、交互界面分类目录窗、M文件编辑/调试器、及帮助导航/浏览器。 本章是根据MATLAB6.5版编写的,但大部分内容也适用于其他6.x版。 1.1M ATLAB的安装和内容选择

MATLAB软件基础知识讲义(doc 74页)

MATLAB软件基础 §1MATLAB 概述 MATLAB 是MATrix LABoratory(“矩阵实验室”)的缩写,是由美国MathWorks 公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的语言。是国际公认的优秀数学应用软件之一。 20世纪80年代初期,Cleve Moler与John Little等利用C语言开发了新一代的MATLAB语言,此时的MATLAB语言已同时具备了数值计算功能和简单的图形处理功能。1984年,Cleve Moler与John Little等正式成立了Mathworks公司,把MA TLAB 语言推向市场,并开始了对MATLAB工具箱等的开发设计。1993年,Mathworks公司推出了基于个人计算机的MATLAB 4.0版本,到了1997年又推出了MATLAB 5.X版本(Release 11),并在2000年又推出了最新的MATLAB 6版本(Release 12)。 现在,MATLAB已经发展成为适合多学科的大型软件,在世界各高校,MATLAB已经成为线性代数、数值分析、数理统计、优化方法、自动控制、数字信号处理、动态系统仿真等高级课程的基本教学工具。特别是最近几年,MATLAB在我国大学生数学

建模竞赛中的应用,为参赛者在有限的时间内准确、有效的解决问题提供了有力的保证。 概括地讲,整个MATLAB系统由两部分组成,即MATLAB 内核及辅助工具箱,两者的调用构成了MATLAB的强大功能。MATLAB语言以数组为基本数据单位,包括控制流语句、函数、数据结构、输入输出及面向对象等特点的高级语言,它具有以下主要特点: 1)运算符和库函数极其丰富,语言简洁,编程效率高,MATLAB 除了提供和C语言一样的运算符号外,还提供广泛的矩阵和向量运算符。利用其运算符号和库函数可使其程序相当简短,两三行语句就可实现几十行甚至几百行C或FORTRAN的程序功能。 2)既具有结构化的控制语句(如for循环、while循环、break 语句、if语句和switch语句),又有面向对象的编程特性。 3)图形功能强大。它既包括对二维和三维数据可视化、图像处理、动画制作等高层次的绘图命令,也包括可以修改图形及编制完整图形界面的、低层次的绘图命令。 4)功能强大的工具箱。工具箱可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图

Matlab基础知识点汇总

MATLAB讲义 第一章 MATLAB系统概述 1.1 MATLAB系统概述 MATLAB(MATrix LABoratory)矩阵实验室的缩写,全部用C语言编写。 特点: (1)以复数矩阵作为基本编程单元,矩阵运算如同其它高级语言中的语言变量操作一样方便,而且矩阵无需定义即可采用。 (2)语句书写简单。 (3)语句功能强大。 (4)有丰富的图形功能。如plot,plot3语句等。 (5)提供了许多面向应用问题求解的工具箱函数。目前,有20多个工具箱函数,如信号处理、图像处理、控制系统、系统识别、最优化、神经网络的模糊系统等。 (6)易扩充。 1.2 MATLAB系统组成 (1)MATLAB语言 MATLAB语言是高级的矩阵、矢量语言,具有控制流向语句、函数、数据结构、输入输出等功能。同时MATLAB又具有面向对象编程特色。MATLAB语言包括运算符和特殊字符、编程语言结构、字符串、文件输入/输出、时间和日期、数据类型和结构等部分。 (2)开发环境 MATLAB开发环境有一系列的工具和功能体,其部分具有图形用户界面,包括MATLAB桌面、命令窗口、命令历史窗口、帮助游览器、工作空间、文件和搜索路径等。 (3)图形处理 图形处理包括二维、三维数据可视化,图像处理、模拟、图形表示等图形命令。还包括低级的图形命令,供用户自由制作、控制图形特性之用。 (4)数学函数库 有求和、正弦、余弦等基本函数到矩阵求逆、求矩阵特征值和特征矢量等。 MATLAB数学函数库可分为基本矩阵和操作、基本数学函数、特殊化数学函数、线性矩阵函数、数学分析和付里叶变换、多项式和二重函数等。 (5)MATLAB应用程序接口(API) MATLAB程序可以和C/C++语言及FORTRAN程序结合起来,可将以前编写的C/C++、FORTRAN语言程序移植到MATLAB中。 1.3 MATLAB的应用围包括: MATLAB的典型应用包括: ●数学计算 ●算法开发 ●建模、仿真和演算 ●数据分析和可视化 ●科学与工程绘图 ●应用开发(包括建立图形用户界面) 以矩阵为基本对象 第二章 Matlab基础

Matlab基础教程

1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。 我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 x = 42 此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。 小提示: MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例: y = sin(10)*exp(-0.3*4^2);

若要显示变数y的值,直接键入y即可: >>y y =-0.0045 在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。 下表即为MATLAB常用的基本数学函数及三角函数: 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开

matlab讲义要点

前期知识:高等数学,机械原理,液压传动,控制原理 学习目标:了解基本原理、掌握基本应用、熟练使用matlab 、精通机械工程的建模和仿真 本课计划:课堂学习、课后练习、 任务:要看课堂笔记 引例:斐波纳西数列的递推公式为)2()1()(--+=n n n F F F ,通项表达式是什么? 高等数学上册第48页。斐波纳西数列在优化设计和股票分析中有用处。 第1章 了解Matlab 本章要求:了解Matlab 的功能、组成 第1节 Matlab 的界面 1.命令窗口:输入命令和显示运行结果和寻求帮助的窗口。 第1个例子求不定积分 问题:在编写代码时不能输入或者不能显示汉字 解决办法:将use custom font 换成use desktop font

先定义一个符号变量x syms x 设2 11 )(x x f += 求不定积分 ?dx x f )( matlab 求解:int(1/(1+x .^2)) 详见l1_bdjf.m 最重要的问题一:工作路径 查看当前工作路径的命令是 pwd matlab 默认的路径为安装好的目录下work ,为了需要我们需要改换路径。 改换路径的方法有:(1)采用DOS 命令 mkdir('根目录名称','新目录名称') 例:mkdir('d:\','mywork') 如果d 盘下没有mywork 即创建,如有就会给出警告。 进入新建文件夹 cd d:\mywork (2)采用matlab 命令 editpath ,pathtool (3)通过matlab 界面 [file]菜单->set path 难点:我想将打开MATLAB 时的默认工作路径改为F:\Program\MATLAB\WorkSpace\ ,只需要在原来的默认路径(bin)下创建一个名为startup.m 的文件,内容为相对路径 cd ..\..\WorkSpace\ 或绝对路径 cd F:\Program\MATLAB\WorkSpace\ 即可。再次打开MA TLAB 时便会自动执行startup.m 文件,将工作路径转至WorkSpace 下。 最重要的问题二:工作路径设置不能设置在有汉字的目录下或汉字文件夹,不支持汉字运算。 汉字用的是Unicode 编码一个字符占两个字节,字母用的是ASC Ⅱ编码,一个字母占一个字节。到2008版才能处理汉字。 初学者容易出现的错误就是把别人的程序拷在带汉字的文件夹下,运行出现错误。 如果我们已知某个文件名,但忘了在哪个文件夹下,可以用which 命令如which FUN what 命令:M-files in the current directory 思考题:what 和dir 的区别? 2.工作空间:显示数据的变量信息,包括变量名、字节大小、变量类型等。 输入 load wind 和load cities 加载了后缀为mat 的wind 和cities 数据文件 在命令窗口输入who 就可以列出空间的变量 在命令窗口输入whos 可以列出名称、大小和类型 whos -file 文件名.mat 可以查看加载前的数据信息。 3.历史记录: 显示所有在命令窗口输入的执行过的命令,清除历史的方法有两种

matlab讲义

2.3终值及其应用 2.3.1终值的概念 终值是与现值相对的概念,是指当前的一项现金流在未来某个时刻的价值。在求终值问题时应该考虑单利和复利的问题,一般如果没有特别的说明则都是按照复利(离散复利)进行计算。 在复利计息的情况下,当前的现金流PV在利率为r时到第t期期末的终值为: t FV) = 1(+ r PV 2.3.2终值的计算 在Matlab中,用来计算现金流的终值的函数有fvfix和fvvar两个。同样,-fix函数用来计算规则现金流的终值;而-var函数则用来计算不规则现金流的终值。 【例2.9】一投资者的储蓄账户初始余额为$1500,在随后的10年中,每月末都会收到$200并存入该账户,银行的年利率为9%。试计算其到期时的价值。 通过执行fvfix函数命令: FutureVal = fvfix(Rate, NumPeriods, Payment, PresentVal, Due) 即可计算出该固定收入现金流的的终值。 变量解释: Rate:周期性收支的利息率,以小数的形式输入; NumPeriods:周期性收支的次数; Payment:每期收支的现金流数额; PresentVal:初始余额 Due:收支被预定或确定的时间:0表示在期末收支(默认值),1表示在期初收支(任选)。 输入命令: >>FutureVal = fvfix(0.09/12, 12*10, 200, 1500, 0) 输出结果: FutureVal = 42379.89 即该现金流到期时的价值为42379.89$。 【例2.10】设某投资者期初投资为$10,000,在随后的5年投资期中每年产生的收入流依次为$2000、$1500、$3000、$3800、$5000,年利率为8%。试计算该现金流到期时的价值。 通过执行fvvar函数命令: FutureVal = fvvar(CashFlow, Rate, IrrCFDates) 即可求出这个规则(周期性的)现金流的终值。 输入命令: >>FutureVal = fvvar([-10000 2000 1500 3000 3800 5000], 0.08) 输出结果: FutureVal = 2520.47 即该现金流到期时的价值为2520.47$。 如果期初投资的$10,000产生的是一个不规则的现金流(如下所示),则计算时要将期初的投资和各个现金流发生的日期也考虑进去。利率为9%。

天津大学matlab讲义-应用基础第二章

第2章MATLAB程序设计 MATLAB语言为解释型程序设计语言。在程序中可以出现顺序、选择、循环三种基本控制结构,也可以出现对M-文件的调用(相当于对外部过程的调用)。 由于 MATLAB开始是用FORTRAN语言编写、后来用 C语言重写的,故其既有FORTRAN的特征,又在许多语言规则方面与C语言相同。 2.1 顺序结构语句 在顺序结构语句中,包括表达式语句、赋值语句、输入输出语句、空语句等。 2.1.1 表达式语句 格式: 表达式,%显示表达式值 表达式;%不显示表达式值 表达式%显示表达式值 如: x + y, sin(x); –5 最后的表达式值暂保存在变量ans中。 2.1.2 赋值语句 格式: v =表达式,%结果送v并显示v v =表达式;%结果送v不显示v v =表达式%结果送v并显示v 2.1.3 空语句 格式:

, ; 2.1.4 输入语句 1、input语句(实际上是函数) 格式1: input(提示字符串) 功能: 显示提示字符串,可输入数字、字符串(两端用单引号括起)、或表达式 格式2: input(提示字符串,'s') 功能: 显示提示字符串,并把输入视为字符串 2、yesinput语句 格式: yesinput(提示字符串,缺省值,值范围) 功能: 显示提示字符串和缺省值,若只打入回车则以缺省值作为输入值,若输入的值不在指定范围内则认为输入无效,B并等待用户重新输入。 如: t=yesinput('指定线的颜色',… 'red','red|blue|green') 运行结果如下: 指定线的颜色(red):yellow %不在值内 指定线的颜色(red):blue %重输 t = blue x=yesinput('输入元素个数',10,[1,20]) 运行结果如下: 输入元素个数(10): x = 10 3、Keyboard语句 格式: Keyboard 功能: 暂停M-文件的执行,并等待用户从键盘输入命令以查看或改变变量的值,直到输入return命令而返回相应的M-文件继续执行。本语句用于调试M-文件。 4、pause语句 格式1: pause 功能:暂停,敲下任一键继续 格式2: pause(n)

matlab串口通信基础讲义

matlab串口通信基础讲义 ①支持基于串行接口(RS-232、RS-422、RS-485)、GPIB总线(IEEE2488、HPIB标准)、VISA总线的通信; ②通信数据支持二进制和文本(ASCII)两种方式,文本方式支持SCPI(Standard Commands for Programmable Instruments)语言; ③支持异步通信和同步通信; ④支持基于事件驱动的通信。 从以上的Matlab设备控制工具箱的特点可以看到,Matlab完全可以满足我们实现串行通信的要求。 3.1 Matlab对串行口控制的基础知识 Matlab对串行口的编程控制主要分为四个步骤。 ①创建串口设备对象并设置其属性。 scom=serial('com1');%创建串口1的设备对象scom scom.Terminator='CR';%设置终止符为CR(回车符),缺省为LF(换行符) scom.InputBufferSize=1024;%输入缓冲区为256B,缺省值为512B scom.OutputBufferSize=1024;%输出缓冲区为256B,缺省值为512B scom.Timeout=0.5;%Y设置一次读或写操作的最大完成时间为0.5s,缺省值为10s s.ReadAsyncMode='continuous'(缺省方式);%在异步通信模式方式下,读取串口数据采用连续接收数据(continuous)的缺省方式,那么下位机返回的数据会自动地存入输入缓冲区中. 注意:在些属性只有在对象没有被打开时才能改变其值,如InputBufferSize、OutputBufferSize属性等。对于一个RS-232/RS-422/RS-485串口设备对象,其属性的缺省值为波特率9 600b/s,异步方式,通信数据格式为8位数据位,无奇偶校验位,1位停止位。如果要设置的串口设置对象的属性值与缺省值的属性值相同,用户可以不用另行设置。 另外,设置串口设置对象的属性也可以用一条指令完成,如:scom=serial('COM1','BaudRate',38400,'Parity','none','DataBits',8,'StopBits',1)。也可以用set命令,如set(scom,'BaudRate',19200,'Parity','even')。创建了对象后可以在Matlab命令窗口直接敲对象名并回车,看到其基本属性和当前状态。若需要知道其全部的属性,可以用get(scom)命令。

基于MATLAB的时序逻辑电路设计与仿真上课讲义

基于M A T L A B的时序逻辑电路设计与仿真

课程设计任务书 学生姓名:田鑫专业班级:电子科学与技术 0703 班 指导教师:钟毅工作单位:信息工程学院 题目: 基于MATLAB的时序逻辑电路设计与仿真 初始条件: MATLAB 软件微机 要求完成的主要任务: 深入研究和掌握数字电路中时序逻辑电路的理论知识。利用MATLAB强大的图形处理功能、符号运算功能和数值计算功能,实现时序逻辑电路的设计和仿真。 一、以寄存器为例仿真下列波形 并行寄存器输出波形(以基本RS触发器构造); 移位寄存器输出波形(用D触发器构造) 二、以双向移位寄存器为例实现子系统的设计和封装并仿真下列波形 4位双向移位寄存器并行输出波形; 4位双向移位寄存器串行右移输出波形; 4位双向移位寄存器串行左移输出波形 三、以扭环计数器为例仿真下列波形 扭环计数器的输出波形(以JK触发器实现) 时间安排:

学习MATLAB语言的概况第1天 学习MATLAB语言的基本知识第2、3天 学习MATLAB语言的应用环境,调试命令,绘图能力第4、5天 课程设计第6-9天 答辩第10天 指导教师签名: 年月日 系主任(或责任教师)签名:年月日

目录 摘要 (4) Abstract (4) 绪论 (1) 1M A T L A B简介 (2) 1.1 MATLAB程序设计 (2) 1.2M A T L A B的特点 (2) 1.3MATLAB程序设计 (2) 1.4 M文件 (2) 1.5 SIMULINK仿真设计 (3) 1.5.1创建和使用模型 (3) 1.5.2选择和定制模块 (3) 1.5.3建立和编辑模型 (4) 1.5.4配置子系统 (4) 1.5.5条件执行子系统 (4) 2时序逻辑电路设计 (5) 2.1锁存器和触发器 (5) 2.1.1双稳态 (5)

讲义2 Matlab基本语句

讲义2 Matlab基本语句 一. 程序控制语句 1. 循环语句 MATLAB的循环语句包括for循环和while循环两种类型。 1)for循环 语法格式: for 循环变量 = 起始值:步长:终止值 循环体 end 起始值和终止值为一整形数,步长可以为整数或小数,省略步长时,默认步长为1。执行for循环时,判定循环变量的值是否大于(步长为负时则判定是否小于)终止值,不大于(步长为负时则小于)则执行循环体,执行完毕后加上步长,大于(步长为负时则小于)终止值后退出循环。 例1给矩阵A、B赋值。 MATLAB 语句及运行结果如下: k=5; a=zeros(k, k) %矩阵赋零初值 for m=1 : k for n=1: k a(m,n)=1/(m+n-1) end end for i=m : -1 : 1 b(i)=i end 运行结果: a= 1.0000 0.5000 0.3333 0.2500?0.2000 0.5000 0.3333 0.2500 0.2000 0.1667 0.3333 0.2500 0.2000 0.1667 0.1429

0.2500 0.2000 0.1667 0.1429 0.1250 0.2000 0.1667 0.1429 0.1250 0.1111 b= 1 2 3 4 5 2) while循环 语法格式: while 表达式 循环体 end 其执行方式为:若表达式为真(运算值非0),则执行循环体;若表达式为假(运算结果为0),则退出循环体,执行end后的语句。 例2 a=3; while a a=a-1 end 输出: a=2 a=1 a=0 2. 条件转移语句 条件转移语句有if和switch两种。 1) if语句 MATLAB中if语句的用法与其他高级语言相类似,其基本语法格式有以下几种: 格式一: if 逻辑表达式 执行语句 end

相关文档