Matlab中文简明教程

Matlab中文简明教程
Matlab中文简明教程

MatLab简介

MATLAB是什么?

典型的使用包括:

数学和计算

算术发展模型,

模拟,和原型

数据分析,开发,和可视化

科学和工程图学

应用发展包括图形用户界面设计

MATLAB表示矩阵实验室。

MATLAB系统

MATLAB系统由5主要的部分构成:

1. MATLAB语言。这是高阶的矩阵/数组语言,带控制流动陈述,函数,数据结构,输入/输出,而且面向目标的编程特点。

Ops 操作符和特殊字符。

Lang 程序设计语言作。

strfun 字符串。

iofun 输入/输出。

timefun 时期和标有日期。

datatypes数据类型和结构。

2. MATLAB工作环境。这是你作为MATLAB用户或程序编制员的一套工具和设施。

3. 制图这是MATLAB制图系统。它为2维上,而且三维的数据可视化,图象处理,动画片制作和表示图形包括高阶的指令在内。它也为包括低阶的指令在内,允许你建造完整的图形用户界面(GUIs),MATLAB应用。制图法功能在MATLAB工具箱中被组织成5文件夹:

graph2d 2-的维数上的图表。

graph3d 三维的图表。

specgraph 专业化图表。

graphics 制图法。

uitools 图形用户界面工具。

4. MATLAB的数学的函数库。数学和分析的功能在MATLAB工具箱中被组织成8文件夹。

elmat 初步矩阵,和矩阵操作。

elfun 初步的数学函数。

specfun 专门的数学函数。

matfun 矩阵函数-用数字表示的线性的代数。

datafun 数据分析和傅立叶变换。

polyfun 插入物,并且多项式。

funfun 功能函数。

sparfun 稀少矩阵。

5. MATLAB应用程序接口(API)。这是允许你写C、Fortran语言与MATLAB交互。

关于 Simulink

Simulink ? MATLAB为做非线性的动态的系统的模拟实验的交互式的系统。它是允许你通过把方框图拉到屏幕,灵活地窜改它制作系统的模型的用图表示的鼠标驱动的程序。实时工作室?允许你产生来自你的图表块的C代码,使之能用于各种实时系统。

关于工具箱

工具箱是为了解答特别种类的问题扩展MATLAB环境的MATLAB函数的综合的(M-文件)收集

MatLab工作环境

命令窗口

若输入

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

按下回车键后显示如下

A =

1 2 3

4 5 6

7 8 10

清除命令窗口

clc

这并不清除工作间,只是清除了显示,仍可按上箭头看到以前发出的命令

数据格式命令

x = [4/3 1.2345e–6]

format short

1.3333 0.0000

format short e

1.3333e+000 1.2345e–006

format short g

1.3333 1.2345e–006

format long

1.33333333333333 0.00000123450000

format long e

1.333333333333333e+000 1.234500000000000e–006

format long g

1.33333333333333 1.2345e–006

format bank

1.33 0.00

format +

++

format rat

4/3 1/810045

format hex

3ff5555555555555 3eb4b6231abfd271

若最大的元素大于1000或小于0.001,则显示short或long格式时时会加上一个比例

还有两个格式:

format compact

format loose

禁止结果的显示

在命令后加上分号,则屏幕上不会立即显示出结果,这在运算大的数据量时十分有用,如下命令产生100*100的幻方:

A = magic(100);

长命令行

如想另起一行输入命令,在末尾加上"..."即可,如:

s = 1 – 1/2 + 1/3 – 1/4 + 1/5 – 1/6 + 1/7 ...

– 1/8 + 1/9 – 1/10 + 1/11 – 1/12;

MatLab工作间

你可用who或whos来察看当前工作间中有哪些变量,如:

whos

Name Size Bytes Class

A 4x4 128 double array

D 3x5 120 double array

M 10x1 40 cell array

S 1x3 628 struct array

h 1x11 22 char array

n 1x1 8 double array

s 1x5 10 char array

v 1x14 28 char array

Grand total is 93 elements using 984 bytes

若要从工作间中删除所有的变量,用

clear

保存、重载工作间

你可以将工作间保存为一个二进制的M文件,以后还可以恢复回来:save june10

