我的一门课必须使用matlab脚本编程,可是网上教程大多数是如何进行数学的运算。于是我记录一二。
1.数组
1.1数组定义
a=[];%定义了一个a的数组
1.2数组大小
m=size(a);%得到a的行列数,m是1*2的矩阵,
这个要注意,要是希望得到一个数一定要用下面两个
m=size(a,1);%得到a的行数
m=size(a,2);%得到a的列数
1.3 引用
引用数组(矩阵)的元素
A(a,b:c)%第a行第b到c个元素
A(a,b)%第a行第b列的元素
A(a,:)%第a行所有元素
就算是一个一维数组,引用时最好用a(1,i),而非a(i)
数组是小括号,不是中括号
注意数组下标从1开始
2.循环
2.1 while循环
while (条件)
执行语句
end
2.2 for循环
for i=a: b: c
执行语句
end
%a,b,c分别为起始量,步长,结束量
3.输入输出
3.1 输入
1.p=xlsread('filename');%读入纯数字的矩阵,读进来放在p中,继续进一步处理
2.p=csvread('filename');%功能如上
3.2 输出
1.fprintf(....)%标准输出,和c的完全一样,很好用,注意是单引号'',其他和c一样
2.disp()%输出括号里的东西,最好是一个数或者矩阵
3.不加分号会输出结果
4. 判断
if 判断语句
执行语句1
end
if 判断语句1
else
判断语句2
end
a==b%a和b相等
a~=b%a和b不等
a>=b
a<=b
6.函数
6.1 自定义函数
function[output1,output2,...]=function_name(input1,input2,...)
...
end
超过一个返回值需要用一个数组来接收
6.2 自带函数
1.isnan(A(a,b))%判断A(a,b)是不是数字
2.mean(A(a,:))%第a行求平均值
3.偏度峰度等统计学函数这里从略
4.plot(x,y)%以x为x轴画y的函数,y的每一行作为一个新的函数
5.hold on %与plot配合,hold on 以后再plot就会画在同一个图中
7.指针
暂时没有遇到,且不管
8.实例
其实本来我用matlab写了一个DTW算法,但是由于是作业,不方便放出来,我就写一个快排,可以大致了解一下。
注意这里数组a是全局变量,修改之前要先声明。
或者可以选择改一次传回来一次,那就有点烦了。
function [p] = findp(left,right,a)%找到p
global a;
i=left;
j=right-1;
while(i<j)
while(a(i)<=a(right)&&i<j) i=i+1; end
while(a(j)>=a(right)&&i<j) j=j-1; end
t=a(i);a(i)=a(j);a(j)=t;%交换
end
if(a(i)>a(right)) t=a(i);a(i)=a(right);a(right)=t; end
p=i;
end
function [a] = qsort(i,j,a)
global a;
if(i<j)
p=findp(i,j,a);
qsort(i,p,a);
qsort(p+1,j,a);
end
end
a=[1,2,9,5,6,8,7];
global a;
qsort(1,size(a,2),a);
disp(a);
绘图
clf
a1=0:1:0.1
x=-1:0.1:1
y=x;
[x,y]=meshgrid(x,y);
z1=sqrt(1-x.^2-y.^2);
z2=-z1;
surf(x,y,real(z1));
hold on %画下一个
surf(x,y,real(z2));
axis equal
总结
总之matlab和c还是差不多的,和py可能更接近。了解了上面这些,处理一些简单的数字应该没问题。matlab比c方便的地方是矩阵,短处就是递归迭代计算时间太长。如果主要是数据的迭代,建议还是用c吧。