matlab计算两矩阵点乘

matlab计算两矩阵点乘,第1张

1、打开matlab,在命令行窗口中输入a=[2 4;6 9],b=[1 5;5 8],创建2行2列的a,b矩阵,如下图所示。

2、使用矩阵点乘,两个矩阵的对应位置元素相乘,在命令窗口中输入“ab”,如下图所示。

3、按回车键之后,可以看到得到的结果是a和b矩阵对应项相乘的结果,一般两个矩阵相乘的话,都使用点乘。

4、我们也可以看一下一般乘法,ab。

5、按回车键,得到的结果是两个矩阵相乘的结果。

//矩阵三元组之矩阵相加 相乘

#include <iostream>

using namespace std;

typedef int Elemtype;

#define MAXSIZE 12500 //最大非零元素

typedef struct Triple

{

Elemtype value;

int row,col;

}Triple;

typedef struct TSMatrix

{

Triple data[MAXSIZE+1];

int mu,nu,tu;

}TSMatrix;

TSMatrix T;

void InputMatrix(TSMatrix &T) //输入t个非零元素

{

cout<<"请输入稀疏矩阵的信息,(行,列,非零元素个数)"<<endl;

cin>>Tmu>>Tnu>>Ttu;

int i;

cout<<"请输入非零元素的信息(行,列,值),提醒(下标从1开始)"<<endl;

for(i=1;i<=Ttu;++i)

{

cin>>Tdata[i]row>>Tdata[i]col>>Tdata[i]value;

}

}

void Output(TSMatrix T)

{

cout<<"矩阵的三元组表示(ROW=)"<<Tmu<<" COL="<<Tnu<<"非零个数="<<Ttu<<endl;

int i;

for(i=1;i<=Ttu;++i)

{

cout<<"ROW(行):"<<Tdata[i]row<<" COL(列):"<<Tdata[i]col<<" Value(值)"<<Tdata[i]value<<endl;

}

}

void TransposeSMatrix(TSMatrix M,TSMatrix &T) //矩阵的转置

{

Tmu=Mnu;Tnu=Mmu;Ttu=Mtu;

int i,j,k=1;

for(i=1;i<=Mnu;++i)

{

for(j=1;j<=Mtu;++j)

if(Mdata[j]col==i)

{

Tdata[k]row=i;

Tdata[k]col=Mdata[j]row;

Tdata[k]value=Mdata[j]value;

++k;

}

}

}

void AddMastrix(TSMatrix M,TSMatrix T,TSMatrix &Q) //矩阵相加

{

int index_a,index_b,i=1,j=1,k=1;

Qmu=Mmu; Qnu=Mnu;

while (i<=Mtu&&j<=Ttu)

{

index_a=(Mdata[i]row)(Mdata[i]col)+Mdata[i]col;

index_b=(Tdata[j]row)(Tdata[j]col)+Tdata[j]col;

if(index_a<index_b)

{

Qdata[k]=Mdata[i];

i++;

k++;

}

else if(index_a>index_b)

{

Qdata[k]=Tdata[j];

j++;

k++;

}

else if(index_a==index_b)

{

if((Mdata[i]value+Tdata[j]value)!=0)

{

Qdata[k]=Mdata[i];

Qdata[k]value=Mdata[i]value+Tdata[j]value;

k++;

}

++i;

++j;

}

}

//复制剩余元素

for(;i<=Mtu;++i)

{

Qdata[k]=Mdata[i];

k++;

}

for(;j<=Ttu;++j)

Qdata[k++]=Tdata[j];

Qtu=k-1;

}

void Multiply(TSMatrix M,TSMatrix T,TSMatrix &Q) //相乘

{

if(Mnu!=Tmu)

{

cerr<<"两矩阵相乘不合法"<<endl;

return ;

}

int rowSize=new int[Tmu+1]; //存放每行非零元素的个数

int rowStart=new int[Tmu+2]; //矩阵每行在三元组开始位置

int temp=new int[Tnu+1]; //存放结果矩阵中每行的计算结果

int i,Current,k,ROWM,COLM,COLB;

for(i=1;i<=Tmu;i++) rowSize[i]=0;

for(i=1;i<=Ttu;++i) rowSize[Tdata[i]row]++;

rowStart[1]=1;

for(i=2;i<=Tmu+1;i++)

rowStart[i]=rowStart[i-1]+rowSize[i-1];

Current=1; k=1;

while (Current<=Mtu)

{

ROWM=Mdata[Current]row; //当前三元组数据中元素的行号

for(i=1;i<=Tnu;++i) temp[i]=0;

while (Current<=Mtu&&ROWM==Mdata[Current]row)

{

COLM=Mdata[Current]col; //当前元素的列号,方便与T矩阵的行号相乘

for(i=rowStart[COLM];i<rowStart[COLM+1];i++) //对应T矩阵中每行的个数

{

COLB=Tdata[i]col;

temp[COLB]+=(Mdata[Current]value)(Tdata[i]value);

}

Current++;

}

for(i=1;i<=Tnu;i++)

{

if(temp[i]!=0)

{

Qdata[k]row=ROWM;

Qdata[k]col=i;

Qdata[k]value=temp[i];

}

k++;

}

}

Qmu=Mmu;Qnu=Tnu;

Qtu=k-1;

}

int main()

{

TSMatrix T,M,Q,S;

InputMatrix(M);

InputMatrix(T);

cout<<"两矩阵相乘"<<endl;

Multiply(M,T,Q);

Output(Q);

cout<<"两矩阵相加"<<endl;

AddMastrix(M,M,S);

Output(S);

system("pause");

return 0;

}

#include "stdioh"

int main(void){

    int A[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}},i,j,k,x;

    int B[4][3]={{11,22,33},{44,55,66},{77,88,99},{100,110,120}};

    for(i=0;i<3;i++){

        for(j=0;j<3;j++){

            for(x=k=0;k<4;x+=A[i][k]B[k++][j]);

            printf("%6d",x);

        }

        printf("\n");

    }

    return 0;

}

以上就是关于matlab计算两矩阵点乘全部的内容,包括:matlab计算两矩阵点乘、用C语言编写一个矩阵运算的程序,高分!、c语言 编写一个程序完成一个3×4阶矩阵和一个4×3阶矩阵的相乘,并打印出结果。 大神求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9380669.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存