MatLab入门手册

本文章采用创作共用版权协议, 要求署名、非商业用途和保持一致. 转载本文章必须也遵循署名-非商业用途-保持一致的创作共用协议.

1. MatLab简介和安装


  • MatLab是综合高性能的数值计算软件, 集成了数值计算和可视化, 提供大量内置函数, 广泛用于科学计算等领域.
  • Simulink是基于MatLab的框图设计环境, 用来对各种动态系统进行建模, 分析和方针.
  • 学习目的: 为了完成当前作业和以为科研工作的需求

安装包请在MatLab官网进行下载和安装.

MatLab窗口>>

  1. 命令窗口
  2. 当前目录
  3. 工作区

2. MatLab基础


Matlab如果没有定义变量名, 系统将计算结果暂存在ans临时变量中.
优先级: 表达式从左向右运算, 指数运算优先级最高, 乘除次之(help precedence查看优先级)

常用操作命令

  • clc 清空敏玲窗口
  • diary 日志文件命名
  • who 列出工作空间的变量
save my_var.mat  % 保存工作区变量
load my_var.mat  % 加载文件中变量到工作区

运算符号

+ - * / \ ^ '  % 加 减 矩阵乘法 右除 左除 次方 矩阵共轭转置
.* ./ \. .^ .'  % 数组乘法 数组右除 数组左除 数组次方 矩阵转置

>> a = round(rand(3) * 10)
a =
     8     9     3
     9     6     5
     1     1    10
>> b = magic(3)  % 定义矩阵a和矩阵b
b =
     8     1     6
     3     5     7
     4     9     2
>> c1 = a * b  % 矩阵叉乘
c1 =
   103    80   117
   110    84   106
    51    96    33
>> c2 = a .* b  % 矩阵点乘, 矩阵对应元素位置的元素相乘
c2 =
    64     9    18
    27    30    35
     4     9    20
>> e =a^2  % 矩阵的次方, 表示a * 2
e =
   148   129    99
   131   122   107
    27    25   108
>> d = a.^2  % 矩阵的乘方, 矩阵中每个元素二次方
d =
    64    81     9
    81    36    25
     1     1   100
>> format short, pi  % format用于更改显示的输出格式
ans =
    3.1416
>> format long, pi
ans =
   3.141592653589793
>> iskeyword  % 查询关键字
ans = 
    'break'
    'case'
    'catch'
    'classdef'
    'continue'
    'else'
    'elseif'
    'end'
    'for'
    'function'
    'global'
    'if'
    'otherwise'
    'parfor'
    'persistent'
    'return'
    'spmd'
    'switch'
    'try'
    'while'
>> class(a)  % 获取定义的数据类型
ans =
double
>> a = cast(a, 'uint8')  % 改变数据类型
a =
    8    9    3
    9    6    5
    1    1   10
>> class(a)
ans =
uint8

.的运算方式表示对矩阵元素的运算, 矩阵的右除是一般意义的除法, a./b = b.\a

MatLab默认的输出格式为双精度(double)

变量

  • 变量名区分大小写, 以字母开头, 后跟字母数字下划线

数组

数组作为Matlab存储和运算的基本单元

数组创建

>> a = [1 2 3]  % 直接创建, 以空格或者逗号隔开
a =
     1     2     3
>> a = 0 : 1 : 3  % x = a:inc:b a和b为起始数和终止数, inc为间隔步长
a =
     0     1     2     3
>> a = linspace(1, 3, 3)  % 等间距线性创建法, a = linspace(a, b, n), 在a和b区间取n个点
a =
     1     2     3
>> a = logspace(1, 3, 3)  % 等间距对数创建法
a =
          10         100        1000

数组访问

a =
          10         100        1000
>> a(2)  % 索引访问, 从1开始
ans =
   100
>> a(2 : 3)  % 按块访问
ans =
         100        1000
>> a(2 : end)
ans =
         100        1000

多维数组

  • 直接创建(一位数组的创建方式), 同行元素用空格和逗号隔开, 不同行用分号隔开
  • 新建变量的窗口, 更改变量名, 插入数据
  • 大规模数据可以使用导入数据导入工作空间
  • 使用已有函数

常用标准数组

  • eye生成单位矩阵
  • ones生成全1数组
  • rand生成随机数组, 服从均匀分布
  • randn生成随机数组, 服从正态分布
  • zeros生成全0数组
  • diag生成对角矩阵
>> a = -3:3
a =
    -3    -2    -1     0     1     2     3
>> k = find(a > 0)  % 找到符合条件的下标
k =
     5     6     7
>> sort(a)  % 对数组排序
ans =
    -3    -2    -1     0     1     2     3

字符串

字符串是用单引号括起来的一系列字符的组合

>> str = 'hello world'  % 定义字符串
str =
hello world
>> size(str)  % 查看字符串的大小
ans =
     1    11
