坚持不一定成功,但放弃一定很轻松
基础知识
- 基础
clear all
清除workspace忠的所有变量clc
清除command window中所有的命令- 变量名区分大小写,不能超过64位
length(str)
输出字符串长度%
:注释c = [ 3 + 4i, 4 + 3j ; -i ,10j ]
要表示虚数的虚部,用 i或j
- 随机数 rand、randi、randn
rand
: 生成均匀分布的伪随机数,分布在(0-1)之间- rand(m,n) :生成 m 行 n 列的均匀分布的伪随机数
- rand(m,n,‘double’) :生成指定精度的均匀分布的伪随机数,参数还可以是‘single’
- randn(RandStream,m,n) :利用指定的RandStream随机种子生成伪随机数
randn
: 生成标准正太分布的伪随机数(均值为0,方差为1)- 主要语法和rand一样
randi
: 生成均匀分布的伪随机数- randi(iMax): 在开区间(0,iMax)生成均匀分布的伪随机数
- randi(iMax,m,n): 在区间(0,iMax)生成m x n型随机矩阵
-
format 函数:控制显示的值的数值格式
-
format long : 显示长浮点数
-
format short : 显示更短格式
-
-
隐藏输出
-
键入语句后直接按Return或Enter,MATLAB会在屏幕上自动显示结果。
-
语句后面加分号(; ), MATLAB会执行计算,但不会显示任何输出。当生成大型矩阵时此功能尤其有用
-
输入长语句
-
如果语句无法容纳在一行中,使用省略号(三个句点)…后跟Return或Enter以指示该语句在下一行继续。
s = 1 -1/2 + 1/3 -1/4 +1/5 -1/6 + 1/7 ... - 1/8 + 1/9;
-
=、+ 和 - 符号周围的空白是可选的,可提高可读性
-
矩阵和数组
- 矩阵和数组运算符
-
矩阵不用于线性代数的运算,则为二维数值数组,数组的算术运算按元素执行
矩阵运算符 说明 数组运算符 说明 + 加法 + 加法 - 减法 - 减法 * 乘法 .* 逐元素乘法 / 除法 ./ 逐元素除法 \ 左除 .\ 逐元素左除 ^ 幂 .^ 逐元素幂 ’ 复共轭转置 .’ 非共轭数组转置 () 指定计算顺序
- 数组、矩阵、幻方矩阵
a + 10
; 矩阵a中的每个元素都加10sin(a)
; 矩阵a中的每个元素都取正弦a.^3
; 矩阵a中的每个元素取立方值A = [1 2 3; 4 5 6;7 8 9]
得到一个3行3列的矩阵AB = A'
A转置后赋值给B- 撇号运算符(A’)执行复共轭转置,围绕主对角线翻转矩阵,并且还会更改矩阵的任何复数元素的虚部符号
- 点撇号运算符(.A’)装置矩阵,不会影响复数元素的符号
- 对包含所有元素为实数的矩阵,两个运算符返回结果相同
C = A(:)
得到9行1列的矩阵C,C=[1; 2; 3; 4; 5; 6; 7; 8; 9]D = inv(A)
矩阵求逆E = zeros(10,5,3)
创建一个10行5列3层的全零矩阵F = ones(10,5)
创建一个10行5列的全1矩阵G = eye(3)
生成一个3x3d ,对角线位1的矩阵H = pascel(n)
对称矩阵I = inv(a)
逆矩阵,方阵才有逆矩阵diag(A)
矩阵对角线元素的提取和创建对角阵- X = diag(v,k) v是含有n个元素的向量,k表示第几条对角线
- v = diag(X, k) v由矩阵X的第k个对角线的元素形成
X =diag([1 2 3], 1 )
ans =
0 1 0 0
0 0 2 0
0 0 0 3
0 0 0 0
X =[1 0 3; 2 3 1;4 5 3];
diag(v,1)
ans =
0
1
fliplr(A)
将数组从左向右翻转sum(A)
; 得到A的列总和的行向量sum(A')'
得到A的行总和的列向量sum(A,2)
在sum函数中使用维度参数,避免使用双重转置的方法,得到行总和的列向量sum(diag(A))
得到主对角线上元素的总和
- 串联
a = [1 2 3; 4 5 6; 7 8 9] a为3*3的矩阵
A = [a,a]; A为3*6的矩阵
A = [a; a]; A为6*3的矩阵
- 幻方矩阵
B = magic(n)
返回由1到n^2的整数构成,且总行数和总列数相等的 n x n幻方矩阵- 幻方矩阵的特点:每个元素都是正整数,每一行、每一列、每一条对角线上的元素之和都等于同一个正整数
数组索引
-
A 为4行4列的矩阵
-
A(4, 2);
取出矩阵A的第4 行第2 列的元素,注意:索引从1开始 -
A(8);
取出第8 个元素,注意:按顺序向下遍历每一列 -
test = A(4,5); 在赋值语句右侧引用数组外部元素(超出矩阵原大小),MATLAB会引发错误
-A (4,5) =17
在赋值语句左侧指定当前维外部的元素,数组大小会增大以便容纳新元素 -
要引用多个数组元素,使用冒号(:)运算符,格式 start:end指定范围
A( 1:3, 2)
列出A前三行的第二列中的元素A(3, :)
列出第三行中的所有列B = A(:,[1 3 2 4])
将矩阵A的第2、3列调换后赋值给B
-
创建等间距向量值,格式 start:step:end,若省内step,默认步长为1
B = 0,10,100
0到100间(包括0和100),每隔10取出一位数
-
构建表
%构建一个平方和2次幂表 n = (0:4)' pows = [n n.^2 2.^n] pows = 0 0 1 1 1 2 2 4 4 3 9 8 4 16 16
-
一些特殊函数提供了有用的常量值
常量值 | 说明 | 常量值 | 说明 |
---|---|---|---|
pi | 3.1415926 | realmin | 最小浮点数 |
i | 虚数单位 | realmax | 最大浮点数 |
j | 与i 相同 | Inf | 无穷 |
eps | 浮点相对精度 | NaN | 非数字 |
工作区变量
- 工作区包含MATLAB中创建或从数据文件或其他程序导入的变量
- 使用 whos 可以查看工作区的内容
- 退出MATLAB后,工作区变量不会保留。使用save命令保存数据以供将来使用
save myfile.mat
- 通过保存,系统会使用.mat扩张名将工作区保存在当前工作文件夹中一个名为MAT文件的压缩文件中
- 使用 load 将MAT文件中的数据还原到工作区
load myfile.mat
文本和字符
- 字符串数组中的文本
- 当处理文本时,将字符系列括在双引号中
t = "Hello, world";
- 如果文本包含双引号,在定义中要使用双引号
q = "Something ""quoted"" and somethong else."
- 与所有MATLAB变量一样,t 和 q 为数组,它们的类和数据类型时string
- 将文本添加到字符串的末尾,使用运算符“+”
tempText = “Temperature is ”+ 25 + “C”
- 与数值数组相同,字符串数组可以有多个元素,使用 strlength 函数中每个字符串的长度
A = [ "a", "bb"; "ccc","dddd" ]
strlength(A); ans = [ 1 2; 3 4 ]
- 字符数组中的数据
- 字符数组并不对应到文本,括在单引号中
seq = ‘ABCDEFG';
seq(4) ans = 'D'
seq2 = [seq 'HIJKLMN' ] seq2 = 'ABCDEFGHIJKLMN'
调用函数
- 调用函数,例如max,将输入参数括在圆括号中:
max(A)
- 存在多个输入参数,用逗号分隔:
max(A,B)
- 将函数赋值给变量,返回该函数的输出:
maxA = max(A)
- 存在多个输出参数,将其括在方括号中:
[maxA, location] = max(A)
- 将任何字符输入括在单括号中:
disp('hello world')
- 调用不需要任何输入输出的函数,只需键入函数名称,如清空命令行窗口:
clc
二维图和三维图
- 线图
-
使用
plot
创建二维线图%绘制从0到2Π的正弦函数值 x = 0:pi/100:2*pi; y = sin(x); plot(x,y); xlabel('x') %x坐标标签 ylabel('sin(x)') %y坐标标签 title('Plot of the Sine Function') %标题
% plot 函数添加第三个输入函数,设置线条特性,线型、标记、颜色
plot(x,y,'r--') %线条为红色虚线
线型 | 说明 | 标记 | 说明 |
---|---|---|---|
- (默认) | 实线 | none(默认) | 不显示 |
– | 虚线 | o | 圆圈 |
: | 点线 | + | 加号 |
-. | 点划线 | * | 星号 |
. | 点 | ||
x | 叉号 | ||
颜色 | 说明 | - | 水平条 |
r | 红色 | | | 垂直线条 |
g | 绿色 | s | 方形 |
b | 蓝色 | d | 菱形 |
w | 白色 | ^ | 上三角 |
k | 黑色 | v | 下三角 |
y | 黄色 | > | 右三角 |
m | 品红 | < | 左三角 |
c | 青蓝 | p | 五角星 |
h | 六角星 |
- 默认情况下,每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,MATLAB都会清空图窗
- 要将绘图添加到现有图窗,使用hold on
- 在使用hold off 或关闭窗口之前,当前图窗窗口中会显示所有绘图
%两个图像在同一图窗显示
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x)
plot(x,y2,':')
legend('sin','cos') %将sin、cos标注图中
hold off
%其他方式
1.plot(X1,Y1,...,Xn,Yn)
2.plot(X1,Y1,LineSpex1...,Xn,Yn,LineSpecn)
3.plot(X1,Y1,X2,Y2,LineSpace2,X3,Y3)
- 三维视图
plot3(x,y,z);
三维曲线图
%使用sin和cos组成三维的螺旋曲线
t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);
figure
plot3(st,ct,t,'b^-');
xlabel('sin(t)');
ylabel('cos(t)');
zlabel('t');
mesh(x,y,x);
三维网格图
%sinc函数
x=-8:.5:8;
y=x;
[X,Y] = meshgrid(x,y);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
figure
mesh(X,Y,Z)%直接mesh(Z)也可以
%subplot(211);meshc(Z);%绘制等高线
%subplot(212);meshz(Z);%绘制界线
surf(x,y,z);
三维曲面图
x=-5:5;
y=x;
[X,Y]=meshgrid(x,y);
Z=X.^2+Y.^2;
figure;
surf(X,Y,Z);
colormap cool%调色为cool
- 多个绘图
-
使用tiledlayout或subplot在同一个窗口的不同部分显示多个 绘图
-
subplot
- subplot(m,n,p); 将当前图形划分为m*n网格,并在p指定的位置创建坐标轴
- subplot(m,n,p,‘replace’); 删除位置p处的现有坐标轴并创建新坐标轴
subplot(2,1,1); x = linspace(0,10); y1 = sin(x); plot(x,y1) title('Subplot 1: sin(x)') subplot(2,1,2); y1 = sin(5*x); plot(x,y2) title('Subplot 2: sin(5x)')
编程和脚本
- 脚本
edit mysphere;
edit 命令创建脚本- 该命令会打开一个名为mysphere.m的空白文本。输入代码,以创建一个单位球,半径加倍并绘制结果图
% 创建并绘制一个半径为r的球体.
[x,y,z] = sphere; % 创建一个单位球.
r = 2;
surf(x*r,y*r,z*r) % 调整每个维度并绘图.
axis equal % 对每个轴使用相同的比例.
% Find the surface area and volume.
A = 4*pi*r^2; %计算球的表面积
V = (4/3)*pi*r^3; %计算球的体积
mysphere
将文件保存到当前文件夹- 要运行脚本,可在命令行中键入脚本名称,或点击编辑器的运行按钮
- 循环及条件语句
N = 100;
f(1) = 1;
f(2) = 1;
for n = 3:N
f(n) = f(n-1) + f(n-2);
end
f(1:10)
num = randi(100)
if num < 34
sz = 'low'
elseif num < 67
sz = 'medium'
else
sz = 'high'
end
帮助和文档
doc mean
在单独的窗口打开函数文档mean(
命令行窗口中会显示相应函数的提示help mean
可在命令行窗口查康相应函数的简单文档
怕什么真理无穷,进一寸有一寸的精彩