matlab入门

文章目录
  1. 1. 前言
  2. 2. 基础设置
  3. 3. 设置默认编码
  4. 4. Matlab语言基础
    1. 4.1. 变量和常量
    2. 4.2. 基本数据结构
    3. 4.3. 空数组和子数组
    4. 4.4. 时间变量
    5. 4.5. 算术运算符
    6. 4.6. 运算函数
    7. 4.7. 微积分
    8. 4.8. 方程求解
  5. 5. 可视化
    1. 5.1. 二维平面图形
      1. 5.1.1. 折线图
      2. 5.1.2. 多重折线图
    2. 5.2. 三维立体图形
      1. 5.2.1. 三维曲线图
      2. 5.2.2. 三维网格图和曲面图
      3. 5.2.3. 观察点
  6. 6. Matlab程序设计
    1. 6.1. 命令文件
    2. 6.2. 函数文件
  7. 7. 源码分享
  8. 8. 书签

前言

MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。

读研以来,耳边不时听到“matlab”,被老师和同学普遍推崇。今天,小编就来学习一下matlab的基础操作。

基础设置

显示类型
计算圆面积时,面积的结果显示,默认是short类型(保留小数点后4位),我们可以通过设置为long类型,来显示更精确的结果。
1)通过命令设置
format long,这种设置方式临时性的。

2)通过界面设置
File,Preferences,Command Window,Numeric format选择long,之后Apply即可。

清屏
清屏命令:clc

清数据
清数据命令:clear

修改变量
在workspace中,双击变量,可以在图形化界面修改变量值。

绘图
在workspace中,单击变量,然后点击plot。

查看变量信息
whowhoswhos a

重新执行命令
在command history中,找到一条命令,右键选择evaluate selection。

保存变量
save a,保存变量到当前工作路径,文件名为a.mat。

加载数据文件
load a或者load a.mat

编辑器窗口
edit,打开编辑窗口,新建matlab程序。

图像窗口
figure

GUI窗口
guide

添加搜索路径
File,Set Path,Add Folder。

设置初始路径
右键matlab快捷方式,在快捷方式选项卡中,修改起始位置。

查找函数路径
which sin

设置默认编码

中文时,Matlab默认编码格式为GB2312。使用sublime打开文件,显示乱码,小编想把Mablab默认编码修改为UTF-8。

1、在Matlab安装目录下的bin目录下(例如D:\Program Files\MATLAB\R2010b\bin),找到lcdata.xml文件。

2、在matlab中,输入命令feature('locale'),查看当前使用的编码。

3、编辑lcdata.xml,找到如下一段:

1
2
3
<locale name="zh_CN" encoding="GB2312" xpg_name="zh_CN.GB2312">
<alias name="zh-Hans"/>
</locale>

修改为:

1
2
3
<locale name="zh_CN" encoding="UTF-8" xpg_name="zh_CN.UTF-8">
<alias name="zh-Hans"/>
</locale>

然而,修改后重启,matlab依然使用GBK编码。而且,把.m文件转换成UTF-8格式后,Matlab中会出现乱码。

无奈,从另一个方面入手,让sublime支持GBK编码文件,安装插件ConvertToUTF8即可。

Matlab语言基础

变量和常量

matlab遵循弱类型语言的变量初始化和赋值语法,和python基本相同。

输入数据
x = input('请输入数据'),输入数据后,数据存入x。

默认赋值
如果输入数值,没有赋值给变量,那么默认赋值给内置的ans变量。

基本数据结构

输入行矩阵
a = [1 2 3]a = [1,2,3]

输入列矩阵
b = [1 2 3]'b = [1,2,3]'b = [1;2;3]

输入2*2矩阵
c = [1 2; 3 4]

输入特定值矩阵
d(2,3) = 8,生成2*3的矩阵,第二行第三列的元素为8,其他元素为0。

内置函数生成矩阵
ones(4),生成4*4的矩阵,所有元素为1。

ones(4,3),生成4*3的矩阵,所有元素为1。

zeros(4),生成4*4的矩阵,所有元素为0。

zeros(4,3),生成4*3的矩阵,所有元素为0。

eye(4),生成4*4的单位矩阵。

eye(4,3),生成4*3的矩阵,前三行前三列组成单位矩阵,第四行为0。

magic(4),生成4*4的魔方数组。

冒号表达式生成矩阵
3:9,生成3到9的行向量,增量为1。

3:2:9,生成3到9的行向量,增量为2。

(3:9)',生成3到9的列向量,增量为1。

读取矩阵数据
a = [1 2 3]a(2),读取第二个数据。

c = [1 2; 3 4]c(1,2),读取第一行第二列的数据。

c(:,2),读取二列的数据。

c(1,:),读取第一行的数据。

k = [1 2 3;4 5 6;7 8 9;10 11 12]k(2:4,2),读取第二列中第二行到第四行的数据。

拼接矩阵
m = [c,c],横向拼接两个c矩阵。

