Open Charlotte324 opened 1 year ago
内容来自21年的hyt口述
链接基本上来自[mathwork](https://ww2.mathworks.cn/help/matlab/math/basic-matrix-operations.html)
edit % 然后按回车就能出现
注释是%
Ctrl+R %将该行变为注释 Ctrl+T %取消注释 ctrl+i %自动整理代码
Clear all %清除工作区的变量(赋值情况) Clc %清除命令行窗口里面的历史 Ctrn+N %新建一个untitled
F9 %选中然后按Fn+F9
disp(x) %输出x
代码对大小写敏感,对空白空格不敏感(定义数组时除外)。
可以含数字、字母、下划线;
例外:变量的首字符必须是英文字母
保留字(某些循环语句)不能用
命名方法 浮点型 a=6,6.0
字符串型 a=’charlotte’=”charlotte”(建议都用单引号比较好)
%交换a,b的值: c=a; a=b; b=c
同行用逗号或者空格隔开;不同行用分号隔开
a=[1,2,3,4,5] b=[2,3,4;5,6,7] a=[1 2 3 4 5]
方括号是赋值用的,小括号是引用用的
a:b
[a,a+1,a+2,...,b]
C=1:2:9 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [1,3,5,7,9] 等差数列,从1到9,每隔两个
A=zeros(4) %4X4全零矩阵 行向量 A=zeros(2,6) %2X6全零矩阵 2行6列 行向量 B=zeros(5,5,3) %矩阵也可以是三维的,用B(:,:,1) ,B(:,:,2) ,B(:,:,3) 三个层次,每个层次是5X5全零矩阵 A=ones(4) %4X4全一矩阵 行向量 A=eye(4) %单位方阵赋值函数,一个对角线是1,其他是0
r=rand(1) %随机生成一个介于0到1的函数,每个数出现的概率是等可能的 %%%%%%%%%%%%%%%%%%% r = 0.8147 B=zeros(5,5,3) B(:,:,1)=rand(5,5) %生成一个5X5的矩阵,每个数取值在0-1;通过倍乘和加法,可以将0-1扩展成任意范围 %先生成那种空的矩阵,再往里面填数 %%%%%%%%%%%%%%%%%%% B(:,:,1) = 0.1270 0.5469 0.9572 0.9157 0.8491 0.9134 0.9575 0.4854 0.7922 0.9340 0.6324 0.9649 0.8003 0.9595 0.6787 0.0975 0.1576 0.1419 0.6557 0.7577 0.2785 0.9706 0.4218 0.0357 0.7431 B(:,:,2) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 B(:,:,3) = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 F=randn() %生成一个以零为轴,方差为1的正态分布(标准正态分布)的随机数 randi(m,5,5) %首位m表示1-m间的随机整数 5X5 i可能是Integral叭 randi([4,10],5,6) %首位表示生成4-10间的随机整数 5X5 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ans = 7 8 10 4 9 5 5 9 5 7 9 9 8 7 9 4 10 7 5 4 7 10 4 10 8 5 10 4 6 5
a=[1,2,3] d=repmat(a,2,3) %把a当成一个矩阵里面的元素,赋到2X3的矩阵里 %%%%%%%%%%%%%%% d = 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3
使用小括号调用。a() 。数组逻辑必须从1开始,而不是从0开始。
一行的矩阵可以用一个数字来索引它
a=[1,2,3] a(1) %%%%%%%%%%% ans = 1
如果是AXB 的矩阵,可以从左到右,从上到下索引;
根据行主元和列主元,可以分开数数。
a(1,3) %调出来a这个矩阵里面的第一行,第三列的数 k=a(1,2) %令k=在a(1,2)这个地方的值
[数组索引](https://ww2.mathworks.cn/help/matlab/math/array-indexing.html)
正常的行列
A(i,:) %第i行的全部元素 A(:,j) %第j列的全部元素 A(i:i+m,k:k+m) %第i~i+m行内且在第k~k+m列中的所有元素 A(i:i+m,:) %第i~i+m行的全部元素 A(:;1) %第一列 a([1,2],;) %把第一行和第二行单拎出来 [1,2]是把a(1,;)和a(2,;)合起来的结果 a([1,3],[1,3]) %把第一行、第三行和第一列、第三列提出,行列没有交叉的地方扔掉(生成一个2X2) a(3,3)=3 %令矩阵a的第三行第三列赋为3 赋值 把后面的值赋给前面 a([1,3],[1,3])=[0,0;0,0]
三维矩阵降维
B=zeros(5,5,3) B(:,:,1)=rand(5,5) B(:,:,2) %把一个三维矩阵的第2层调出来 C=B(:,:,1) %令C等于B的第二层(C是二维矩阵;不需要先定义C的大小)
length(B) %输出长宽高里最大的那个值,一个整数 size(B) %依次输出三个维度的大小(长,宽,高)
一样大小的才能加
a*b %真·矩阵乘法 b’ %矩阵转置 a.*b %点乘-对应位置相乘 a/b %a乘以b的逆, 即=a*inv(b) inv(b) %输出b的逆 a./b %点除-对应位置相除
[元胞数组](https://ww2.mathworks.cn/help/matlab/ref/cell.html)
C=cell(2,3) %元胞数据组 两行三列 %原胞数据组可以每个位置的数据的种类不一样,可以是数,文本,矩阵,元胞数据组里面的东西会用{}包住 C{1,3}=eye(3) %生成一个一行三列的元胞数组,令第三个值为3X3的单位矩阵。 C{1,3}=2 %令第二个值为数字2(1X1) %%%%%%%%%%%%%%%%%%%%%%% C = 1×3 cell 数组 {0×0 double} {[2]} {3×3 double}
double 双精度浮点数(数据一般以16个字节存储,double是以32个字节存储的;二进制里double32位是准确的)
== >= ~= > <
1~=2 %1不等于2
|| 或 ; && 与
| & 写一个也行,但是计算量大一些
写两个和写一个的规则:
非短路情况:1==1|1==3两个都算
1==1|1==3
短路情况: 1==2||1==3如果第一个错了,就不用算第二个了
1==2||1==3
一般是写短路,但是在特殊情况下需要用&(当需要两个都计算时)
分号:写完一行的时候写一个分号,说明这个命令没写完(否则会直接输出值)
分号是区分两行的,用分号把两行放在一行也可以,比如a=b;b=c;
正常写
1、for...end 结构
%例子:计算2^i的和,计算到n sum=0; n=10; for i=1:10 sum=sum+2^i; end disp(sum)
for后面跟i=某个向量,把这个向量里的值都带进去算一遍
for这个句子后面不用加分号,是一个固定的语法。
比如for i=1:9 相当于把i=1, i=2, i=3, ...i=9跑一下
i=1:2:9 相当于把i=1, i=3, i=5, i=7, i=9带进去过了一遍
后面的式子里没有i也行,就相当于运行了(i的值的个数)次
如果i是一个矩阵,只会跑这个矩阵的第一行(每行分别跑)
a=randi(5,2,2) sum=0; n=10; for i=a sum=sum+i; end disp(sum) %%%%%%%%%%%%%%% a=[2,3;5,2] sum=[5;7]
2、while...end 满足就跑一次
i=1; while 2^i<100000 && 3^i<100000 i=i+1 end disp(i) %11
3、分支结构
switch...case..otherwise 结构
if..else... 结构(常用)
a=5 %一个事实 if a==1 b=1 elseif a==2 b=2 elseif a==3 b=3 else b=4 end disp(b) %4
[脚本文件和函数文件](https://blog.csdn.net/xuxinrk/article/details/100923960)
[.m和.mlx](https://ww2.mathworks.cn/help/matlab/matlab_prog/what-is-a-live-script-or-function_zh_CN.html)
包含:名称、输入值、算法、输出值
先创建一个文件夹,在下面分别有两个.m文件,一个是add.m,一个是code.m
%%%%%%%%%add.m function sum=add(a,b,c) sum=a+b+c end %%%%%%%%%%code.m a=2; b=4; c=6; d=add(a,b,c) disp(d) %12
这个里面的参数:a,b,c只在小函数中使用,称为形式变量,在大函数里面不能用。
把这个脚本保存到当前文件夹中,命名一定要是add(这个函数的名字)
之后就可以引用。
变量是指变量代表的数值,就是重新定义出一个a,b,c。a,b,c的名字不重要,只是中间变量。End之后它们就消失了。
[指针](https://blog.csdn.net/qq_49217297/article/details/119360681?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119360681-blog-48829453.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119360681-blog-48829453.pc_relevant_default&utm_relevant_index=2)调用了存储a,b,c的地方。
function add(a,b,c) a=1; b=2; c=3; end %运行: a=2; b=4; c=6; add(a,b,c) disp(c) %6 这时a,b,c不会被赋值成1,2,3(变量)
function add(*a, *b, *c) *a=1;*b=2;*c=3 end %这时运行code.m之后,a,b,c会被赋值成1,2,3,此时的a,b,c就是指针。(指针)
基础
内容来自21年的hyt口述
链接基本上来自[mathwork](https://ww2.mathworks.cn/help/matlab/math/basic-matrix-operations.html)
打开编辑器
注释
注释是%
界面
运行
输出
变量名称
代码对大小写敏感,对空白空格不敏感(定义数组时除外)。
可以含数字、字母、下划线;
例外:变量的首字符必须是英文字母
保留字(某些循环语句)不能用
命名方法 浮点型 a=6,6.0
字符串型 a=’charlotte’=”charlotte”(建议都用单引号比较好)
数运算
创建矩阵
同行用逗号或者空格隔开;不同行用分号隔开
方括号是赋值用的,小括号是引用用的
冒号的用法:
a:b
[a,a+1,a+2,...,b]
zeros()
生成含随机数的矩阵
随机数函数rand() randn() randi()
复读机函数repmat()
矩阵中的元素调用
使用小括号调用。a() 。数组逻辑必须从1开始,而不是从0开始。
行向量中的数索引(小括号)
一行的矩阵可以用一个数字来索引它
矩阵中的数索引
如果是AXB 的矩阵,可以从左到右,从上到下索引;
根据行主元和列主元,可以分开数数。
多位矩阵中的矩阵索引(冒号)
[数组索引](https://ww2.mathworks.cn/help/matlab/math/array-indexing.html)
正常的行列
三维矩阵降维
矩阵的属性
长宽高
矩阵运算
加减
一样大小的才能加
乘除
元胞数组
[元胞数组](https://ww2.mathworks.cn/help/matlab/ref/cell.html)
double 双精度浮点数(数据一般以16个字节存储,double是以32个字节存储的;二进制里double32位是准确的)
语句
一、程序内结构
逻辑语句
== >= ~= > <
逻辑判定式之间:
|| 或 ; && 与
写两个和写一个的规则:
非短路情况:
1==1|1==3
两个都算短路情况:
1==2||1==3
如果第一个错了,就不用算第二个了一般是写短路,但是在特殊情况下需要用&(当需要两个都计算时)
二、流程控制
分号:写完一行的时候写一个分号,说明这个命令没写完(否则会直接输出值)
分号是区分两行的,用分号把两行放在一行也可以,比如a=b;b=c;
顺序结构
正常写
循环结构
1、for...end 结构
for后面跟i=某个向量,把这个向量里的值都带进去算一遍
for这个句子后面不用加分号,是一个固定的语法。
比如for i=1:9 相当于把i=1, i=2, i=3, ...i=9跑一下
i=1:2:9 相当于把i=1, i=3, i=5, i=7, i=9带进去过了一遍
后面的式子里没有i也行,就相当于运行了(i的值的个数)次
如果i是一个矩阵,只会跑这个矩阵的第一行(每行分别跑)
2、while...end 满足就跑一次
3、分支结构
switch...case..otherwise 结构
if..else... 结构(常用)
三、程序间结构
[脚本文件和函数文件](https://blog.csdn.net/xuxinrk/article/details/100923960)
[.m和.mlx](https://ww2.mathworks.cn/help/matlab/matlab_prog/what-is-a-live-script-or-function_zh_CN.html)
函数
包含:名称、输入值、算法、输出值
先创建一个文件夹,在下面分别有两个.m文件,一个是add.m,一个是code.m
这个里面的参数:a,b,c只在小函数中使用,称为形式变量,在大函数里面不能用。
把这个脚本保存到当前文件夹中,命名一定要是add(这个函数的名字)
之后就可以引用。
变量和指针
变量是指变量代表的数值,就是重新定义出一个a,b,c。a,b,c的名字不重要,只是中间变量。End之后它们就消失了。
[指针](https://blog.csdn.net/qq_49217297/article/details/119360681?spm=1001.2101.3001.6650.1&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119360681-blog-48829453.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-1-119360681-blog-48829453.pc_relevant_default&utm_relevant_index=2)调用了存储a,b,c的地方。