也可只保存工作间中的部分变量值

save june10 x y z

重载时只需输入

load june10

文件名保存在字符串中

这样可以像调用函数一样调用工作间

save(’myfile’,’VAR1’,’VAR2’)

A = ’myfile’;

load(A)

与下面的命令相同

save myfile VAR1 VAR2

load myfile

下面的命令把1至10的平方值分别存放在data1至data10中:

file = ’data’;

for i = 1:10 j = i.^2;

save([file int2str(i)],’j’);

end

查找路径

当你输入“yourpig"时发生了什么呢?

1:察看是否是变量;

2:察看是否是内建函数;

3:察看当前目录下是否有文件:yourpig.m;

4:察看查找目录下是否有文件:yourpig.m;

对于查找路径中的文件,what显示当前目录下的文件,加上路径后可显示输入的路径下所有的MatLab文件.如:

what matlab/elfun

以下二命令分别显示、编辑m文件

type rank

edit rank

图像窗口

下面的命令产生一个与命令窗口隔离的图形窗口, figure

plot函数则会在新的窗口中绘制图形,如

t = 0:pi/100:2*pi;

y = sin(t);

plot(t,y)

则有如下图形:

寻求帮助

下面的函数在寻求帮助时十分有用:

help 列出你所寻求帮助的函数的功能描述;

lookfor 列出所有函数的功能描述中含有你所输入的内容的函数的简介如:

help inverse

显示

inverse.m not found.

但如输入

lookfor inverse

则显示

INVHILB Inverse Hilbert matrix

ACOSH Inverse hyperbolic cosine

ERFINV Inverse of the error function

INV Matrix inverse

PINV Pseudoinverse

IFFT Inverse discrete Fourier transform

IFFT2 Two–dimensional inverse discrete Fourier transform ICCEPS Inverse complex cepstrum

IDCT Inverse discrete cosine transform

数据分析和统计

面向列的数据集

这年头似乎十分风行”面向”这个词,这儿故也套用,其英文为"Column-Oriented Data Sets",可理解为MatLab按列的存储方式来分析数据,下面是一个例子:

Time Location 1 Location 2 Location 3

01h00 11 11 9

02h00 7 13 11

03h00 14 17 20

04h00 11 13 9

05h00 43 51 69

06h00 38 46 76

07h00 61 132 186

08h00 75 135 180

09h00 38 88 115

10h00 28 36 55

11h00 12 12 14

12h00 18 27 30

13h00 18 19 29

14h00 17 15 18

15h00 19 36 48

16h00 32 47 10

17h00 42 65 92

18h00 57 66 151

19h00 44 55 90

20h00 114 145 257

21h00 35 58 68

22h00 11 12 15

23h00 13 9 15

24h00 10 9 7

以上数据被保存在一个称为count.dat的文件中.

11 11 9

7 13 11

14 17 20

11 13 9

43 51 69

38 46 76

61 132 186

75 135 180

38 88 115

28 36 55

12 12 14

18 27 30

18 19 29

17 15 18

19 36 48

32 47 10

42 65 92

57 66 151

44 55 90

114 145 257

35 58 68

11 12 15

13 9 15

10 9 7

下面,我们调入此文件,并看看文件的一些参数

load count.dat

[n,p] = size(count)

n =

24

p =

3

创建一个时间轴后,我们可以把图画出来:

t = 1:n;

