Matlab的代码文件后缀名为m,在旧版的Matlab中,一个文件只能包含一个函数,在Matlab2016b之后的版本中,需要用到的函数,可以在当前文件中定义(而不是单独新建一个文件,存储一个可能只有一行的函数),但是需要注意一点,函数的定义必须放在文件的最后。建议的写法为:在一份代码文件中,末尾定义需要用到的子函数,开头定义一个与文件名相同的函数(注意在开头定义,名字相同),作为这份文件的“代表”,在此函数中写主体的框架,不要把语句写在函数体的外面,不要把变量定义在函数体外面(看起来是全局的,但实际上并不是,而且会引起很多麻烦)
%文件名为fib.m %具体知识点下文总结 function []=fib() for i=1:10 fprintf('%02d\n',cal_fib(i)); end end function [res]=cal_fib(index) if index<=2 res=1; else res=cal_fib(index-1)+cal_fib(index-2); end end
%如果没有返回值或者参数,方括号或圆括号可以不写 %如果没有参数,调用时圆括号也可以不写 %返回值和参数都可以有多个 %返回值不建议使用ans命名 function [return_list]=function_name(para_list) function body; end
x==y;%是否相等 x~=y;%是否不等 x>=y;%大于等于 x<=y;%小于等于 x>y;%大于 x<y;%小于
c=a+b;%加法 c=a-b;%减法 c=a*b;%乘法 c=a/b;%除法 c=a^b;%幂 c=a&b;%并且 c=a&&b;%并且 c=a|b;%或者 c=a||b;%或者 c=mod(a,b);%取模 c=xor(a,b);%异或 c=bitxor(a,b);%按位异或 c=bitand(a,b);%按位和 c=bitor(a,b);%按位或
%声明矩阵时,逗号分隔同一行的元素,分号分隔不同的列 %逗号可以用空格代替(我是肯定不会用空格的) arr=[1,2;3,4];
arr=zeros(4,5); %使用圆括号进行索引,逗号分开维度 x=arr(2,3); %数组下标从1开始 arr(0,0);%错误 arr(4,5);%正确 %线性索引,只通过一个数字进行索引 %也就相当于把高维度数据“拍平” arr(20);%正确 %下标越界的时候 %如果是作为左值,会自动填充至符合条件 %如果是作为右值,会报错 %不会报错,自动填充 %但是一般不要这样,非预期范围内的事情都很玄学 arr(99)=x; %会报错 x=arr(100);
%Matlab中切片是闭区间 a=[1,2,3,4,5,6,7]; b=a(3:6);%[3,4,5,6]
x=true; y=false;
if x do some thing; elseif y do some thing; end
%for循环 for i=1:100 do some thing; %continue; %break; end %while循环 while x do some thing; end
%注释语句 不会生效
line_part_a... line_part_b;
点乘:在Matlab中,我们可以把变量看作两种:单一变量(数字)和组合变量(数组、矩阵),单一变量之间的操作、单一变量和组合变量的操作并无歧义,但是组合变量之间的操作,可以是预先定义的操作(例如矩阵乘法),也可以是组成元素之间先进行操作再重新组合(先打碎再重组),这样就产生了歧义。所以点乘就代表了组成元素之间先进行操作再重组,写法为在操作符之前加上一个点;普通的写法就按照人们定义好的规则进行
a=[1,2]; b=[3;4]; disp(a*b);%ans=[11]; disp(a.*b);%ans=[3,6;4,8];
转置:矩阵后面加上一个单引号表示转置
a=[1,2;3,4]; disp(a);%ans=[1,2;3,4]; disp(a');%ans=[1,3;2,4];
全局变量:全局空间默认是隐蔽的,正常声明的变量的可见范围都是本函数,声明全局变量要使用global关键字,声明后该变量会存在于全局空间,在需要使用该变量的其他函数内要重新声明(只是引入其可见性,不更改或者重新初始化其值),注意不要和本地变量命名冲突
function []=fun_a() %x=0; %不要以上操作:在声明全局变量前声明一个同名的本地变量 global x; end function []=fun_b() %两个函数共享了一份x的内容 global x; end
虚数:Matlab默认数字范围就是全复数集合,i、j可以直接当作复数单位来用
%可以直接这么写 a=1+i; b=1-j;