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阶矩阵的相乘,并打印出结果。 大神求解等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)