n = [c:c],纵向拼接两个c矩阵。

矩阵函数
size(n),返回行列数。

length(n),返回行数和列数中的较大者。

空数组和子数组

空数组
nullmatrix = [],创建空数组。

子数组
magicmatrix = magic(4)child = magicmatrix(3,[2,4])

child = magicmatrix(3,2:end)

magicmatrix(3,2) = 3,单个元素赋值。

等差数列
linspace(1,99,50),生成1到99的50个数,等差为2。

等比数列
logspace(1,3,3),生成10 100 1000三个数。

数组变形
1:1:9reshape(ans,3,3),按列排列变形成为方数组。

时间变量

dataclockyear(now)month(now)day(now)day(today)

算术运算符

标量运算
正常加减乘除,和python基本相同。需要注意的是5/6代表5除以6,5\6代表6除以5。

5^2power(5,2)都是代表5的平方。

矩阵运算
A=[1 2 3; 4 5 6; 7 8 9]B=magic(3)

A+BA-BA*BA+3A*3

inv(B),求B矩阵的逆矩阵。

A/BA*inv(B)相同。

A.*B,对应位置相乘。

运算函数

matlab的运算函数包括幂次方、指数与对数函数、三角与反三角函数等等。

幂次方
幂次方的符号就是常用的^记号。指数部分可以是任意数。
2^22^(-1)2^(1/2)2^(1.25)

指数与对数
科学与工程领域惯用「标准指数函数」,也就是以e为底的指数函数。其中,e是一个无理数,大约等于2.71828。Matlab并不提供e这个常数,而是以函数exp()来计算以e为底的指数函数。
exp(1)

Matlab 分别提供三个函数 log()、log10()和log2(),分别表示以e为底的对数(自然对数),以10为底
的对数(常用对数),以2为底的对数。
log(exp(2))log10(100)log2(4),答案都是2。

三角与反三角函数
六个三角函数在Matlab 中对应的函数分别为:
正弦:sin()
余弦:cos()
正切:tan()
余切:cot()
正割:sec()
余割:csc()

六个反三角函数在Matlab 中对应的函数分别为:
反正弦:asin()
反余弦:acos()
反正切:atan()
反余切:acot()
反正割:asec()
反余割:acsc()

需要注意的就是使用三角函数时,角度的单位是“弧度”。

复数
Matlab 的所有运算符号、所有函数,都懂得如何做复数计算。
sqrt(-1)

abs(3+4i)

微积分

极限
求极限是微积分的基础,求极限的函数limit。
limit(f,x,a),x趋近于a时,f 的极限。
limit(f,x,a,'left'),x左趋近于a时,f 的极限。
limit(f,x,a,'right'),x右趋近于a时,f的极限。

微分
diff(f,t,n),求f 对独立变量t的n次微分值。

积分
int(f,'t',a,b),求f 对独立变量t 在积分区间[a,b]的积分值。

级数
自变量v在[a,b]之间取值时,对通项s求和,用函数symsum(s,v,a,b)

方程求解

代数方程
solve(f)

solve(f,a)

常微分方程
dsolve('常微分方程式','初始条件','自变量')

可视化

二维平面图形

折线图

plot(x,y)函数,x,y是维度相同的序列或向量。

1
2
3
x=[0 1 2];
y=[0 1 0];
plot(x,y);

用300段折线画出sin(x)在[-pi,pi]区间内的折线图。

1
2
x = linspace(-pi, pi, 301);
plot(x, sin(x));

如果要画多条曲线,也可以用plot函数。

1
2
3
4
5
x=0:pi/10:2*pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,x,y2);
plot(x,y1,'r + -',x,y2,'k * :');

图形是以公共的x元素为横坐标值,y1、y2为纵坐标值绘制曲线图的。如果想要图形更加完美,我们可以用一些特殊的图形函数对它进行修饰。

1
2
3
4
5
6
xlabel('独立变量X');
ylabel('变量Y');
title('正弦和余弦曲线');
text(1.5,0.3,'cos(x)');
text(0,0,'sin(x)');
%axis([0 2*pi -0.9 0.9]);

如果只给plot()一个参数,例如plot(y),而y是一个n维向量或列,则它的效果就相当于plot((1:n), y)。

1
2
y = [ 1 4 0 2 3 5];
plot(y);

多重折线图

Matlab在一张图片上可以重复制图。基本上,画一张图的指令,将会自动清除前一张图。但是,如果下了指令hold on,将不会清除前一张图,而是重复画上去。下了hold on指令的所有图将会重迭在一张图片里,直到你下了hold off为止。

我们以 300 个折线段,在一张图片中,画出以下三个函数在[-pi, pi]区间内的曲线图:
sin(x),cos(x),x。

1
2
3
4
5
6
7
8
9
10
x = linspace(0, 2*pi, 301);
y = sin(x);
plot(x, y, 'r');
axis([0 2*pi -1.2 1.2]);
hold on
y = cos(x);
plot(x, y, 'g');
y = x;
plot(x, y, 'b');
hold off;

