您的位置:首页 > 编程语言 > MATLAB

matlab基础

2015-08-17 16:26 423 查看
以前做课题全C/C++用的居多,matlab用的较少,所以好多基础用过就忘了,没用形成一套系统,所以今天就把matlab所有的基础都记录总结一下,以后就可以在线查阅。

首先,matlab是MATrix LABoratory的缩写,是一款由美国The
MathWorks公司出品的商业数学软件。MATLAB是一种用于算法开发、数据可视化数据分析以及数值计算的高级技术计算语言和交互式环境。除了矩阵运算、绘制函数/数据图像等常用功能外,MATLAB还可以用来创建用户界面及与调用其它语言(包括C,C++,Java,PythonFORTRAN)编写的程序。

尽管MATLAB主要用于数值运算,但利用为数众多的附加工具箱(Toolbox)它也适合不同领域的应用,例如控制系统设计与分析、图像处理、信号处理与通讯、金融建模和分析等。另外还有一个配套软件包Simulink,提供了一个可视化开发环境,常用于系统模拟、动态/嵌入式系统开发等方面。这些基本的功能在matlab的命令窗口中用doc命令查询。下面就进入基本的语法等.

1.MATLAB常用的命令(控制窗口)

这一部分和linux或者window的命令类似,cd:切换目录;pwd:显示当前路径;dir:列出指定目录下的文件或者目录。其他的控制命令如下:



2.matlab指令窗的标点符号

这些标点符号都有特殊的意义,所以不能乱用,标点符号和意义如下:



Note:matlab和很多命令(matlab的命令窗口就是一个脚本窗口,所以能完成脚本命令的很多功能(类似linux的终端,win的cmd)),这一就不意义例举了,可以上百度搜索“matlab命令大全”,可以下载PDF,里面总结的很详细。下面开始介绍matlab的语法。

3.matlab数据结构和运算

matlab最核心的内容是数组和数组运算,

3.1数组运算和矩阵运算

A = [1,2,3;4,5,6;7,8,9];
B = A;
C = A*B;%矩阵乘法;
D = A.*B;%数组乘法(对应相承)
%注意,数组运算比矩阵运算多一个‘.’号,可以理解为点乘(对应元素相乘)其他的运算符类似。


note:matlab预定义变量,常见的有:pi(3.14....),inf(无限大值)等。

数组array和矩阵mat的区别,mat是array的特殊情况。这里主要介绍数组的初始化,主要有如下:

A = [1,2,3;4,5,6;7,8,9];%逗号
B = [1 2 3;4 5 6;7 8 9];%空格
index = 1:2:10;%冒号,主要生成一维数组,常用在for等循环语句
y = linspace(a,b,n);%采样函数生成,同样也是主要生成一维数组
C = ones(4);eye(5);zeros;%标准的数组生成函数


3.2数组的查询和赋值

A = [1,2,3;4,5,6;7,8,9];%逗号
A(1,3);%6
A(:,3);%第三列
A(:);%每列首位相连,形成一维列向量:1,4,7,2,5,8,3,6,9,
3.3数组的运算

符号运算,在前面都有了,这里主要提醒一下,点乘,点除,点幂运算,和矩阵运算相比,在‘*’前面多以个‘.’号;如,矩阵的幂运算A^3,点幂则为A.^3;

其他的数学函数,同样,百度“matlab”命令大全,里面很全面。略过

3.4关系运算和逻辑运算

关系操作符:和C语言不同点:不等符号为:~=,语言中为:!=;

逻辑运算:&,|,~,(注意,和C语言的区别,&&,||,!,而C语言的位的逻辑运算为&,|,~)

xor(异或),any(取反),all(同或)

3.5 数组的扩展

A = [1,2,3;4,5,6;7,8,9];%逗号
B=A;
C = [A B];%横向排列连在一起
D = [A;B];%纵向排列连在一起
%还有各种函数reshape,重拍数组,repmat,magic等
3.5多维数组

个人认为这是很重要的部分,由于matlab没有容器,不像C/C++,用容器就能实现多为数组,那么matlab直接有多维数组,让运算不仅仅局限于一维,二维。多维数组主要还是要理解多维的内在原理,那么使用起来就很简单。这里只介绍初始化等简单的操作,其他运算和二维数组类似。

%A(row,col,page) = 1;%注意在C/C++中的习惯是row,和col是排列在最后的下标(嵌套在里层的数据结构)
A(3,4,2,3,3) = 1


3.6字符数组

C = rand(1,4);
C_str = num2str(C,2);%整数转换为字符串
B = sscanf(C_str,'%f',[3,2]);%转换为3X2的数组
A= sprintf('a%i.jpg',1);% 格式化输出A=a1.jpg

%文件操作
fs = fopen('test.txt','w');
fprintf(fs,'%i\t%i\n',1,3);
fclose(fs);
note:字符串的比较:strcmp(str1,str2,比较个数);

字符串的查询:findstr(),strrep(),查询和替换字符串。

3.7结构数组(struct())

结构数组比元胞更方便,常用,类似C中的结构体,初始化不同:

%直接赋值语句
b1.name = 'asd';
b1.test = [1 2 3;4 5 6];
a = b1;
a.name;%结构数组的元素访问
%用函数sturct()略
到此数组的介绍差不多了,后续涉及到很多线性代数的求解计算的函数,以及符号运算,比如矩阵的逆运算('),行列式,特征值,稀疏矩阵,QR分解,非线性方程的求解,函数的极值求解,多项式及拟合,数值微分等等,这些就不一一介绍了,都是一些函数,用的时候会查就行了。我是觉得matlab主要是仿真数据,所以不用考虑效率的问题,所以不用很精通,会用就行了。

4 matlab编程基础

matlab的数据类型有:数字型,逻辑型,字符和字符串,函数句柄等,相比C/C++少很多。常用的查看操作如下:

a = 10;
isa(a,'double');%ans = 1;为真
isa(a,'char');%ans=0;其他类型如'cell'
%字符串数组
b = 'hi, hello matlab!';
size(b);% 为17,计算会加上空格
ischar(b);%ans=0,假
其他的字符串操作函数,如比较大小,大写小写变换,等此处就不介绍了,不用记住,知道就行。

4.1 matlab控制语句(和C/C++对比一下)

for index = 初值:步长:终值 %初值 <= index <= 终值
循环体
end
%
while 表达式
循环体
end
%
if 表达式
执行语句
elseif 表达式
执行语句
end
%注意 分支结束没有break;
switch(表达式)
case 表达式2的值
执行语句
otherwise ..
end


note:return,被break语句,这个和C/C++的功能一样,特别注意,matlab的switch语句中并没有break

4.2 I/O操作

直接用load,用法:load 'xxx.txt'; load file.mat

文件读写,和C/C++的类似,前面有一个列子已经涉及到了,这里主要提及一下主要的相关函数有:fopen(),fclose(),fprintf(),fscanf(),fread(),fwrite()fget()等;

4.3面向对象

matlab也有结构体,类,也能继承等,但是自己测试后发现并非像C++那样封装的很好,个人一点都没觉得有封装这个意思,之后和一同学讨论了一下,他接触matlab也从来不用结构体什么的,所以我也就放弃这一块了。

5 图像基础

绘图的主要思路:1.准备数据,2.选定图像窗口figure(1),subplot(2,2,1),3.基本的绘图函数plot(),4.其他属性设置(颜色,文字说明等,set()),5.打印(print -depsc -tiff -r200 myplot等),其实在绘图后,这些都可以在GUI里面手动鼠标设置。

到此:matlab的总结就结束了,以后会多接触在图像方面的应用
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: