3个回答
展开全部
MATLAB基本的使用方法
1. 读取图像:用imread函数读取图像文件,文件格式可以是TIFF、JPEG、GIF、BMP、PNG等。比如
2. >> f = imread('chestxray.jpg');
读进来的图像数据被保存在变量f中。尾部的分号用来抑制输出。如果图片是彩色的,可以用rgb2gray转换成灰度图:
>> f = rgb2gray(f);
然后可以用size函数看图像的大小
>> size(f)
如果f是灰度图像,则可以用下面的命令把这个图像的大小赋给变量M和N
>> [M, N] = size(f);
用whos命令查看变量的属性
>> whos f
3. 显示图像:用imshow显示图像
4. imshow(f, G)
其中f是图像矩阵,G是像素的灰度级,G可以省略。比如
>> imshow(f, [100 200])
图像上所有小于等于100的数值都会显示成黑色,所有大于等于200的数值都会显示成白色。pixval命令可以用来查看图像上光标所指位置的像素值。
pixval
例如
>> f = imread('rose_512.tif');
>> whos f
>> imshow(f)
如果要同时显示两幅图像,可以用figure命令,比如
>> figure, imshow(g)
用逗号可以分割一行中的多个命令。imshow的第二个参数用一个空的中括号:
>> imshow(h, [])
可以使动态范围比较窄的图像显示更清楚。
5. 写图像。用imwrite写图像
6. imwrite(f, 'filename')
文件名必须包括指明格式的扩展名。也可以增加第三个参数,显式指明文件的格式。比如
>> imwrite(f, 'patient10_run1.tif', 'tif')
也可以写成
>> imwrite(f, 'patient10_run1.tif')
还可以有其他参数,比如jepg图像还有质量参数:
>> imwrite(f, 'filename.jpg', 'quality', q)
q是0到100之间的一个整数。对比不同质量的图像效果。用imfinfo命令可以查看一个图像的格式信息,比如
>> imfinfo bubbles25.jpg
可以把图像信息保存到变量中
>> K = imfinfo('bubbles25.jpg');
>> image_bytes = K.Width * K.Height * K.BitDepth / 8;
>> compressed_btyes = K.FileSize;
>> compression_ratio = image_bytes / compressed_bytes
7. 数据类型。MATLAB的数据类型包括:
8. double 双精度浮点
9. uint8 无符号8位整数
10. uint16 无符号16位整数
11. uint32 无符号32位整数
12. int8 有符号8位整数
13. int16 有符号16位整数
14. int32 有符号32位整数
15. single 单精度
16. char 字符
17. logical 逻辑型(二值)
数据类型转换
B = data_class_name(A)
比如
>> C = [1.4 1.5]
>> D = uint8(C)
图像类型分为:
Intensity image 灰度图
Binary image 二值图
Indexed image 索引图
RGB image 彩色图
在灰度图中每个像素可以是整型、浮点型或者逻辑型。图像类型的像素类型可以转换
function to from
im2uint8 uint8 logical,uint8,uint16,double
im2uint16 uint16 logical,uint8,uint16,double
mat2gray double double
im2double double logical,uint8,uint16,double
im2bw logical uint8,uint16,double
比如
g = mat2gray(A, [Amin, Amax]);
g = mat2gray(A);
g = im2double(h);
g = im2bw(f, T)
其中A是浮点型的图像,Amin和Amax是浮点数的范围,h和f是任意类型的图像,T是分割的阈值。
18. 数组(向量)索引:创建向量(数组):
19. >> v = [1 3 5 7 9 11 13]
用小括号对向量进行索引(取数组中的某个元素):
>> v(2)
转置(将行向量通过转置变成列向量):
>> w = v.'
取向量其中的一部分:
>> v(1:3) 第1个到第3个
>> v(2:4)
>> v(3:end) 第3个到最后一个
>> v(1:end)
>> v(:) 全部
>> v(1:2:end) 第1个到最后一个,每次增加2
>> v(end:-2:1) 最后一个到第1个,每次减2
其中end总是表示最后一个。
>> x = linspace(1, 5, 10)
>> v([1 4 5])
linspace函数产生一个范围内的平均分布。
20. 矩阵索引:创建矩阵
21. >> A = [1 2 3; 4 5 6; 7 8 9]
取矩阵中的一个元素
>> A(2, 3)
取矩阵中的一行或者一列
>> C3 = A(:, 3)
>> R2 = A(2, :)
取矩阵中某些行某些列
>> T2 = A(1:2, 1:3)
对矩阵中某些元素进行赋值:
>> B = A;
>> B(:, 3) = 0
用end表示最后一行或者最后一列:
>> A(end, end) 最后一行最后一列
>> A(end, end-2) 最后一行倒数第三列
>> A(2:end, end:-2:1) 第2行到最后一行,最后一列到第一列,每次减2
1. 读取图像:用imread函数读取图像文件,文件格式可以是TIFF、JPEG、GIF、BMP、PNG等。比如
2. >> f = imread('chestxray.jpg');
读进来的图像数据被保存在变量f中。尾部的分号用来抑制输出。如果图片是彩色的,可以用rgb2gray转换成灰度图:
>> f = rgb2gray(f);
然后可以用size函数看图像的大小
>> size(f)
如果f是灰度图像,则可以用下面的命令把这个图像的大小赋给变量M和N
>> [M, N] = size(f);
用whos命令查看变量的属性
>> whos f
3. 显示图像:用imshow显示图像
4. imshow(f, G)
其中f是图像矩阵,G是像素的灰度级,G可以省略。比如
>> imshow(f, [100 200])
图像上所有小于等于100的数值都会显示成黑色,所有大于等于200的数值都会显示成白色。pixval命令可以用来查看图像上光标所指位置的像素值。
pixval
例如
>> f = imread('rose_512.tif');
>> whos f
>> imshow(f)
如果要同时显示两幅图像,可以用figure命令,比如
>> figure, imshow(g)
用逗号可以分割一行中的多个命令。imshow的第二个参数用一个空的中括号:
>> imshow(h, [])
可以使动态范围比较窄的图像显示更清楚。
5. 写图像。用imwrite写图像
6. imwrite(f, 'filename')
文件名必须包括指明格式的扩展名。也可以增加第三个参数,显式指明文件的格式。比如
>> imwrite(f, 'patient10_run1.tif', 'tif')
也可以写成
>> imwrite(f, 'patient10_run1.tif')
还可以有其他参数,比如jepg图像还有质量参数:
>> imwrite(f, 'filename.jpg', 'quality', q)
q是0到100之间的一个整数。对比不同质量的图像效果。用imfinfo命令可以查看一个图像的格式信息,比如
>> imfinfo bubbles25.jpg
可以把图像信息保存到变量中
>> K = imfinfo('bubbles25.jpg');
>> image_bytes = K.Width * K.Height * K.BitDepth / 8;
>> compressed_btyes = K.FileSize;
>> compression_ratio = image_bytes / compressed_bytes
7. 数据类型。MATLAB的数据类型包括:
8. double 双精度浮点
9. uint8 无符号8位整数
10. uint16 无符号16位整数
11. uint32 无符号32位整数
12. int8 有符号8位整数
13. int16 有符号16位整数
14. int32 有符号32位整数
15. single 单精度
16. char 字符
17. logical 逻辑型(二值)
数据类型转换
B = data_class_name(A)
比如
>> C = [1.4 1.5]
>> D = uint8(C)
图像类型分为:
Intensity image 灰度图
Binary image 二值图
Indexed image 索引图
RGB image 彩色图
在灰度图中每个像素可以是整型、浮点型或者逻辑型。图像类型的像素类型可以转换
function to from
im2uint8 uint8 logical,uint8,uint16,double
im2uint16 uint16 logical,uint8,uint16,double
mat2gray double double
im2double double logical,uint8,uint16,double
im2bw logical uint8,uint16,double
比如
g = mat2gray(A, [Amin, Amax]);
g = mat2gray(A);
g = im2double(h);
g = im2bw(f, T)
其中A是浮点型的图像,Amin和Amax是浮点数的范围,h和f是任意类型的图像,T是分割的阈值。
18. 数组(向量)索引:创建向量(数组):
19. >> v = [1 3 5 7 9 11 13]
用小括号对向量进行索引(取数组中的某个元素):
>> v(2)
转置(将行向量通过转置变成列向量):
>> w = v.'
取向量其中的一部分:
>> v(1:3) 第1个到第3个
>> v(2:4)
>> v(3:end) 第3个到最后一个
>> v(1:end)
>> v(:) 全部
>> v(1:2:end) 第1个到最后一个,每次增加2
>> v(end:-2:1) 最后一个到第1个,每次减2
其中end总是表示最后一个。
>> x = linspace(1, 5, 10)
>> v([1 4 5])
linspace函数产生一个范围内的平均分布。
20. 矩阵索引:创建矩阵
21. >> A = [1 2 3; 4 5 6; 7 8 9]
取矩阵中的一个元素
>> A(2, 3)
取矩阵中的一行或者一列
>> C3 = A(:, 3)
>> R2 = A(2, :)
取矩阵中某些行某些列
>> T2 = A(1:2, 1:3)
对矩阵中某些元素进行赋值:
>> B = A;
>> B(:, 3) = 0
用end表示最后一行或者最后一列:
>> A(end, end) 最后一行最后一列
>> A(end, end-2) 最后一行倒数第三列
>> A(2:end, end:-2:1) 第2行到最后一行,最后一列到第一列,每次减2
展开全部
功能性用法,编程,模型建立。
方方面面,需要你多使用,最好有本书刊来看
方方面面,需要你多使用,最好有本书刊来看
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
Matlab的基本用法
目录:
一、说明
二、数据类型及基本输入输出
三、流程控制
四、循环
五、数组、数组运算和矩阵运算
六、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,相同元素返回02、IF
(1) 基本 :
if 逻辑判断式
……
end
(2) 多重判断:
if 逻辑判断式
......
else if 逻辑判断式
......
else 逻辑判断式
......
end
end
end3、switch-case结构和C的switch语句一样
switch 变量
case数值1
……
case数值2
……
case 数值k %当变量等于数值k的时候,执行本组命令,然后跳出该结构。
……
otherwise
…… %该命令可以不存在,在变量不等于前面所有的检测值的时候,执行此组命令。
end case4、try-catch结构
try %只有当matlab执行本组命令发生错误时,后一组命令才会被执行
……
catch
…… %如果此组命令执行又出错,matlab将终止该结构。
end
%可以调用lasterr函数查询出错原因。如果函数的运行结果为一个空串,则表明这组命令
被成功执行了。四、循环
1、while
while 表达式
……
end2、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+r2、数组运算和矩阵运算
(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 %显示三维图的长方体边框
目录:
一、说明
二、数据类型及基本输入输出
三、流程控制
四、循环
五、数组、数组运算和矩阵运算
六、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,相同元素返回02、IF
(1) 基本 :
if 逻辑判断式
……
end
(2) 多重判断:
if 逻辑判断式
......
else if 逻辑判断式
......
else 逻辑判断式
......
end
end
end3、switch-case结构和C的switch语句一样
switch 变量
case数值1
……
case数值2
……
case 数值k %当变量等于数值k的时候,执行本组命令,然后跳出该结构。
……
otherwise
…… %该命令可以不存在,在变量不等于前面所有的检测值的时候,执行此组命令。
end case4、try-catch结构
try %只有当matlab执行本组命令发生错误时,后一组命令才会被执行
……
catch
…… %如果此组命令执行又出错,matlab将终止该结构。
end
%可以调用lasterr函数查询出错原因。如果函数的运行结果为一个空串,则表明这组命令
被成功执行了。四、循环
1、while
while 表达式
……
end2、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+r2、数组运算和矩阵运算
(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 %显示三维图的长方体边框
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询