set(0,'defaultaxeslinestyleorder’,’-|--|-.’)

set(0,'defaultaxescolo rorder’,[0 0 0])

plot(t,count), legend('Location 1','Location 2','Location 3',0) xlabel('Time'), ylabel('Vehicle Count'), grid on

足以证明,以上是对3个对象的24次观测.

基本数据分析函数

(一定注意是面向列的)

继续用上面的数据,其每列最大值.均值.及偏差分别为:

mx = max(count)

mu = mean(count)

sigma = std(count)

mx =

114 145 257

mu =

32.0000 46.5417 65.5833

sigma =

25.3703 41.4057 68.0281 重载函数,还可以定位出最大.最小值的位置

[mx,indx] = min(count)

mx =

7 9 7

indx =

2 2

3 24

试试看,你能看懂下面的命令是干什么的吗?

[n,p] = size(count)

e = ones(n,1)

x = count – e*mu

点这看看答案!

下面这句命令则找出了整个矩阵的最小值:

min(count(:))

ans =

7

协方差及相关系数

下面,我们来看看第一列的方差:

cov(count(:,1))

ans =

643.6522

cov()函数作用于矩阵,则会计算其协方差矩阵. corrcoef()用于计算相关系数,如:

corrcoef(count)

ans =

1.0000 0.9331 0.9599

0.9331 1.0000 0.9553

0.9599 0.9553 1.0000

数据的预处理

未知数据

NaN(Not a Number--不是一个数)被定义为未经定义的算式的结果,如 0/0.在处理数据中,NaN常用来表示未知数据或未能获得的数据.所有与NaN有关的运算其结果都是NaN.

a = magic(3);

a(2,2) = NaN

a =

8 1 6

3 NaN 7

4 9 2

sum(a)

ans =

15 NaN 15

在做统计时,常需要将NaN转化为可计算的数字或去掉,以下是几种方法:

注:判断一个值是否为NaN,只能用 isnan(),而不可用 x==NaN;

用此法可以从数据中去掉不相关的数据,看看下面的命令是干什么用的:

mu = mean(count);

sigma = std(count);

[n,p] = size(count)

outliers = abs(count — mu(ones(n, 1),:)) > 3*sigma(ones(n, 1),:); nout = sum(outliers)

nout =

1 00

count(any(outliers'),:) = [];

点这看看答案

回归与曲线拟合

我们经常需要把观测到的数据表达为函数,假如有如下的对时间的观测:

t = [0 .3 .8 1.1 1.6 2.3]’;

y = [0.5 0.82 1.14 1.25 1.35 1.40]’;

plot(t,y,’o’),

grid on

多项式回归

由图可以看出应该可以用多项式来表达:y=a0+a1*t+a2*t^2

系数a0,a1,a2可以由最小平方拟合来确定,这一步可由反除号"\"来完成解下面的三元方程组可得:

X = [ones(size(t)) t t.^2]

X =

1.0000 00

1.0000 0.3000 0.0900

1.0000 0.8000 0.6400

1.0000 1.1000 1.2100

1.0000 1.6000

2.5600

1.0000

2.3000 5.2900

a = X\y

a =

0.5318 0.9191 –0.2387

a即为待求的系数,画图比较可得

T = (0:0.1:2.5)’;

Y = [ones(size(T)) T T.^2]*a;

plot(T,Y,'–',t,y,'o',), grid on

结果令人失望,但我们可以增加阶数来提高精确度,但更明智的选择是用别的方法.线性参数回归

形如:y=a0+a1*exp(-t)+a2*t*exp(-t)

计算方法同上:

X = [ones(size(t)) exp(– t) t.*exp(– t)];

a = X\y

a =

1.3974 – 0.8988 0.4097

T = (0:0.1:2.5)';

Y = [ones(size(T)) exp(– T) T.exp(– T)]*a;

plot(T,Y,'–',t,y,'o'), grid on

看起来是不是好多了!

例子研究:曲线拟合

下面我们以美国人口普查的数据来研究一下有关曲线拟合的问题(MatLab是别人的,教学文档是别人的,例子也是别人的,我只是一个翻译而已...)

load census

这样我们得到了两个变量,cdate是1790至1990年的时间列向量(10年一次),pop是相应人口数列向量. 上一小节所讲的多项式拟合可以用函数polyfit()来完成,数字指明了阶数

p = polyfit(cdate,pop,4)

Warning: Matrix is close to singular or badly scaled.

Results may be inaccurate. RCOND = 5.429790e–20

p =

1.0e+05 *

0.0000 –0.0000 0.0000 –0.0126 6.0020

产生警告的原因是计算中的cdata值太大,在计算中的Vandermonde行列式使变换产生了问题,解决的方法之一是使数据标准化.

预处理:标准化数据

数据的标准化是对数据进行缩放,以使以后的计算能更加精确,一种方法是使之成为0均值:

sdate = (cdate – mean(cdate))./std(cdate)

现在再进行曲线拟合就没事了!

p = polyfit(sdate,pop,4)

p =

0.7047 0.9210 23.4706 73.8598 62.2285

pop4 = polyval(p,sdate);

plot(cdate,pop4,'–',cdate,pop,'+'), grid on

在上面的数据标准化中,也可以有别的算法,如令1790年的人口数为0.

余量分析

pop1 = polyval(p1,sdate);

plot(cdate,pop1,'–',cdate,pop,'+')

res1 = pop – pop1;

figure, plot(cdate,res1,'+')

pop2 = polyval(p,sdate);

plot(cdate,pop2,'–',cdate,pop,'+')

res2 = pop – pop2;

figure, plot(cdate,res2,’+’)

pop4 = polyval(p,sdate);

plot(cdate,pop4,'–',cdate,pop,'+')

matlab入门经典范例

num1=[13]; den1=conv([1,1],[1,0]); G1=tf(num1,den1); num2=[5.096,13]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.098,1],[1]); den2=conv( ssys1,ssys2); G2=tf(num2,den2); figure(1) margin(G1); hold on margin(G2); num1=[13]; den1=conv([1,1],[1,0]); G1=tf(num1,den1); num2=[5.096,13]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.098,1],[1]); den2=conv( ssys1,ssys2); G2=tf(num2,den2); figure(1) margin(G1); hold on margin(G2); num=[4.56,10]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.114,1],[1]); den=conv( ssys1,ssys2); G=tf(num,den); figure(1) bode(G) num=[4.56,10]; ssys1=conv([1,1],[1,0]); ssys2=conv([0.114,1],[1]); den=conv( ssys1,ssys2); G=tf(num,den); figure(1) msrgin(G); num1=[13]; den1=conv([1,1],[1,0]);

