MATCOM函数.docx

上传人:b****5 文档编号:6295571 上传时间:2023-01-05 格式:DOCX 页数:35 大小:309.88KB
下载 相关 举报
MATCOM函数.docx_第1页
第1页 / 共35页
MATCOM函数.docx_第2页
第2页 / 共35页
MATCOM函数.docx_第3页
第3页 / 共35页
MATCOM函数.docx_第4页
第4页 / 共35页
MATCOM函数.docx_第5页
第5页 / 共35页
点击查看更多>>
下载资源
资源描述

MATCOM函数.docx

《MATCOM函数.docx》由会员分享,可在线阅读,更多相关《MATCOM函数.docx(35页珍藏版)》请在冰豆网上搜索。

MATCOM函数.docx

MATCOM函数

MATCOM函数

1.一个win32应用程序框架

#include

voidmain()

{

  initM(MATCOM_VERSION);

...........

...........

  exitM();

 }

 

2.求矩阵行列式和逆

新建矩阵文件:

m.txt

       1    -4  3

       3    5   8

       2    4   1

代码:

  Mmx;

  load(TM("m.txt"),CL(x));

  printf("矩阵:

\n");

  disp(x);

  printf("行列式:

\n");

  disp(det(x));

  printf("逆矩阵:

\n");

  Mmy=inv(x);

  disp(y);

结果:

 

3.傅立叶变换FFT

什么是FFT?

 

3.1输出到屏幕

代码:

  printf("FFT例子--visualsan@\n");

  Mmx;

  doubledata[]={1,3,4,5,2,3,6};

  M_VECTOR(x,data);

  printf("inputdata:

\n");

  disp(x);

  printf("afterFFT:

\n");

  disp(fft(x));

结果:

 

3.2提取实部虚部并存储

  printf("FFT例子--visualsan@\n");

  Mmx;

  doubledata[]={1,3,4,5,2,3,6};

  M_VECTOR(x,data);

  printf("inputdata:

\n");

  disp(x);

  printf("afterFFT:

\n");

  Mm  y=fft(x);

  double*realpart;//存储实部

  double*imagepart;//存储虚部

  realpart  =newdouble[y.size()];

  imagepart=newdouble[y.size()];

  for(inti=0;i

  {

   realpart[i]=y.r(i+1);

   imagepart[i]=y.i(i+1);

  }

 

  FILE(*f);

  f=fopen("result.txt","w");

  fprintf(f,"visualsan@\n傅立叶变换结果\n");

  fprintf(f,"实部\t虚部\n"); 

  for(i=0;i

  {

   fprintf(f,"%.4g\t%.4g\n",realpart[i],imagepart[i]);

  }

  fclose(f);

  deleterealpart;

  deleteimagepart;

结果:

 

4.解线性方程组

我们假设有方程组如下:

   0.21x  +     y+     z  =2

       x  -1.29y+2.11z  =0.919

  -0.11x  +       y        =0;

尽量写的丑一些,我想肯定没人想解它。

4.1手动输入参数

代码:

   printf("线性方程组例子--visualsan@\n");

  Mmx,y;

  doublea[]={

                  0.21  ,  1     ,1    , 

                  1     ,-1.29  ,2.11,

                  -0.11,  1     ,0   };//系数 

  doubleb[]={  2     ,  0.919,0      };

  M_VECTOR(x,a);

  x.reshape(3,3);

  x=transpose(x);

  M_VECTOR(y,b);

  y.reshape(3,1);

  printf("方程为:

\n");

  disp(x);

  disp(y);

  printf("解:

\n");

  disp(mldivide(x,y));

结果:

 

4.2来自文件,写入文件

新建矩阵文件:

a.txt

       0.21    1      1     

        1     -1.29   2.11  

       -0.11   1      0   

新建矩阵文件:

b.txt

           2     

         0.919

           0  

代码:

   printf("线性方程组例子--visualsan@\n");

  Mmx,y,r;

  load(TM("a.txt"),CL(x));

  load(TM("b.txt"),CL(y));

  disp(x);

  disp(y);

  r=mldivide(x,y);

  saveascii(TM("result.txt"),CL(r));

结果:

result.txt

        -18.04811372335

        -1.985292509568

         7.775396391471

1.and

逻辑运算符,z=and(x,y);返回x&y的逻辑运算。

当x和y都为1时,结果为1,否则为0;这个函数只允许输入两个参数,可以是数值或者是向量。

在c++中的调用形式是mand(x,y);

例子:

  Mmx,y,z;

  doublex_v[]={1,0,1,1,0};

  x=zeros(1,5);

  memcpy(x.addr(),x_v,5*sizeof(double));

  disp(TM("x=\n"));

  disp(x);

  doubley_v[]={0,1,0,1,1};

  disp(TM("y=\n"));

  y=zeros(1,5);

  memcpy(y.addr(),y_v,5*sizeof(double));

  disp(y);

  z=mand(x,y);

  disp(TM("x&y=\n"));

  disp(z);

 

2.colon

y=colon(i,j,k)可以产生一组数组,以i为起点,j为间距,k为终点。

例子

  Mmx,y,z;

  x=colon(1,0.1,10);

  y=sin(x);

  plot((CL(x),y,TM("*")));

结果:

 

 

 3.ctranspose

 这是一个产生共轭复数额函数,y=ctranspose(x)的结果是产生x的共轭复数。

在matcom中复数的虚部位i.

(复数详细介绍)

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  Mmx,y;

  x=4*rand

(2)+4*rand

(2)*i;

  disp(TM("复数矩阵x:

"));

  disp(x);

  y=ctranspose(x);

  disp(TM("共轭矩阵x:

"));

  disp(y);

结果:

 

4.eq

这是一个比较函数,用于比较两个数是否相等。

如果相等,返回1,不等返回0;

数既可以为单个数,也可以是矩阵。

如果是矩阵,返回结果为相应的矩阵。

两个

矩阵只有维数相等才能比较。

y=[123;

   456];

x=[103;

   050];

x,y比较结果为:

[101;

                010];

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));  

  Mmx,y,z;

  doublex_v[]={1,10,1,1,0.1,2.1};

  x=zeros(1,6);

  memcpy(x.addr(),x_v,6*sizeof(double));

  x.reshape(2,3);

  disp(TM("x="));

  disp(x);

  doubley_v[]={1,10,0,1,1.0,2.1};

  disp(TM("y="));

  y=zeros(1,6);

  memcpy(y.addr(),y_v,6*sizeof(double));

  y.reshape(2,3);

  disp(y);

  

  z=eq(x,y);

  disp(TM("eq(x,y)="));

  disp(z);

结果:

 

5.ge

和eq用法一样,它是大于等于运算符。

z=ge(y,x)的结果是:

            1.当x和y为单个数时,x>=y时返回1;x

            2.当x和y为矩阵时,矩阵的每个元素进行比较,返回一个矩阵

              当x矩阵的相应位置元素大于等于y的相应位置元素时返回1,否则为0;

 

6.gt

和ge用法一样,它是大于运算符。

 

7.ldivide

左除运算。

z=ldivide(x,y)的结果是y的每个位置上的元素除于x相应位置后的结果,即x.\y

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  Mmx,y,z;

  x=rand(4);

  y=zeros(4);

  for(inti=1;i<=4;i++)

  {

   for(intj=1;j<=4;j++)

   {

    y.r(i,j)=i+j*2+1;

   }

  }

  z=ldivide(x,y);

  disp(TM("x="));

  disp(x);

  disp(TM("y="));

  disp(y);

  disp(TM("x.\y="));

  disp(z);

结果:

 

8.le

和ge用法一样,它是小于等于运算符。

 

9.lt

和ge用法一样,它是小于运算符。

 

10.minus

这是一个减法运算符,y=minus(x,y)的结果是返回x-y的结果。

对于矩阵,要求行列数相等。

x可以为矩阵,而y可以为数值,此时的运算结果是x的每个元素减去y的大小。

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  Mmx,y,z;

  x=rand

(2);

  z=minus(x,1);

  disp(TM("X="));

  disp(x);

  disp(TM("minus(x,1)="));

  disp(z);

  y=rand

(2);

  z=minus(x,y);

  disp(TM("y="));

  disp(y);

  disp(TM("minus(x,y)="));

  disp(z);

 

11.mldivide

这是一个经常用到的函数,对于线性方程xz=y,解z=x\y.此时可调用z=lmdivide(x,y),它返回x\y的结果。

当x,y同为矩阵时,x,y的行数必须相同。

结果z的行数和x相同,列数和y相同。

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  printf("线性方程组");

  Mmx,y;

  doublea[]={

        2  ,  1  ,1, 

    1  ,-1  ,2,

    -1,  1  ,1   };//系数  

   doubleb[]={  2     ,  2,1      };

   M_VECTOR(x,a);

   x.reshape(3,3);

   x=transpose(x);

   M_VECTOR(y,b);

   y.reshape(3,1);

   printf("方程为:

\n");

   disp(x);

   disp(y);

   printf("解:

\n");

  disp(mldivide(x,y));

结果:

 

12.not

取反运算符。

在c++环境中名称为mnot;

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  Mmx,y,z;

  x=rand(4);

  y=rand(4);

  z=gt(x,y);

  disp(TM("Z="));

  disp(z);

  disp(TM("not(Z)="));

  disp(mnot(z));

结果:

 

12。

or

或运算。

在c++环境中名称为mor.用法和and一样。

 

13.mpower

这是一个指数运算符。

z=mpower(x,y)的结果有几种情况,取决于参数:

    1.当x为矩阵,y为数值时,返回x的y次方即x^y,结束时一个矩阵。

    2.当y为矩阵,x为数值时,返回另外一种结果。

    3.当x和y同时为矩阵时,将发生错误。

例子:

  disp(TM("visualsan@---小老虎2010.1.2"));

  disp(TM("matcom函数

(1)\n"));

  Mmx,y,z;

  x=rand(4);

  y=x*2;

  z=mpower(y,2);

  disp(TM("y="));

  disp(y);

  disp(TM("mpower(y,2)="));

  disp(z);

结果:

1.mabs

计算绝对值。

y=a+b*i;

z=mabs(y);z的值为sqrt(a*a+b*b).其中y为矩阵或者数值。

例子:

 Mmx;

 x=-magic

(2)+10*rand

(2)*i;

 disp(TM("x="));

 disp(x);

 disp(TM("mabs(x)="));

 disp(mabs(x));

结果:

 

2.angle

计算复数的幅角。

y=a+b*i;

angle(y)=atan(b/a);

例子:

 Mmx;

 x=magic

(2)+2*rand

(2)*i;

 disp(TM("x="));

 disp(x);

 disp(TM("angle(x)="));

 disp(angle(x)*180.0/pi);

结果:

 

3.ceil

这是一个对矩阵所有元素向上取整运算。

对于正数,x=1.23,ceil(x)=2;

对于负数,x=-1.23,ceil(x)=-1;

例子:

 Mmx;

 disp(TM("visualsan@"));

 x=2*rand(4);

 disp(TM("正数:

ceil(x)="));

 disp(x);

 disp(TM("ceil(x)="));

 disp(ceil(x));

 x=-2*rand(4);

 disp(TM("负数:

ceil(x)="));

 disp(x);

 disp(TM("ceil(x)="));

 disp(ceil(x));

结果:

 

plex

构造复数。

y=complex(a,b);构造复数y=a+b*i。

在c++环境中函数名为mcomplex.

例子:

 Mmx,a,b;

 disp(TM("visualsan@"));

 a=rand

(2);

 b=rand

(2);

 x=mcomplex(a,b);

 display(a);

 display(b);

 display(x);

结果:

 

 puter

返回当前程序所运行的系统平台。

例子:

 Mmx,a,b;

 disp(TM("visualsan@"));

 x=computer();

 x.setstr

(1);

 disp(x);

结果:

 

6.conj

构造共轭负数。

y=a+b*i;

conj(y)为a-b*i.

例子:

 Mmx,a,b;

 disp(TM("visualsan@"));

 a=rand

(2);

 b=rand

(2);

 x=mcomplex(a,b);

 display(x);

 display(conj(x));

结果:

 

7.cross

计算向量的叉积。

z=cross(x,y).返回z为x和y的叉积。

x=(x1,x2,x3);

y=(y1,y2,y3);

z=cross(x,y);

z=(x2*y3-x3*y2,x3*y1-y3*x1,x1*y2-x2*y1);

例子:

 Mma,b;

 disp(TM("visualsan@"));

 a=ceil(rand(1,3)*3);

 b=ceil(rand(1,3)*2);

 display(a);

 display(b);

 display(cross(a,b));

结果:

 

8.cumsum

计算向量或矩阵的前N项和。

若=[x1,x2,x3,x4....],则cumsum(x)=[x1,x1+x2,x1+x2+x3,x1+x2+x3+x4....];

若x=[x1;

     x2;

     x3;

     x4

     ..

    ],

则cumsum(x)=[x1;

             x1+x2;

             x1+x2+x3;

             x1+x2+x3+x4

            ....];

 

若x=[x11,x12,x13,x14;

     x21,x22,x23,x24;

     x31,x32,x33,x34;

     x41,x42,x43,x44;   

    ],

则cumsum(x)=[x11,x12,x13,x14;

             x11+x21,x12+x22,x13+x23,x14+x24;

             x11+x21+x31,x12+x22+x32,x13+x23+x33,x14+x24+x34; 

             x11+x21+x31+x41,x12+x22+x32+x42,x13+x23+x33+x43,x14+x24+x34+x44

            ];

例子:

Mma,b;

 disp(TM("visualsan@"));

 b=ceil(rand(4,1)*3);

 display(b);

 display(cumsum(b));

 b=ceil(rand(1,4)*3);

 display(b);

 display(cumsum(b));

 b=ceil(rand(4)*3);

 display(b);

 display(cumsum(b));

结果:

 

9.dot

计算点积:

x=(x1,x2,x3);

y=(y1,y2,y3);

dot(x,y)=[x1*y1,x2*y2,x3*y3];

例子:

 Mma,b;

 disp(TM("visualsan@"));

 a=ceil(rand(1,4)*3);

 b=ceil(rand(1,4)*3);

 display(a);

 display(dot(a,b));

结果:

 

10.double

将矩阵转换为双精度。

在c++里名称为mdouble;

y=mdouble(x);

 

11.exp

计算自然对数。

例子:

 Mma;

 disp(TM("visualsan@"));

 a=ceil(rand(1,4)*3);

 display(a);

 display(exp(a));

结果:

 

12.eye

y=eye(m,n)

这个函数可以产生一个mXn矩阵,它的所有元素为零,

只有对角线的元素为1.

例子:

 Mma,b;

 disp(TM("visualsan@"));

 a=eye(3,4);

 display(a);

结果:

 

13.fix

对一个矩阵的所有元素取整。

y=[1.2,2.3];fix(y)=[1,2];

y=[-1.2,-2.3];fix(y)=[-1,-2];

例子:

 Mma,b;

 disp(TM("visualsan@"));

 a=-rand(3,1)*3;

 display(a);

 b=fix(a);

 display(b);

 a=rand(3,1)*3;

 display(a);

 b=fix(a);

 display(b);

结果:

1.floor

y=floor(x)将返回一个整数y使得:

x-1

例子:

  disp(TM("visualsan@---小老虎2010.1.5"));

  disp(TM("matcom函数(4)\n"));

  Mmx,y;

  x=10*rand(3);

  disp(TM("x="));

  disp(x);

  y=floor(x);

  disp(TM("floor(x)="));

  disp(y);

结果:

 

2.horzcat

这个函数的功能是将两个矩阵横向合并成一个矩阵,

z=horzcat(x,y)的结果是z=[xy];

例子:

  disp(TM("visualsan@---小老虎2010.1.5"));

  disp(TM("matcom函数(4)\n"));

  Mmx,y,z;

  x=ceil(10*rand(3));

  disp(TM("x="));

  disp(x);

  y=ceil(10*rand(3));

  disp(TM("y="

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 解决方案 > 其它

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1