Mm数据类型
在matcom中,矩阵被封装起来,便于开发人员使用。Matcom里所以的数据类型为Mm.就Mm数据类型的使用作一些总结概括。
Mm x,y;直接生成Mm对象实例,为空的。使用时必须赋值。
Mm x,y=zreos(3,3);生成3x3大小的矩阵。赋初值为零。类似的函数有:eyes(n),eye(n,m)对角线为1其余为0的矩阵。rand(n),rand(n,m),生成随机值矩阵,前者为方阵,后者为nxm的行列式。magic(n),魔方矩阵。
对于矩阵可进行加减乘车的运算。但是只有满足一定的规则,矩阵运算才有意义,不如加减运算时两个矩阵的行列数必须相同。
Mm x,y;
x=rand(10);
y=rand(10);
display(x+y)
display(x-y)
对Mm类型数据的访问通常是通过访问单个元素实现的。Mm x=rand(3,3);访问x的元素方法为:
x.r(n,m),n和m为行和列数。double y=x.r(1,1) ,y的数值为x的第1行和第一列的数值。
对单个元素的数值操作,如改变数值方法为:x.r(1,1)=10;把x的第1行和第一列的数值赋为10.
访问Mm元素时,需注意它的下表是从1开始的。;另一种对Mm的访问是x.r(k).k为1到n*m .MATCOM数据是按列存储的,所以x.r(k)是从第一列开始访问,依次递增。比如:
Mm x= zeros (3,3);
x.r(1,1)=1;
x.r(1,2)=2;
x.r(1,3)=3;
//x=[1,2,3;0,0,0;0,0,0]
结果:
x.r(1)=1;
x.r(2)=0;
x.r(3)=0;
x.r(4)=2;
x.r(5)=0;
x.r(6)=0;
x.r(7)=3;
x.r(8)=0;
x.r(9)=0;
Mm数据类型的初始化方法除了赋值之外还可通过宏M_VECTOR实现。
double data[6]={1,2,3,4,5,6};
Mm x;
x= M_VECTOR(x,data);//用double向量直接初始化,x为1*6的矩阵
//向量赋值后,用reshape改变行列数
x.reshape(2,3);//x为2*3大小的矩形。
display(x);
要知道Mm的行和列的数目,可调用函数:
int n,m,s;
n=x.rows();//获得行数
m=x.cols();//获得列数
s=x.size();//获得矩阵大小,s=n*m;
Mm数据的一个重要作用是为句柄。举例如下:
1. 画一条正弦曲线,要求输入曲线颜色,图像标题,X轴和Y轴标题。
Mm h=plot(CL(sin(linspace(1,2*pi,100))));//曲线句柄h,对曲线的操作时,调用set函数//对句柄h进行操作,获得属性时用get(h,….).
int r,g,b;
char xl[50],yl[50],tl[50];
cout<<"输入颜色成分r,g,b:";
cin>>r>>g>>b;
Mm color=zeros(1,3);
color.r(1)=(double)r/255.0;
color.r(2)=(double)g/255.0;
color.r(3)=(double)b/255.0;
cout<<"输入x轴标题:";
cin>>xl;
cout<<"输入y轴标题:";
cin>>yl;
cout<<"输入图形标题::";
cin>>tl;
set(h,(CL(TM("color")),color));
title(CL(TM(tl)));
xlabel(CL(TM(xl)));
ylabel(CL(TM(yl)));
2. 在上述曲线基础上要把正弦曲线改为余弦曲线:
y=cos(linspace(1,2*pi,100));
set(h,TM("Ydata"),y);//直接改变y轴数据
类似改变x和z轴数据方法为:set(h,TM("Xdata"),y); set(h,TM("Zdata"),y);需注意,改变前后数据个数需保持不变。