我们还可以采用图形窗口分割的方法,在同一个视图窗口中画出多个小图形。这时要用到subplot(n,m,k)。如果写subplot(2,2,1),即就是把图形窗口分割成2行2列,在第1个位置(第1行第1列)画图。

1
2
3
4
5
6
7
x = linspace(0, 2*pi, 301);
y = sin(x);
subplot(2,2,1);
plot(x, y);
y = cos(x);
subplot(2,2,2);
plot(x, y);

Matlab对数据是按列存储和计算的。

三维立体图形

三维曲线图

plot3函数调用格式:plot3(x1,y1,z1,x2,y2,z2,…)。其中x1,y1,z1,x2,y2,z2…等分别为维数相同的向量,分别存储着曲线的三个坐标值。

绘制方程在t=[0,2π]的空间方程。

\begin{cases}
x=t \
y=sin(t) \
z=cos(t)
\end{cases}

1
2
3
4
5
6
7
8
9
10
t=0:pi/10:2*pi;
x=t;
y=sin(t);
z=cos(t);
plot3(x,y,z,'r:p');
grid on;
xlabel('X');
ylabel('Y');
zlabel('Z');
title('sine and cosine');

三维网格图和曲面图

Matlab在绘制三维网格图与曲面图时,往往先将要绘制图形的定义区域分成若干网格,然后计算这些网格节点上的二元函数值,最后才能使用mesh和surf函数绘制相应的图形。生成网格矩阵使用meshgrid函数,其调用格式为:

1
[U, V]=meshgrid(x,y)

函数说明:利用向量x和y生成网格矩阵U和V,以便mesh和surf等函数用来绘图。其中x、y分别是长度为n和m升序排列的行向量。

生成的方法是将x复制n次生成网格矩阵U,将y转置成列向量后复制m次生成网格矩阵V。坐标(uij,vij)表示xoy平面上网格节点的坐标,第三维坐标zij=f(uij,vij)。

例:给定向量x=[1 2 3 4],y=[10 11 12 13 14],试由向量x、y生成网格矩阵。

1
2
3
4
5
x=[1 2 3 4]; %输入向量x
y=[10 11 12 13 14]; %输入向量y
[U,V]=meshgrid(x,y); %生成网格矩阵
Z=peaks(U,V);
mesh(U,V,Z); %绘制三维网格图

Matlab提供了一个peaks函数,可产生一个凹凸有致的曲面,包含了三个局部极大点及三个局部极小点。在matlab中输入peaks()peaks(5)就可以看到效果。

例:在 -4<x<4,-4<y<4 上绘制 $z=x^2+y^2$ 的三维网格图。

1
2
3
4
[x,y]=meshgrid(-4:4, -4:4); %定义网格数据向量x,y
z=x.^2+y.^2; %计算二元函数值
mesh(x,y,z); %绘制三维网格图
% surf(x,y,z); %绘制三维曲面图

观察点

函数view(azinmuth,elevation)
azinmuth:方位角。观察点与坐标原点的连线在水平面上的投影和y轴负方向的夹角。(在水平面上)
elevation:仰角。观察点与坐标原点的连线和水平面的夹角。(与水平面垂直)

使用循环和观察点设定来实现动画效果。

Matlab程序设计

命令文件

Matlab提供两种源程序文件格式:命令文件和函数文件。这两种文件的扩展名相同,均为“.m”,又称为“M文件”。
命令文件的执行方式:在提示符后键入命令文件的文件名。
命令文件适合于用户做需要理解得到结果的小规模运算。

函数文件

函数文件由function语句引导。
其格式为:

1
function [返回变量列表]=函数名(输入变量列表)

1、新建一个求阶乘的函数文件myFunc.m:

1
2
3
4
5
6
7
function value = myFunc(n);

if n<=1
value = 1;
else
value = myFunc(n-1)*n;
end

2、重写求阶乘的函数文件myFunc2.m:

1
2
3
4
5
6
7
function value = myFunc2(n);

value = 1;
while n > 1
value = value*n;
n = n - 1;
end

3、重写求阶乘的函数文件myFunc3.m:

1
2
3
4
5
6
7
8
9
10
function value = myFunc3(n);

value = 1;
for i=1:1:n
value = value*i;
end

%for i=n:-1:1
% value = value*i;
%end

4、新建传入数值显示结果的函数文件showNum.m:

1
2
3
4
5
6
7
8
9
10
11
12
function showNum(input_var);

switch input_var
case 1
disp('1');
case {2,3,4}
disp('2 or 3 or 4');
case 5
disp('5');
otherwise
disp('something else');
end

源码分享

https://github.com/voidking/matlab-start.git

书签

Matlab视频教程
http://www.51zxw.net/list.aspx?cid=456

我的学习资料
http://pan.baidu.com/s/1bp1oyXT

Mathjax与LaTex公式简介
http://mlworks.cn/posts/introduction-to-mathjax-and-latex-expression/