写在前面
解释一下目前写完的部分:
基本上一行就是一个提示,如果有代码的话,跟的是上一行提示的(即:代码是对上一行提示的解释)
入门并不建议当文档查看,建议通读一遍
API部分可以用ctrl+f自己搜索(不过我觉得没必要,其实直接doc或者help的效果可能会更好)API部分为目前我遇到的不明白的函数部分,用了help命令之后自己的一种解释方法,所以很有可能存在理解不通透的地方。(当然最大的问题就是没给参数列表,其实你写完函数名加个左括号就能看到了, 还用我输一遍?)
现在才是入门阶段,之后还会有补充的😄
入门
如果语句以分号结束,会执行计算,但不会在命令行窗口输出
用上箭头和下箭头可以重新调用以前的命令,且可以输入要调用命令的前几个字符,再按上箭头则可以直接找到
matlab将数字存储为浮点数,可以使用format命令显示更多小数位数,仅仅影响输出的格式,不影响计算
要执行元素级乘法(而非矩阵乘法),使用.*运算符,除此之外./ .^都有类似的运算
clear;
clc;
a = [1 2 3; 4 5 6; 7 8 9];
a*a
a.*a
a./2
a.^2
% ans =
% 30 36 42
% 66 81 96
% 102 126 150
% ans =
% 1 4 9
% 16 25 36
% 49 64 81
% ans =
% 0.5000 1.0000 1.5000
% 2.0000 2.5000 3.0000
% 3.5000 4.0000 4.5000
% ans =
% 1 4 9
% 16 25 36
% 49 64 81
串联运算符[],可以用来形成更大的数组
clear;
clc;
a = [1 2 3; 4 5 6; 7 8 9];
%水平串联
[a,a]
% ans =
% 1 2 3 1 2 3
% 4 5 6 4 5 6
% 7 8 9 7 8 9
[a;a]
%垂直串联
% ans =
% 1 2 3
% 4 5 6
% 7 8 9
% 1 2 3
% 4 5 6
% 7 8 9
i和j都是虚数单位
获取矩阵元素方式:
clear;
clc;
a = [1 2 3; 4 5 6; 7 8 9];
%第一种:行列
a(2,2)
%第二种:自上而下顺序遍历,标记从1开始,叫线性索引
a(5)
% ans = 5
% ans = 5
行列下标大于矩阵大小的情况:
clear;
clc;
a = [1 2 3; 4 5 6; 7 8 9];
% 不会自动扩展,会直接报错
% b = a(4,4)
% 直接扩展矩阵大小,并填入数值
a(4,4) = 17;
a
% a =
% 1 2 3 0
% 4 5 6 0
% 7 8 9 0
% 0 0 0 17
使用:引用多个数字的元素(start:end),单独的冒号代表整行(或整列),或者还可以(start:step:end)
使用whos可以查看工作区的内容
使用save命令会保存工作区
save myfile.mat
使用load命令使mat文件中的数据还原
字符串单引号和双引号的区别:双引号的为一个整体是1×1的矩阵,单引号为字符数组,为1×n的矩阵,n为单引号中字符格式
函数调用时,如果存在多个参数,用方括号接受
[minA, maxA] = bounds(A)
每次调用绘图函数、重置坐标区及其他元素以准备新绘图时,matlab都会清空图窗,使用hold on会保留当前绘图,再调用plot会显示所有绘图到一个窗口,直到调用hold off或者关闭窗口
循环产生斐波那契数列:
clear;
clc;
N = 100;
f(1) = 1;
f(2) = 1;
for n = 3:N
f(n) = f(n-1) + f(n-2);
end
f(1:10)
直接右键点击”添加路径“就可以切换运行路径
输入函数名+‘(’暂停,就可以自动显示参数信息
使用doc+函数可以在新窗口显示函数文档;help+函数名可以在当前窗口显示函数文档
转置’和.'的区别:前者会改变复数的符号,后者不会
clear;
clc;
A = [1+2i, 2+3i; 3+4i, 4+5i];
A'
A.'
% ans =
% 1.0000 - 2.0000i 3.0000 - 4.0000i
% 2.0000 - 3.0000i 4.0000 - 5.0000i
% ans =
% 1.0000 + 2.0000i 3.0000 + 4.0000i
% 2.0000 + 3.0000i 4.0000 + 5.0000i
矩阵按照指定顺序重新排列:将2、3列互换
clear;
clc;
A = [1:3;4:6;7:9];
A(:,[1,3,2])
% ans =
% 1 3 2
% 4 6 5
% 7 9 8
运算符问题:==要求实部和虚部都相等,而>,<,>=和<=忽略数字的虚部,仅考虑实部
/表示右除(AB=C,A=C/B),\表示左除(AB=C,B=A\C)。相当于逆矩阵乘到左面还是右面。
使用doc(help) elfun可以获得初等函数列表;specfun为高等数学函数列表;elmat为矩阵函数列表
eps是内置常量,浮点相对精度2的-52次方;realmin(max)是最小(大)浮点数;Inf、NaN(注意大小写)
输出中不会显示多个空行:
format compact
输入长语句:使用…分隔开
clear;
clc;
format compact;
s = 1-1/2+1/3-1/4 ...
+1/5-1/6+1/7
end是最后一行(列)的关键字
删除列:
clear;
clc;
format compact;
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
A
A(:,2) = []
% A =
% 1 2 3
% 4 5 6
% 7 8 9
% A =
% 1 3
% 4 6
% 7 9
删除单一元素:但是最后结果是行向量,且A()取下标时一定为矩阵,而不是行列表示一个元素,如A(1,2)=[]报错
clear;
clc;
format compact;
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
A(2:2) = []
% A =
% 1 7 2 5 8 3 6 9
逻辑下标:X是一个普通矩阵,L是逻辑下标,则X(L)返回X中逻辑L为True的值
元胞数组:以其他数组副本为元素的多维数组,使用cell可以创建空矩阵的元胞数组,也可以使用{}放入其他内容的集合创建元胞数组
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = [127, 129; 131, 134];
C = 1277;
D = {A, B, C};
% 取出元胞数组中第1个矩阵
D{1}
结构体:
clear;
clc;
format compact;
S.name = "cls1277";
S.level = "tcl";
S.score = "0";
S(2).name = "cls1267";
S(2).level = "ttcl";
S(2).score = "1";
S(3) = struct('name',"cls1257", 'level', "tttcl",'score', "2");
% 将S.name保存为names的数组
names = [S.name];
% 取出S数组里面的name
[n1, n2, n3] = S.name;
n1, n2, n3
% Q:动态字段是什么?
% A:函数形参为A 和 B,那么函数体中可以实现A.(B)来调用A结构体的B成员
将多个复数值作为参数传给plot时,matlab忽略虚部,但传递一个参数时除外。plot(Z)等价于plot(real(Z),imag(Z))
axis equal命令可以使x和y轴上的各刻度线增量的长度相同,会使绘图看起来更加圆润
键入figure(n)其中n为图窗标题栏的编号,设置为当前图窗;默认为上一次使用的图窗作为当前图窗;键入figure为打开新的图窗作为当前图窗
如果某图窗已存在,大多数绘图命令会清除轴并使用此图窗创建新绘图。但是,这些命令不会重置图窗属性,例如,背景色或颜色图。如果已在以前的绘图中设置图窗属性,您可以先使用带有reset选项的clf命令。将属性恢复为默认值。
clf reset
title、label、text等可以输入latex
使用savefig可以保存为.fig文件,使用saveas命令加参数,可以保存图窗为其他格式。使用openfig函数加载保存为.fig文件的图窗,imread将其他格式文件读入到matlab,imwrite将matlab数据写入到标准图片格式
通过图窗菜单页面的”生成代码“,顾名思义。
如果要显示三维图中z=f(x,y)的函数,大概写成下面这样,具体函数解释见API部分
[X, Y] = meshgrid(-8:.5:8);
R = sqrt(X.^2+Y.^2)+eps;
Z = sin(R)./R;
mesh(X, Y, Z)
switch没有break
A==B,其中AB均为矩阵,返回01组成的矩阵,可以理解为逻辑函数
判断两个变量是否相等,使用isequal函数
向量化和预分配!
matlab自动有可变参数的函数形式,使用默认值计算
匿名函数:f = @(arglist)expression
在private子文件夹中可以创建私有函数
函数可以嵌套
如果想多个函数共享一个变量,在所有函数中变量的声明前均加上global
matlab接受字符参数,不必使用括号和引号,如:foo a b c代替foo(‘a’,‘b’,‘c’),但无返回参数!!!小心,可能会产生matlab检测不出来的错误!!!
API
**cos(3.14)**输出-1
**rand()**可以产生指定大小的随机0-1之间的矩阵
**inv()**逆矩阵
format格式
clear;
clc;
a = rand(3,3)*100;
format long
a
format short
a
% a =
% 14.929400555905747 25.428217897153104 92.926362318722781
% 25.750825412373647 81.428482606881630 34.998376598480874
% 84.071725598366257 24.352496872498929 19.659525043120819
% a =
% 14.9294 25.4282 92.9264
% 25.7508 81.4285 34.9984
% 84.0717 24.3525 19.6595
short表示5位近似定点数;long 15位近似定点数;hex 十六进制表示;bank 银行格式,固定元和分;rat 最小证书比例(分数)表示
其他参数:https://blog.csdn.net/qq_38689263/article/details/109130436
magic幻方矩阵
clear;
clc;
magic(3)
% ans =
% 8 1 6
% 3 5 7
% 4 9 2
strlength获取数组中每个字符串的长度
clear;
clc;
A = ["aaa", "bbb", "ccc"; "1", "2", "3"; 4, 5, 6];
strlength(A)
linspace返回一个等差数列
绘图相关:
plot(x,y);xlabel(“x”),ylabel(“sin(x)”),title(“plot of the sin function”)分别标记x轴、y轴和标题
plot还有第三个参数:颜色、线型和标记类型,如"r-+"、"g:*"等(需要自己去查参数列表)
surf(x,y,z)创建曲面图,用有颜色的曲面表示;mesh(x,y,z)用有颜色的曲线来表示
多个绘图:
创建布局调用tiledlayout,如果要让某个绘图出现在下一个区域时,使用nexttile
clear;
clc;
t = tiledlayout(2, 2);
x = linspace(0, 30);
nexttile
plot(x, sin(x))
nexttile
plot(x, cos(x))
nexttile
plot(x, tan(x))
nexttile
plot(x, sec(x))
randi:返回随机整数
sum:输出矩阵的列求和,因此求行可以转置一下;sum还有一个维度参数,例如sum(A,2)返回A矩阵行总和的列向量
diag:返回主对角线上的元素
fliplr:自左向右翻转函数
clear;
clc;
A = [1+2i, 2+3i; 3+4i, 4+5i];
fliplr(A)
% ans =
% 2.0000 + 3.0000i 1.0000 + 2.0000i
% 4.0000 + 5.0000i 3.0000 + 4.0000i
fix:四舍五入
randn:返回正态分布的随机数组成的矩阵
sort:排序,对虚数的话:先按照向量的长度来排序,要是相等就按照相位角排序
angle:获得虚数的相位角
disp:显示变量的值,但是不显示变量名称
sprintf:格式化输出
std:标准差
find:配合逻辑下标矩阵,返回逻辑判断为True的线性索引的下标,此时再用矩阵接收find函数结果,为行向量
perm:返回排列
>> perms(1:3)
ans =
3 2 1
3 1 2
2 3 1
2 1 3
1 3 2
1 2 3
prod:返回A的数组元素的乘积,如果A为多维数组,则prod沿第一个非单一维度运算并返回乘积数组,维度大小减1。
reshape:重构数组,改变数组大小
char:自动填充空格,将字符串拼接,返回(字符串个数×maxlength)的矩阵
cellstr:可以将填充后的字符数组转换为字符向量元胞数组,char为逆过程
det:计算矩阵行列式的值
cond:返回矩阵求逆运算条件数,范围是:1(数字稳定的矩阵)~Inf(奇异矩阵)
kron: 此 MATLAB 函数 返回矩阵 A 和 B 的 Kronecker 张量积。如果 A 是 m×n 矩阵,而 B 是 p×q 矩阵,则 kron(A,B)是通过获取 A 元素与矩阵 B 元素之间的所有可能积而形成的一个 mp×nq 矩阵。用A的每个元素分别与整个矩阵B相乘的结果。
还一起提出了几个函数:repmat,repelem,blkdiag
norm:输出范数,默认为2范数,即欧几里得长度
rank:返回矩阵的秩
pinv:返回矩阵的伪逆,如果无解,返回最小二乘解,否则返回矩阵的逆
rref:简化的行阶梯形矩阵
table:返回具有变量名的表数组
legend:标识各条线
subplot:(m,n,p)把窗口划分为m×n个小窗口,并将第p个窗口作为当前图窗
clear;
clc;
format compact;
x = linspace(0,2*pi);
subplot(3, 1, 1); plot(x, sin(x));
subplot(3, 1, 2); plot(x, cos(x));
subplot(3, 1, 3); plot(x, tan(x));
axis:如果要自己设置范围,要禁用自动极限设置,输入
axis manual
显示轴:
axis on
grid:on显示网格线
meshgrid:[X,Y]=meshgrid(a, b)其中X和Y是大小相等的矩阵,均为length(b)×length(a),其中X由a作为行向量组成,Y由b作为列向量组成
colorbar:显示色阶的颜色栏
alpha:透明度,取值0-1
sign:可以看作sgn函数
type:后跟.m后缀的文件名,可以看到文件内容
int2str:将整数转换为字符