matlab入门教程

MATLAB入门教程 1.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)

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化为多项分数展开

Matlab2012教程--经典教程

第1章基础准备及入门 1.1 最简单的计算器使用法 为易于学习,本节以算例方式叙述,并通过算例归纳一些MATLAB最基本的规则和语 法结构。建议读者,在深入学习之前,先读一读本节。 2 【例1.3-1】求[122(74)]3的算术运算结果。本例演示:最初步的指令输入形式 和必需的操作步骤。 (1)用键盘在MA TLAB指令窗中输入以下内容 >> (12+2*(7-4))/3^2 (2)在上述表达式输入完成后,按[Enter] 键,该指令被执行,并显示如下结果。 ans = 2 〖说明〗 本例在指令窗中实际运行的情况参见图 1.3-1。 指令行“头首”的“>>”是“指令输入提示符”,它是自动生成的。本书在此后的输入指令前将不再带提示符“>>”。理由是:(A)为使本书简洁;(B)本书用MATLAB 的M-book写成,而在M-book中运行的指令前是没有提示符的。 5

MATLAB的运算符(如+、- 等)都是各种计算程序中常见的习惯符号。 一条指令输入结束后,必须按[Enter] 键,那指令才被执行。 由于本例输入指令是“不含赋值号的表达式”,所以计算结果被赋给MATLAB的一个默认变量“ans”。它是英文“answer”的缩写。 【例1.3-2】“续行输入”法。本例演示:或由于指令太长,或出于某种需要,输入指令行必 须多行书写时,该如何处理。 S=1-1/2+1/3-1/4+ ... 1/5-1/6+1/7-1/8 S = 0.6345 〖说明〗 MA TLAB用3个或3个以上的连续黑点表示“续行”,即表示下一行是上一行的继续。 本例指令中包含“赋值号”,因此表达式的计算结果被赋给了变量S。 指令执行后,变量S被保存在MA TLAB 的工作空间(Workspace)中,以备后用。如果用户不用clear 指令清除它,或对它重新赋值,那么该变量会一直保存在工作空间中, 直到本MATLAB 指令窗被关闭为止。 1.3.3数值、变量和表达式 前节算例只是表演了“计算器”功能,那仅是MA TLAB全部功能中小小一角。为深入 学习MA TLAB,有必要系统介绍一些基本规定。本节先介绍关于变量的若干规定。 一数值的记述 MATLAB的数值采用习惯的十进制表示,可以带小数点或负号。以下记述都合法。 3 -99 0.001 9.456 1.3e-3 4.5e33 在采用IEEE浮点算法的计算机上,数值通常采用“占用64位内存的双精度”表示。 其相对精度是eps (MATLAB的一个预定义变量),大约保持有效数字16位。数值范围大308308 致从10到10。 二变量命名规则 变量名、函数名是对字母大小写敏感的。如变量myvar和MyVar表示两个不同的变量。 sin是MATLAB定义的正弦函数名,但SIN,Sin等都不是。 变量名的第一个字符必须是英文字母,最多可包含63个字符(英文、数字和下连符)。 如myvar201是合法的变量名。 变量名中不得包含空格、标点、运算符,但可以包含下连符。如变量名my_var_201是合法的,且读起来更方便。而my,var201由于逗号的分隔,表示的就不是一个变量名。 6

matlab入门经典教程--第四章 数值计算

第四章数值计算 4.1引言 本章将花较大的篇幅讨论若干常见数值计算问题:线性分析、一元和多元函数分析、微积分、数据分析、以及常微分方程(初值和边值问题)求解等。但与一般数值计算教科书不同,本章的讨论重点是:如何利用现有的世界顶级数值计算资源MATLAB。至于数学描述,本章将遵循“最低限度自封闭”的原则处理,以最简明的方式阐述理论数学、数值数学和MATLAB计算指令之间的在联系及区别。 对于那些熟悉其他高级语言(如FORTRAN,Pascal,C++)的读者来说,通过本章,MATLAB 卓越的数组处理能力、浩瀚而灵活的M函数指令、丰富而友善的图形显示指令将使他们体验到解题视野的豁然开朗,感受到摆脱烦琐编程后的眉眼舒展。 对于那些经过大学基本数学教程的读者来说,通过本章,MATLAB精良完善的计算指令,自然易读的程序将使他们感悟“教程”数学的基础地位和局限性,看到从“理想化”简单算例通向科学研究和工程设计实际问题的一条途径。 对于那些熟悉MATLAB基本指令的读者来说,通过本章,围绕基本数值问题展开的容将使他们体会到各别指令的运用场合和在关系,获得综合运用不同指令解决具体问题的思路和借鉴。 由于MATLAB的基本运算单元是数组,所以本章容将从矩阵分析、线性代数的数值计算开始。然后再介绍函数零点、极值的求取,数值微积分,数理统计和分析,拟合和插值,Fourier分析,和一般常微分方程初值、边值问题。本章的最后讨论稀疏矩阵的处理,因为这只有在大型问题中,才须特别处理。 从总体上讲,本章各节之间没有依从关系,即读者没有必要从头到尾系统阅读本章容。读者完全可以根据需要阅读有关节次。除特别说明外,每节中的例题指令是独立完整的,因此读者可以很容易地在自己机器上实践。 MATLAB从5.3版升级到6.x版后,本章容的变化如下: ●MATLAB从6.0版起,其矩阵和特征值计算指令不再以LINPACK和EISPACK库为基础, 而建筑在计算速度更快、运行更可靠的LAPACK和ARPACK程序库的新基础上。因此,虽然各种矩阵计算指令没有变化,但计算结果却可能有某些不同。这尤其突出地表现在涉及矩阵分解、特征向量、奇异向量等的计算结果上。对此,用户不必诧异,因为构成空间的基向量时不唯一的,且新版的更可信。本书新版全部算例结果是在6.x版上给出的。 ●在5.3版本中,泛函指令对被处理函数的调用是借助函数名字符串进行的。这种调用 方式在6.x版中已被宣布为“过渡期允许使用但即将被淘汰的调用方式”;而新的调用方式是借助“函数句柄”进行的。因此,关于述泛函指令,本章新版着重讲述如何使用“函数句柄”,同时兼顾“函数名字符串”调用法。 ●MATLAB从6.0版起,提供了一组专门求微分方程“边值问题”数值解的指令。适应这 种变化,本章新增第4.14.5节,用2个算例阐述求解细节。 ● 5.3版中的积分指令quad8已经废止;6.x版启用新积分指令quad l;6.5版新增三重 积分指令triplequad。本章新版对此作了相应的改变。 4.2LU分解和恰定方程组的解

相关文档
最新文档