前言:学过其他编程语言的话matlab上手还是比较容易的吧,这里就简单整理一下一些基本知识和自己学习的一些心得,方便自己复习和日后查询.还有就是这是刚踏入计算机领域不久的小白文章,emm仅仅为了是供和我一样的小白学习和交流,也是记录一下自己的学习过程。然后再说一说我是如何学习这门语言的吧,首先做题,做什么题呢?首先老师给的题目要做,等一些基础语法熟练后,可以开始学习用matlab如何解决线性代数的问题,可以把自己的线代课本的题目拿出来,开能不能编程解决。我的学习方向的话,大概是 基本语法--->线代基本知识--->编程解决线代问题--->数据可视化,
以下出现任何不懂的 函数名或者 变量名都可以在命令行中输入如下指令
help 函数名 来获取使用的信息(虽然有些是英文,就很烦,不过好在有翻译软件)
比如 helo sort 可以查看sort 函数的用法,有什么不懂的都可help一下
目录
变量篇
命名规则同C语言一致:(说多了都觉得烦,估计也没人想看,不过作为一篇入门的笔记,形式上还是要的阐述一下滴)
1.以字母开头
2.可以由数字,字母,下划线组成
3.区分大小写
4.不能同系统预定义的变量名一致
系统预定义的变量
pi | 圆周率 ,其值为imag(log(-1)) |
inf 或者 Inf | 无穷大 |
Nan 或者nan | Not-a-Number,一个不定值 ,如 0/0 或者 ∞/∞ |
eps | 浮点运算相对精度,其值为2.2204e-16 |
i, j | 虚部单位 |
怎么理解 nan 和eps?
但是什么是 nan 和eps 呢 ?刚开始一直不知道这俩货是干啥用的,相信大多数刚开始接触编程的人和我有一样的困惑,后面出现的多了,就慢慢好像理解了
就我自己而言 什么时候会出现nan 呢 ,就是当出现一个超出系统精度数值的时候,就会出现 nan
比如 我在命令行中 调用 inf /inf,0/0,inf-inf 出现这些数学上的未定式的时候 就会返回nan 。
eps 也比较好理解 就是系统的最小浮点运算精度 比如 在 matlab中 比 0 大的最小数就是eps
比1 大的最小的数就是1+eps,我是这样理解的 ,eps就是matlab中的最小运算数值,就是最小的单位
每个值都是由大量的最小单位相加得到的一个数。
特殊变量 ans 当调用某一个变量或者函数没有用一个变量接受返回值时,系统默认将返回值赋值给ans
查看已定义的变量
who | 显示当前工作空间中的所有变量 |
whos | 显示所有变量的详细属性 |
清除变量
clear | 清除工作空间中的所有变量 |
clear all | 清除所有变量,包括全局变量、函数链接等 |
clear 变量名 | 清除指定的变量 |
一般在开始编程的时候都会使用clear all清除掉所有变量,这样方便后续的编写,也不会和之前的变量的变量混淆起来 ,养成好习惯。
数值运算
matlab中默认是 采用双精度运算
+ - * ^ | 加,减,乘,幂 |
/ \ | 右除,左除 |
为什么有两个除法 ,一开始肯定都有这个困惑,现在来说一说右除和左除的区别
首先学过线性代数的都知道(doge) 矩阵运算是没有除法的 那么
比如 现在有两个矩阵 A ,b
/ :右除 A/b 表示矩阵A乘以矩阵b的逆 等价于 A * inv(b) ps:inv(b)表示b的逆矩阵
\:左除 A\b 则表示 矩阵 A的逆乘以矩阵b 等价于 inv(A) *b
注意
/ 和 \要区别之后出现的 /. 和 \.运算 (不要漏看了那个点哦)
这里就简单说一下 /.运算 ,比如C= A./b 就是 A中元素除 b中同样位置上的元素 得到的这个新的数值作为该位置上的元素 就比如 A(1,1)/b(1,1) 作为元素放在新的矩阵C的(1,1)的位置上 (通过以上解释,应该会清楚 这个运算要求A,b的大小必须要一致吧doge).同样.\就是反过来
进入正题吧,matlab的最终用途就是用于线性代数的
首先来看看
矩阵的创建
X=[1,2,3,4,5,6,7];
酱紫就是创建了一个 一个一维行向量 (这里顺便说一下,如果你不想运行的时候显示X,可以在语句的末尾加上分号,抑制该行语句的输出,这样命令行中显示的数据就不会很杂乱)
X=[1;2;3;4;5;6;7]
这样就是创建一个一维列向量
(这样很容易康出来 属于同一行的元素间隔符用逗号吧,要换行的时候用分号吧,就是分号表示一行的结束)
X=[1,2,3;4,5,6;7,8,9]
运行结果如下,这就是一个3x3的方阵
X =
1 2 3
4 5 6
7 8 9
一些特殊矩阵的创建方法
zeros(m,n) zeros(n) | 生成一个 m 行 n 列的零矩阵 m=n 时可简写为 zeros(n) |
ones(m,n) ones(n) | 生成一个 m 行 n 列的元素全为 1 的矩阵 m=n 时可简写为 ones(n) |
eye(m,n) eye(n) | 生成一个主对角线全为 1 的 m 行 n 列矩阵 m=n 时可简写为 eye(n),即为 n 维单位矩阵 |
diag(X) diag(X,k) | 若 X 是矩阵,则 diag(X) 为 X 的主对角线向量 若 X 是向量,diag(X) 产生以 X 为主对角线的对角矩阵 |
tril(A) | 提取一个矩阵的下三角部分 |
triu(A) | 提取一个矩阵的上三角部分 |
rand(m,n) rand(n) | 产生 0~1 间均匀分布的随机矩阵 m=n 时简写为 rand(n) |
randn(m,n) randn(n) | 产生均值为0,方差为1的标准正态分布随机矩阵 m=n 时简写为 randn(n) |
其它特殊矩阵生成函数:magic、hilb、pascal 等,这些可以通过 help 查询 |
至于什么是零矩阵,单位矩阵 ...还是自己复习一下线代再来看看吧-_-。
这里简单的说一下diag函数的用法,算了下次再写吧有点累了(doge),其它函数的用法可自行在matlab中运行尝试一下
X=[1,2,3];
A=diag(X)
A =
1 0 0
0 2 0
0 0 3
X=[1,2,3;4,5,6;,7,8,9];
A=diag(X)
A =
1
5
9
矩阵的运算
+ - * ^ | 加,减,乘,幂 |
这就不用我多说了吧 (:
幂运算 : A^p p个矩阵A相乘
左除右除运算上面说过了
矩阵的转置 : 用 ' 直接上代码
A=[1,2,3;4,5,6;7,8,9];
A'
运行结果:
ans =
1 4 7
2 5 8
3 6 9
矩阵的逆 : 用函数 inv 如矩阵A的逆 inv(A)
其他的一些操作
fliplr(A) | 左右翻转 |
flipud(A) | 上下翻转 |
rot90(A) rot90(A,k) | 逆时针旋转 90 度 逆时针旋转 k×90 度 |
可以自行尝试一下 看看效果
这里给出一个例子
A=eye(3)
A=rot90(A)
运行结果如下:
A =
1 0 0
0 1 0
0 0 1%这样子可以将对角矩阵的主对角元素移到副对角线上
A =0 0 1
0 1 0
1 0 0
矩阵的数组运算
什么是数组运算?就是对应位置上的元素进行运算(相信这样说也是不会懂得)
四种数组运算 ./ .\ .* .^ 称为右点除,左点除,点乘,点幂
.\ 和./ 上面已经说过了 那么触类旁通 .* 和.^其实也是一样的啦
就拿 .^来说吧
A=[1,2,3;1,2,3;1,2,3];
B=[1,1,1;2,2,2;3,3,3];
C=A.^B
%运行结果如下:
C =
1 2 3
1 4 9
1 8 27%很明显 对C(1,1)=A(1,1)^B(1,1) ,C(2,2)=A(2,2)^B(2,2),以此类推, .*无非就是将^改成*
查看矩阵的大小(获取矩阵的大小)
size(A) | 返回矩阵 A 的行数和列数 |
size(A,1) | 返回矩阵 A 的行数 |
size(A,2) | 返回矩阵 A 的列数 |
length(x) length(X) | 若 x 是向量,则返回 x 的长度 若 X 是矩阵,则返回行数和列数中大的一个 |
numel(A) | 返回 A 的元素的个数 |
矩阵元素(子矩阵)的获取方法,对矩阵元素的修改
如果是对于一维行向量或者列向量X,直接用X(i) 访问第i 个元素
下面以大小为nxm的矩阵A为例进行说明
(1)获取矩阵某一个元素: A(i,j) 得到 第 i行第 j列元素
(2)获取矩阵某一行: A(i,:) 或者A(1,0:m) 得到第i行
(3)获取矩阵某一列: A(:,j) 或者A(0:n,j) 得到第j列
(4)获取子矩阵 : A(i:j,p:q) 得到 第i 行到第j行 ,第p列到 第q列的子矩阵
也可以通过以上的方法对矩阵进行修改
比如 A(1,1)=1
A(1,:)=[1,2,3,4,5,6]
大概就先说到这里吧,后续还想整理一些常见库函数的详细解析和运用,运用matlab解决线性代数问题的方法,线性方程组的求解之高斯消元法和迭代法,二维图形和三维图形的绘制方法等,全看我心情和时间啦=_+