Matlab基本用法
转至:http://blog.sina.com.cn/s/blog_8354dda801012dyn.html 目录:
一、说明
二、数据类型及基本输入输出
三、流程控制
四、循环
五、数组、数组运算和矩阵运算
六、M脚本文件和M函数文件、函数句柄
七、文件
八、数据和函数的可视化
一、说明 matlab作为数学软件有其强大的图形用户界面操作、数据和函数的可视化和数值计算功能,且自带很多现有的函数和工具包。而本文只涉及一些比较系统的基本操作,在最后附带介绍一些基本的数据和函数的可视化命令。建议要用的时候再利用matlab自带的帮助文档来搜索有用的函数和工具包。matlab的函数和命令都是比较人性化的,比如想要搜索读取fits文件的函数,搜索fits就能够搜到fitsread函数;需要将读出的fits数据重新做图,搜索image就可以找到imagesc函数。从书和别人的文档都只能学到有限的比较系统的操作,看帮助文档能发现更多的东西并整理出自己的使用方法。
二、数据类型及基本输入输出
1、数据类型,声明及赋初值
matlab中存储的数据类型(class)有以下几种:
而实际上matlab不需要对变量做声明,当它发现一个新的变量名时,将默认将其为双精度浮点类型(double)并分配内存空间。(这比C和 Fortran方便了许多,但在完成大运算量的程序时就显得浪费存储空间了)
当需要把变量a从double转为其他类型的时候,比如要转为int16型,可以使用以下命令:a=int16(a)
当需要创建一个字符型变量x并对其赋初值时,用以下格式:x='字符串';
注意:
(1)在命令后加“;”表示不在command window中显示结果,而对上例来说如果不加“;”则会显示所赋字符串内容。
(2)所有的命令必须在英文输入状态下,如果使用中文输入状态下全角的“;”,将被处理为非法字符。其中logical,cell和structure为逻辑,元胞和构架数组类型,将在后面的数组部分提到;function handle为函数句柄类型,将在后面的“M脚本文件和M函数文件、函数句柄”部分提到;java类供JAVA API应用程序接口使用,本文不进行说明。最后说明一下,matlab也支持复数操作,赋值的时候直接输入即可,比如:a=1+2i;
2、基本输入输出
输入:v=input('message') %将用户输入的内容赋给变量v
v=input('message','s') %将用户输入的内容作为字符串赋给变量v
keyboard %用户可以从键盘输入任意多个指令
v=yesinput('prompt',default,possib)
%prompt为文字提示,default为缺省设置“值”,possib为设置值的范围。
%该指令无法在notebook中运行。
输出:disp(a)
%显示变量a的内容,另一种显示变量内容的方法是输入变量名,但是这样显示的结果带有“a=”。
三、流程控制
1、运算符
(1)关系操作符 == ~= > >= < <=
(2)涉及相互关系的集合运算符 & | ~ xor % xor 相异元素返回1,相同元素返回0
2、IF
(1) 基本 :
if 逻辑判断式
……
end
(2) 多重判断:
if 逻辑判断式
......
else if 逻辑判断式
......
else 逻辑判断式
......
end
end
end
3、switch-case结构和C的switch语句一样
switch 变量
case数值1
……
case数值2
……
case 数值k %当变量等于数值k的时候,执行本组命令,然后跳出该结构。
……
otherwise
…… %该命令可以不存在,在变量不等于前面所有的检测值的时候,执行此组命令。
end case
4、try-catch结构
try %只有当matlab执行本组命令发生错误时,后一组命令才会被执行
……
catch
…… %如果此组命令执行又出错,matlab将终止该结构。
end
%可以调用lasterr函数查询出错原因。如果函数的运行结果为一个空串,则表明这组命令
被成功执行了。
四、循环
1、while
while 表达式
……
end
2、for
for x=数值
……
……
end
%其中的数值可以是数组;或者是类似下面的表达“1:4”,表示从1到4循环;还可以是“1:0.1:4”,表示以0.1为步长从1到4循环。
五、数组、数组运算和矩阵运算
1、 数值数组
matlab中数组不需要声明。
(1)对一维数值数组赋初值
逐个元素输入:x=[1 2 pi/2]
冒号生成:x=1:0.1:4
定数线性采样法:x=linspace (a,b,n)
%相当于第一个数为a,最后一个数为b,以n为采样点数等间距采样。
x=logspace(a,b,n)
%相当于第一个数为10a,最后一个数为10b,以n为采样点数等间距采样。
(2)对一维数值数组的寻访
x(3) %寻访第三个元素
x([1 2 3]) %寻访第1,2,3个元素
x(1:3) %寻访第1到3个元素
x(3:-1:1) %由前三个元素倒排成子数组
x(find(x>0.5)) %由大于0.5的元素构成的子数组
(3)对二维数值数组赋初值
逐个赋值:x=[1,2,3; 3,4,6; 7,8,9]
%“;”为二维数组“行”的分隔符号,而“,”和空格为同一行元素的分隔符。
整列赋值:x(:,[4,5])=4 %第4、5列赋值为4
元素重排:A=reshape(1:9,3,3)
%将1到9重新排列成一个(3*3)矩阵,注意matlab是列“优先”,即先排第一列再排第二列,而不是按行来排。
(4)二维数组元素的标识和寻访
“全下标”标识:A(3,5) %第3行第5列元素
“单下标”标识:对于一个(m*n)维数组A中第r行第c列元素,其“单下标”表示为:A(l) %这里l=(c-1)*m+r
2、数组运算和矩阵运算
(1)数组运算
指令 含义
A.' 相当于conj(A'),conj的作用help一下吧……
A=s 把标量s赋给A的每个元素
s+B 标量s分别与B元素之和
s-B,B-s 标量s分别与B元素之差
s.*A 标量s分别与A元素之积
s./B,B.\s s分别被B的元素除
A.^n A的每个元素自乘n次
A.^p 对A的各个元素分别求非整数幂
p.^A 以p为底,分别以A的元素为指数求幂
A+B 对应元素相加
A-B 对应元素相减
A.*B 对应元素相乘
A./B A的元素被B的对应元素除
B.\A 同上
exp(A) 以e为底,分别以A的元素为指数求幂
log(A) 对A的各个元素求对数
sqrt(A) 对A的各个元素求平方根
f(A) 求A各个元素的函数值
A#B 对应元素的关系运算,#代表关系运算符
A@B 对应元素的逻辑运算,@代表逻辑运算符
(2)矩阵运算
指令 含义
A' 共轭转置
s*A 标量s分别与A元素之积
S*inv(B) B阵的逆乘s
A^n A阵为方阵时,自乘n次
A^p 方阵A的非整数乘方
p^A A阵为方阵时,标量的矩阵乘方
A+B 矩阵相加
A-B 矩阵相减
A*B 矩阵相乘
A/B A右除B
B\A A左除B
expm(A) A的矩阵指数函数
logm(A) A的矩阵对数函数
sqrtm(A) A的矩阵平方根函数
funm(A,'FN') 一般矩阵函数
3、逻辑数组
看例子就明白了:
A=zeros(2,5); %预生成一个(2*5)全零数组
A(:)=-4:5; %运用“全元素”方法向A赋值
L=abs(A)>3 %产生一个与A同维的“0 -1”逻辑值数组
islogical(L) %判断L是否逻辑值数组。输出若为1,则是
X=A(L) %把L中逻辑值为1对应的A元素取出
4、字符串数组
(1)字符串数组赋初值 S=['aa''bb']
或者:S=char('aa','bb')
还可以:S=str2mat('aa',' ','bb') %这里空串会产生空行
而:S=str2cat('aa',' ','bb') %这里空串不会产生空行
(2) 字符串操作函数
int2str %把整数数组转换为串数组
num2str %把非整数数组转换为串数组
mat2str %把数值数组转换为串数组
%请使用help搜索其他的字符串操作函数。
5、元胞数组
元胞数组和一般数值数组和字符串数组不同,其元素可以是任意类型和大小的对象。这
和C的结构型数组有些类似。
(1)创建元胞数组
有以下两种创建方式:
外标识元素赋值:
a=char('aa' 'bb');
b=1:9;
c=2:5;
d=[1+2i];
A(1,1)={a}; A(1,2)={b}; A(2,1)={c}; A(2,2)={d};
内涵的直接赋值:
a=char('aa' 'bb');
b=1:9;
c=2:5;
d=[1+2i];
A{1,1}=a; A{1,2}=b; A{2,1}=c; A{2,2}=d;
(2)元胞数组内容的调取
注意在这里()访问的是元胞,用{}访问的是元胞中存储的内容。
比如:a=A(1,1)
显示:a=[12 char]
而:a=A{1,1}
显示:a=aabb
所以用{}而不是()调取元胞数组内容。
6、构架数组
构架数组和元胞数组类似,但其每个构架(地位相当于元胞数组的元胞)必须划分“域”
后才能使用。看下面的例子:
green_house(2,3).name='六号房';
green_house(2,3).param.temperature=30;
green_house(2,3).param.humidity=10;
green_house
屏幕显示:
23 struct array with fields:
name
param
注意:
(1)在一个构架上进行的增减域的操作会影响到整个数组。
(2)增减子域不会影响到其他构架。
7、空数组
(1)有下面几种产生空数组的方法:
a=[]
b=ones(2,0) %ones的作用原本是产生一个全1的数组
c=zeros(2,0) %zeros的作用原本是产生一个全0的数组
d=eye(2,0) %eye的作用原本是产生一个对角元全为1的数组
f=rand(2,3,0,4) %rand的作用原本是产生随即数组。
(2)空数组可用于子数组的删除和数组大小的收缩
A(:,2)=[]
六、M脚本文件和M函数文件、函数句柄
m文件分两种:函数和脚本。
1、matlab script file:
脚本文件没有输入输出,对工作空间(workspace)中的变量进行操作。
任何可执行的matlab命令都可以写入脚本文件。
先来看一个简单的例子:
例1: 产生一个20元素的一维随机数组并画出。
解: 新建一个m文件命名为randplt.m(或者任何你喜欢的名字), 在其中加入如下两行代码:
data=randn(1,20);
plot(data);
保存后选择debug/run菜单或按F5键运行,观察workspace中多出了一个变量data。
脚本文件执行时, 就如同将文件中的每一条命令依次输入到matlab命令行中一样, 顺次执行。你可以尝试在command history窗口中按住ctrl键选择几行执行过的命令并单击鼠标右键在快捷菜单中选择creat M file来快速创建一个m文件。
2、matlab function
函数文件可以接受输入和给出输出,当然也可以没有,就像c语言的函数。matlab函数最大的书写特点(同C比起来)是它的输出变量定义在函数名前面。看一例:
例2: matlab内部函数std给出数组的标准差std=sqrt(sum(X)/N),编写函数stderr求实验误
差err=sqrt(sum(X)/(N*(N-1))), 代码如下:
function err=stderr(arr)
%实验误差(标准差估计)
�culate along each column of arr
err=std(arr)./sqrt(size(arr,1)-1);
文件存为stderr.m, 运行时输入a=[1;2;3];建立一个列数组a, 然后输入stderr(a)则给出a的方差。(若输入行数组则发散,因N-1=0)
此例中输入变量为arr, 函数名为stderr, 输出变量err, 此三者皆写在关键字function后面同一行。无需再使用return将err的值返回。
注意:
(1)函数文件的命名要使用文件内主函数声明的名称,否则出错。
(2)函数内部可以嵌套子函数并为该文件的主函数调用,只需将子函数写在主函数代码后面。
(3)一个函数可以有多个输入输出。如function [y1,y2]=myfun(x1,x2,x3)
例1中的m文件可在第一行前插入一行:
function randplt
保存后则该文件成为一个没有输入输出宗量的函数。
一般来说matlab中执行同样的任务使用函数文件比脚本文件的效率高。
3.函数句柄的使用
函数句柄起到c语言中函数指针的作用。
例3: 编写函数求出数组arr1和arr2的标准差(std)以及误差(stderr)。
解: 编写如下文件并保存为erreval.m
function [s1,s2]=erreval_r(err,arr1,arr2)
% err为所调用的误差函数,s1,s2分别返回arr1和arr2的误差。
s1=feval_r(err,arr1);
s2=feval_r(err,arr2);
此文件的输入包含"函数变量", 通过函数句柄实现函数变量err的赋值。
运行时先运行如下命令建立数组arr1,arr2:
arr1=[1;2;3];
arr2=[10;20;30];
然后输入
[std1,std2]=erreval_r(@std,arr1,arr2)
[stderr1,stderr2]=erreval_r(@stderr,arr1,arr2)
执行后返回四个误差值。
@std,@stderr为两误差函数的函数句柄。
七、文件 打开文件:
fid = fopen(filename,permission)
%其中的permission为打开类型,具体可查阅matlab的帮助文档。
读文件:
[A,count] = fread(fid,size,precision)
%A 为存放读入数据的变量。
%count 为可选参数,存放成功读取的数据个数。
%fid 为文件指针。
%size 为要求读入的数据量大小,缺省状态下读到文件末尾。
%presision 为读出数据格式。
写文件:
count = fwrite(fid,A,precision)
八、数据和函数的可视化 图像的精细控制大有文章可做,这里只介绍一些做图最常用的基本命令。
1.二维数据的可视化
设x,y为两等长的一维数组,若要将x,y对应位置的元素做图,可使用以下命令:
plot(x,y);
如果使用:
plot(x);
就相当于:
s=size(x);
plot(x,[1:s(2)]);
我们可以对线型和色彩做控制,比如plot(x,y,'.r')画出的是红色点线。
线型和色彩控制值如下表:
线型 符号含义
- 实线
: 虚线
-. 点划线
-- 双划线
色彩 符号含义
b 蓝
g 绿
r 红
c 青
m 品红
y 黄
k 黑
w 白
2.三维数据的可视化
plot3最容易理解:
plot3(X,Y,Z);
另外的两个基本命令是:
mesh(X,Y,Z) %画网线图。
mesh(Z) %以Z矩阵列行下标为x,y轴自变量画网线图。
surf(X,Y,Z) %画曲面图。
surf(Z) %以Z矩阵列行下标为x,y轴自变量画曲面图。
3.图像控制命令
figure %打开新的作图窗口
axis([0,pi,-1,1]) %控制坐标轴的范围
title('pic') %为图像增加标题
grid on %显示坐标网格
legend %显示图例
hold on %在画下一幅图的时候,保留之前的图。
hold off %停止保留之前的图。
colorbar %显示颜色条
box on %显示三维图的长方体边框
%全文结束。
Matlab基本用法的更多相关文章
- matlab fscanf用法
matlab fscanf用法 matlab中的fscanf的用法如下: A=fscanf(fid,format)[A, count]=fscanf(fid,format,size) [A, coun ...
- Matlab norm 用法小记
Matlab norm 用法小记 matlab norm (a) 用法以及实例 norm(A,p)当A是向量时norm(A,p) Returns sum(abs(A).^p)^(1/p), for ...
- matlab fspecial 用法解释
Matlab 的fspecial函数用法 fspecial函数用于建立预定义的滤波算子,其语法格式为:h = fspecial(type)h = fspecial(type,para)其中type指定 ...
- Matlab的用法总结
1. 对序列进行洗牌 randperm() randperm()产生随机的序列 %if filepaths 是一个5*1的结构体,then cshuffle = randperm(length(fil ...
- matlab ()的用法
经常见到标识符+(),用法比如阵列Y().函数f()..... 时机到了,会总结一下.
- MATLAB入门教程
MATLAB入门教程 1.MATLAB的基本知识 1-1.基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可.例如: ...
- (转)MATLAB入门教程
MATLAB入门教程 1.MATLAB的基本知识 1-1.基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可.例如: ...
- Matlab各种拟合
作者:Z-HE链接:https://zhuanlan.zhihu.com/p/36103034来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1) polyfit 代码 ...
- matlab代码学习_2018-7-28
1.核范数||A|| * 是指矩阵奇异值的和,英文称呼叫Nuclear Norm.matlab code:[s, u, v] = svd(A); nulear_norm = sum(diag(s)); ...
随机推荐
- linux上NFS性能参数
linux nfs客户端对于同时发起的NFS请求数量进行了控制,若该参数配置较小会导致IO性能较差,查看该参数: cat /proc/sys/sunrpc/tcp_slot_table_entries ...
- 使用 Apache Commons CLI 开发命令行工具示例
Apache Commons CLI 简介 Apache Commons CLI 是 Apache 下面的一个解析命令行输入的工具包,该工具包还提供了自动生成输出帮助文档的功能. Apache Com ...
- Atitti html5 h5 新特性attilax总结
Atitti html5 h5 新特性attilax总结 Attilax觉得不错的新特性 3.语义Header和Footer (The Semantic Header and Footer) 8.占位 ...
- How To Download Youtube Videos Without any software
https://www.quora.com/What-is-the-best-way-to-download-YouTube-videos-for-free There are various met ...
- regularization
https://www.zhihu.com/question/20924039 http://52opencourse.com/133/coursera%E5%85%AC%E5%BC%80%E8%AF ...
- angular指令中使用ngModelController
在这篇文章中 angular学习笔记(三十)-指令(10)-require和controller 说到了通过require属性和controller参数来让指令与指令之间互相交互. 本篇主要介绍的是指 ...
- 隐藏和显示服务器端控件以及Html控件
隐藏和显示服务器端控件以及Html控件 /// <summary> /// 隐藏控件 /// </summary> /// <param name="contr ...
- 【Linux技术】Windows与Linux系统下的库·初探
库的定义 库文件是一些预先编译好的函数的集合,那些函数都是按照可再使用的原则编写的.它们通常由一组互相关联的用来完成某项常见工作的函数构成,从本质上来说库是一种可执行代码的二进制形式,可以被操作系统 ...
- Java的数组和list升序,降序,逆序函数Collections.sort和Arrays.sort的使用
list升序,降序,逆序List<Integer>list =new ArrayList<Integer>();//如果list是 5 7 2 6 8 1 41.升序:Coll ...
- 【论文笔记】多任务学习(Multi-Task Learning)
1. 前言 多任务学习(Multi-task learning)是和单任务学习(single-task learning)相对的一种机器学习方法.在机器学习领域,标准的算法理论是一次学习一个任务,也就 ...