matlab学习笔记

0、时刻用help来提示帮助你所需要的信息。

1、保存文件名字的时候不要和关键词同名,需要以字母开头,和变量名的定义类似。特别需要注意的是不要和已有的函数(系统函数或者是自己的函数)同名,否则会发生错误!

2、注意数组(矩阵)和数字的数学运算的区别。

3、画图像时注意x和y用逗号隔开,最后要加上修饰的话用两个单引号,具体格式看书本P57面。

4、.*是矩阵相对应的元素相乘,*是线代矩阵的乘法

5、画图像的时候用hold on可以在一个图形figure中画出多个函数的图形,注意最后要用hold off结束。

6、画图时如果要同时画出多个figure,需要用figure(1)和figure(2)等等来表示。注意一个 figure 就是一个图形窗口。

7、注意写.m文件的时候语句后面加不加分号的区别。(一个是将其结果隐藏,一个是显示)

8、变量名的定义总结:
在MATLAB中的变量名只能是以字母开头,后面接上字母或者数字或者是下划线,其中不允许出现其他的符号,否则将发生错误。(变量名是大小写敏感的,还有就是名称不能超过32个字符,超过部分系统将舍弃)
Conclusion: the variable names in MATLAB only begin with a letter, behind letters or digital or underline, which is permitted other symbols, otherwise an error will occur. (variable names are case sensitive, and there is a name can't more than 32 characters, exceed a share system will abandon)

9、当函数含有多个返回值的时候可以设置一个与其个数相同的矩阵来接受这个函数的返回值比如如果function_comp4()含有4个返回值,可以用[a b c d]=function_comp4()接受函数的返回值。如果要看到自己写的函数的帮助的文档,需要把这个函数的M文件添加到当前的路径当中。

10、函数abs(a)表示求a变量的绝对值。(用于复数的运算)

11、函数angle(a)用于求复数a的角度。real(a)和imag(a)求实部和虚部。
rot90(a)将数组a转90度。det(a)(a为方阵)行列式的值。fliplr(a)将a左右翻转,flipud(a)将a上下翻转。

12、关于ones()和eye()还有zeros()的用法参考P29。

13、 关于load:
LOAD Load data from MAT-file into workspace.
S = LOAD(FILENAME) loads the variables from a MAT-file into a structure array, or data from an ASCII file into a double-precision array.

14、grid on 和grid off 的用法。legend(‘ ’)用于图像的标志。

15、注意语句结构中的end,时刻提醒,注意程序的结构清晰!变量赋值的时候不能连等。注意 fprintf(‘’,) 和 disp(‘’)的区别。

16、在一个 figure 中画出多个函数图形的时候注意 subplot 的用法。

17、在画图像时标注 title 是时如果要画出特殊的符号,注意要

用‘\_____’来表示。详解P116.

18、关于文件路径的设置问题,进入 file---set path... 点击你的 mfile 文件的保存路径,点击保存即可。

19、注意legend() 的使用时,如果是先画的哪个,就应该把这个写在前面!
example:
plot(t,U,'r--');
hold on;
plot(t,i,'b-.');
hold off;
legend('i','U');
如果是这样写的,直接导致的结果就是 i 是 r--,而U是b-. 。
应该写成legend('U','i');!!!

20、在画图行的时候,如果是legend('i_1'),画出来的图形的标识1将会是 i 的下脚标。

21、在画图行时加注XLABEL YLABEL的时候注意用法
%title('\bf The figure diaplay the relationship between frequency and voltage')
xlabel('\bfFrequency (hz)')
ylabel('\bfVoltage (v)')
语句后面注意不要加上分号?

22、 LOGLOG Log-log scale plot.
LOGLOG(...) is the same as PLOT(...), except logarithmic(对数)
scales(缩放) are used for both the X- and Y- axes.

SEMILOGX Semi-log scale plot.
SEMILOGX(...) is the same as PLOT(...), except a
logarithmic (base 10) scale is used for the X-axis.

23、mex文件

.MEX文件是一种“可在matlab环境中调用的C(或fortran)语言衍生程序”。也就是说,MEX文件的源码文件是由C或Fortran语言编写的,后经matlab编译器处理而生成的二进制文件;它可以被matlab解释器自动装载并执行的动态链接程序,这种文件在windows下是dll文件。

24、关于循环和C语言的区别:结构化程序设计语言的架构里面都含有end这句!
还有就是while后面不需要加上括号和分号。
在for循环中如果变量 ii=[1 2 3 4;5 6 7 8],是一个矩阵形式,那么在循环的过程中是一列一列的加,加出来的结果是一个矩阵(特别注意!只有1列,有M行,相当于是把每一行的数据加起来再组成一个一列的矩阵)。
还有就是break和continue的用法是和C语言的一样。

25、判断一个变量是否等于某一个具体的值,跟C语言的语法是一样的:“==”表示。

26、如果在程序中要显示某个变量的值,不要在这个变量后面加上分号就可以了。

27、注意矩阵的表示方法类比于C中的数组的表示方法的区别:就是MATLAB中的"a(0)"是错误的,矩阵的第一个数字的表示为"a(1)"。

28、注意矩阵在内存中的表示和C中的数组在内存中的表示的区别:
MATLAB中:比如有如下的矩阵
a=
1 2 3
4 5 6
7 8 9
在内存中的表示为
1 a(1,1)
4 a(2,1)
7 a(3,1)
2 a(1,2)
5 a(2,2)
8 a(3,2)
3 a(1,3)
6 a(2,3)
9 a(3,3)
比如a(5)表示的是5这个数字,a(2)表示的是4这个数字。

29、注意在调用disp()函数的时候如果显示的是字符的数组的话,用下面这种格式:
disp([''_''_'']) (空格隔开) 。 可以在.M文件中的代码可以写command window中

的指令,比如加上一句clc。

30、关于MATLAB自定义函数的几点注意:
Function (1)=(2)(x,y,z)
(1)=_______;
其中(1)指的是变量来接受函数的返回值的(随便写),(2)的是函数的名称,后面的x,y,z是函数的参数,特别注意的是这个.M文件在保存时文件名字要与你的函数的名称相同。也可以直接在command window中来调用函数。注释行的作用有两点:一是随着M文件全部显示与打印时,直接起解释提示作用;二是提供help指令与lookfor指令的帮助文档!
还有需要注意的是,函数调用时各个参数出现的顺序和个数,应与函数定义时形参的顺序、个数一致,否则会出错。

31、有关复数的运算的函数,详细参考P245.

32、关于disp()的用法:
disp(['The step is ' num2str(i) 'The sum is ' num2str(sum)]),显示的是字符串的数组,用【】表示,还要特别的注意在字符串之间的空格一定要加上,注意什么时候该加‘’,什么时候不加。

33、for i=[1 2 3 4 5 6]
sum=sum+i
i=i+N;
end
注意有没有i=i+N(N是任意的数据)这句话结果是一样的,也就是说如果for后面的语句如果是将一个矩阵赋值给这个变量的话,在for循环里面不加上改变循环条件的语句也是可以的,变量会自动的加一。

34、关于load的用法:
LOAD Load data from MAT-file into workspace.
S = LOAD(FILENAME) loads the variables from a MAT-file into a structure
array, or data from an ASCII file into a double-precision array.
>> a=[1 2 3 4;5 6 7 8]
a =
1 2 3 4
5 6 7 8
>> b=[1 2 3;4 5 6]
b =
1 2 3
4 5 6
>> save madata
>> load madata
>> clear
>> load madata
>> load('D:\Program Files\MATLAB 2010b\bin\madata.mat')
>> clear
>> load('D:\Program Files\MATLAB 2010b\bin\madata.mat')
>> load('madata.mat', 'a') %单个的添加变量
>> load('madata.mat', 'b')

35、常用的数学常量:
pi 圆周率 inf 无穷大 NaN 非数值
i 虚数虚部单位 j 虚数虚部单位 与i相同在2010b中相同。

36、EXIST Check if variables or functions are defined.
EXIST('A') returns:
0 if A does not exist
1 if A is a variable in the workspace
2 if A is an M-file on MATLAB's search path. It also returns 2 when
A is the full pathname to a file or when A is the name of an
ordinary file on MATLAB's search path
3 if A is a MEX-file on MATLAB's search path
4 if A is a MDL-file on MATLAB's search path
5 if A is a built-in MATLAB function
6 if A is a P-file on MATLAB's search path
7 if A is a directory
8 if A is a class (EXIST returns 0 for Java classes if you
start MATLAB with the -nojvm option.)

37、注意 sym (帮助文档:SYM Construct symbolic numbers, varia

bles and objects. S = SYM(A) constructs an object S, of class 'sym', from A.)和 format 用法的区别,他们两个都是数据格式的显示命令。sym只是临时改变数据的显示格式,用法为sym(变量名,‘参数’),其中参数为d则显示十进制数,为f显示浮点型数...format可以说是设置整个系统的数据的输出格式。用法P40.还有一个设置数据格式的命令函数vpa(帮助文档: VPA Variable precision arithmetic.
R = VPA(S) numerically evaluates each element of the double matrix
S using variable precision floating point arithmetic with D decimal
digit accuracy, where D is the current setting of DIGITS.
The resulting R is a SYM.)
比如vpa(pi,780)既是将 vpa(pi,780) shows six consecutive 9's near digit 770 in the decimal expansion of pi.

38、矩阵以及矩阵的运算:
>> a=[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> [m,n]=size(a) %m行,n列
m =3
n =3
>> b=length(a) %求a的行、列两个值里面的最大值
b =3
>> b=length(size(a))
b =2
>> max(size(a)) %等于b=length(a)
ans =3
>>c=[a;11 22 33] %MATLAB允许把矩阵作为元素来建立新的矩阵
c =
1 2 3
4 5 6
7 8 9
11 22 33
>> a(3,4)=99 %a(3,4)超出原矩阵的范围,MATLAB会自动扩展原来的矩阵,没赋值的元素置零
a =
1 2 3 0
4 5 6 0
7 8 9 99
>> a(4,5)=99
a =
1 2 3 0 0
4 5 6 0 0
7 8 9 99 0
0 0 0 0 99
还有对子矩阵的处理:
a(1:3,1:2:5)表示取矩阵a的第一行到第三行,且位于1,3,5列上面的所有元素子矩阵...a(1,:)表示执行第一行的所有列。
>> v=[1 2 3 4]
v =1 2 3 4

>> a=diag(v) %构造一个对角矩阵
a =
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
上三角矩阵和下三角矩阵:triu() tril()
伴随矩阵构造函数compan(A) A只能是一个vector
矩阵的转置:
>> a=[1 2 3;4 5 6;7 8 9]
a =
1 2 3
4 5 6
7 8 9
>> b=a'
b =
1 4 7
2 5 8
3 6 9
>> c=a.'
c =
1 4 7
2 5 8
3 6 9
>> d=[-2-j 4+5j;5-7i 9+2i]
d =
-2.0000 - 1.0000i 4.0000 + 5.0000i
5.0000 - 7.0000i 9.0000 + 2.0000i
>> e=d'
e =
-2.0000 + 1.0000i 5.0000 + 7.0000i
4.0000 - 5.0000i 9.0000 - 2.0000i
>> f=d.'
f =
-2.0000 - 1.0000i 5.0000 - 7.0000i
4.0000 + 5.0000i 9.0000 + 2.0000i
矩阵的除法:左除'\'和右除'/'
'A\B'表示为矩阵A的逆和矩阵B相乘的结果相同
'A/B'表示为矩阵A与矩阵B的逆相乘的结果相同
矩阵的乘方:
A^3表示为3个矩阵A相乘的结果。

39、如何求解多项式的根:比如说按

降幂排列的某个系统的特征方程s^3+4*s^2-s+6=0
构造矩阵a=[1 4 -1 6]
roots(a),即可求解方程的根。注意默认项目的0不能省略!

40、精简矩阵(sparse array):只有其中的非零占用内存,其余的0全部不占用存空间,例如:把一个矩阵变成一个精简矩阵
>> a=2*eye(5)
a =

2 0 0 0 0
0 2 0 0 0
0 0 2 0 0
0 0 0 2 0
0 0 0 0 2

>> as=sparse(a) 产生一个sparse 矩阵
as =

(1,1) 2
(2,2) 2
(3,3) 2
(4,4) 2
(5,5) 2
>> whos 查看内存形式
Name Size Bytes Class Attributes
a 5x5 200 double
as 5x5 84 double sparse
>> b=speye(3) 直接产生一个sparse 矩阵
b =
(1,1) 1
(2,2) 1
(3,3) 1
>> bb=full(b) 将一个sparse 矩阵转换成一个full matrix
bb =

1 0 0
0 1 0
0 0 1

41、
>> c={[1 2;3 4],'dogs';'cats',i}
c =
[2x2 double] 'dogs'
'cats' [0 + 1.0000i]
>> c{1 1}(1 2)
??? c{1 1}(1 2) |
Error: Unexpected MATLAB expression.
>> c{1,1}(1 2)
??? c{1,1}(1 2) |
Error: Unexpected MATLAB expression.
>> c{1,1}(1,2)
ans =
2

42、今天无意中发现了一个很好的东西...在编程的edit环境下面的右下角可以直接看出整个代码的的编译错误和警告,很好很强大。但是关于参数的设置,为什么要用这个~来代替这个警告的参数。点击蓝色的警告或者错误信息,可以弹出帮助对话框。

43、在MATLAB里面输入虚数的时候,即可以是i,也可以是j,最好是写成1i的形式a=0.04+0.12*1i;这才是标准的,否则会给警告 replace complex i and j by
1i for speed and improved robustness.

44、注意MATLAB里面的不等于符号是 ‘~=’,不是‘!=’。

45、
NAN Not A Number就是代表不是一个数据
经常用在下面两种情况:
1.数据处理时,在实际工程中经常数据的缺失或者不完整,此时我们可以将那些缺失设置为nan,Matlab处理缺失的数据时就会跳过或者其他处理——这个是Matlab优越于其他语言的表现之一。另外但读取数据时,某个字符不是数据,那么Matlab自动将它认为nan处理

比如Matlab中提供的nanmean, nanmax, nanmin, nanstd, nansum, nanvar这么多函数可以处理包含nan的数据

2.还有就是绘图的时候,如果我们想挖掉一部分,那么nan就起作用了

46、关于MATLAB的注释技巧:
matlab中如何进行多行语句注释
A.

%{ 行列行注释: 选中要注释的若干语句, 编辑器菜单Text->Comment, 或者快捷键Ctrl+R

取消注释: 选中要取消注释的语句, 编辑器菜单Text->Uncomment, 或者快捷键Ctrl+T

C.

if LOGICAL(0)

语句

end

47、魔块方阵的建立,意思就是矩阵的各行各列以及对角线元素的和都是相等的。
函数magic

48、用MATLAB求解微积分:diff函数
积分:int

49、注意在MATLAB计算三角函数的时候,sin函数系统默认的是弧度制,要想换算成角度,可以调用相应的函数 比如 sind

50、MATLAB中求逆矩阵是inv函数,求转置矩阵是符号“ ' ”

51、在要求计算程序的计算时间时候,可以用 tic 和 toc函数

52、求解排列组合的函数 NCHOOSEK

相关文档
最新文档