>> u = mat2str(pi * eye(2))  % 将矩阵转化为字符串
u =
[3.14159265358979 0;0 3.14159265358979]
>> class(u)
ans =
char
>> disp(u)  % 打印字符串
[3.14159265358979 0;0 3.14159265358979]
>> size(u)
ans =
     1    39
>> t = 23  
>> tempText = [ 'Temperature is ', num2str(t), 'C']  # 字符串的拼接, 使用num2str将数字转换为字符串
tempText =
Temperature is 23C

关系运算符

关系运算符主要比较两个同维数的数组的大小

3. 矩阵运算


常用函数列举

chol(A)  % 对矩阵A进行Cholesky分解
det(A)  % 矩阵A的行列式
eig(A)  % 矩阵A的特征值和特征向量
inv(A)  % 矩阵A的逆
svd(A)  % 矩阵A的奇异值
eye(r, c)  % 生成r * c的单位矩阵
magic(n)  % 生成n*n的魔幻矩阵
ones(r, c)  % 生成r*c的全1矩阵
rand(r, c)  % 生成r*c的元素值0和1之间的随机矩阵
zeros(r, c)  % 生成r*c的全0矩阵
cond(A)  %利用奇异值分解求矩阵A的范数

求行列式

>> for i = 1:3
A = magic(i + 2)
a(i) = det(A)  % 矩阵行列式
disp('矩阵:')  % 打印字符串 
disp(A)
disp('矩阵的行列式')
disp(a(i))
end

稀疏矩阵

>> a = [0 0 0 5; 0 1 0 0; 1 5 0 0; 0 0 0 3]
a =
     0     0     0     5
     0     1     0     0
     1     5     0     0
     0     0     0     3
>> as= sparse(a)  % 创建稀疏矩阵
as =
   (3,1)        1
   (2,2)        1
   (3,2)        5
   (1,4)        5
   (4,4)        3
>> af = full(as)  % 还原矩阵
af =
     0     0     0     5
     0     1     0     0
     1     5     0     0
     0     0     0     3

线性方程组

恰定方程组是方程组个数和未知数个数相同的方程组, 使用左除求解.

4. MatLab编程基础

Matlab可以像C一样编程, 编写执行命令的脚本和函数功能的模块, 文件以.m为后缀

打开M文件编辑器:

  1. 新建->脚本
  2. 在命令行输入edit命令, 或者edit filename命令
% 一个简单的脚本文件
echo on % 脚本文件内容显示在命令窗口
t = 0 : pi/20 : 2 *pi;
num = input('输入数字:');  % 提示用户输入内容
disp(num);  % 显示结果
echo off  %关闭命令行显示

流程控制

for循环

for x = array  % x为循环变量, array是条件数组
    commands  % 循环执行的代码
end

% example
for i = 1: 1: 10
    a(i) = sin(i * pi /5)
end
a  % 输入a

while循环

while expression
    commands
end

% example
num = 10;
while num >1
    num = num / 2
end

if条件结构

if expression 
    commands
elseif 
    commands
else
    commands
end

switch分支选择结构

switch expression
    case test_expression1
        commands1
    case test_expression2
        commands2
    otherwise
        commands3
end

% example
x = input('输入需要换算的长度数值cm:');
unit = input('选择转换单位 (1 in, 2 ft, 3 m. 4 mm, 5 cm):');
switch unit
    case {'inch', 'in', 1}
        y = x * 2.54;
    case {'feel', 'ft', 2}
        y = x * 2.54 / 12;
    case {'meter', 'm', 3}
        y = x / 100;
    case {'centermeter', 'cm', 4}
        y = x;
    case {'milimeter', 'mm', 5}
        y = x * 10;
    otherwise
        disp('Unkonwn Units');
        y = NaN;
end
disp(y)

try-catch结构

try用于捕获try后语句的异常, 交给catch语句处理异常

try 
    commands
catch 
    commands
end

% example
x = rand(4 ,2)
y = magic(3)
try
    z = x * y
catch 
    z = NaN
    disp('两矩阵维数不同, 计算错误!')
end
disp(lasterr)
disp(lasterror)

continue,break,return关键字的应用场景与其他语言基本相同

M函数文件

M函数文件与M脚本文件的不同:

  • M函数文件第一行必须是function引导的声明语句, 成为函数声明行
  • 函数执行中, 函数体内变量临时建立工作区, 称为函数工作区
  • M函数文件可以调用M脚本文件
  • M函数文件中可以创建一个或多个函数

绘制函数$y=e^{x/3}sinex(x)$在区间$[0, 4π]$的曲线

function y = sinex(x)
% sinex.m
y = exp(-x / 3).*sin(3 * x)


% 命令行调用函数
>> fh  = @sinex
>> ezplot(fh, [0, 4 * pi, -1, 1]);

5. 帮助


Matlab所有函数都有详细的帮助文档, 通过一下的方式可以更好的使用文档:

  • 命令行输入doc functionname(完整的文档)
  • 输出functionname(程序进进行智能文档提示(速度慢)
  • 命令行输入help mean(简单的文档)

6. 参考链接


更多精彩可以查看个人博客-雪忆

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容