【知识学习】matlab入门

这篇博客介绍了MATLAB的基础知识,包括数组操作、逻辑运算、矩阵乘法、循环与函数、绘图以及一些常用函数的使用。内容涵盖了数组串联、浮点数格式、元素级运算、矩阵索引、逻辑下标、元胞数组和结构体等概念,并提供了多个示例代码,适合初学者入门。
摘要由CSDN通过智能技术生成

写在前面

解释一下目前写完的部分:

基本上一行就是一个提示,如果有代码的话,跟的是上一行提示的(即:代码是对上一行提示的解释)

入门并不建议当文档查看,建议通读一遍

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:将整数转换为字符

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cls1277

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值