
>
#include
"stdioh"
#include
"stdlibh"
void
main
()
{
int
m,l,p,q;
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
while
(l!=p)
{
printf("两个矩阵不匹配,不能进行相乘运算,请重新输入\n\n");
printf("输入第一个矩阵的维数m和l:\n");
scanf("%d%d",&m,&l);
printf("输入第二个矩阵的维数p和q:\n");
scanf("%d%d",&p,&q);
}
double
a[200][200]={0},
b[200][200]={0},sum=0;
int
i,j,k=0;
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
a[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵a是:\n");
for
(i=0;i<m;i++)
{
for
(j=0;j<l;j++)
{
printf("%f
",a[i][j]);
}
printf("\n");
}
//cout<<"输入一个32的矩阵:"<<endl;
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
b[i][j]=(double)rand()/RAND_MAX;
}
}
printf("随机矩阵b是:\n");
for
(i=0;i<p;i++)
{
for
(j=0;j<q;j++)
{
printf("%f
",b[i][j]);
}
printf("\n");
}
printf("ab相乘结果为:\n");
for
(i=0;i<m;i++)
{
while
(k<q)
{
for
(j=0;j<q;j++)
{
sum
=
a[i][j]b[j][k]+sum;
}
printf("%f
",sum);
k++;
sum=0;
}
k=0;
printf("\n");
}
}
如果不满足你要求,自己再改一下吧
方法:左边矩阵第一行的元素分别与右边矩阵第一列的元素相乘,求和得到相乘矩阵的第一行的第一个元素。左边矩阵第一行的元素分别与右边矩阵第二列的元素相乘,求和得到相乘矩阵的第一行的第二个元素,以此类推。
值得注意的是,当提及“矩阵相乘”或者“矩阵乘法”的时候,并不是指代这些特殊的乘积形式,而是定义中所描述的矩阵乘法。在描述这些特殊乘积时,使用这些运算的专用名称和符号来避免表述歧义。
矩阵乘法注意事项
1、当矩阵A的列数(column)等于矩阵B的行数(row)时,A与B可以相乘。
2、矩阵C的行数等于矩阵A的行数,C的列数等于B的列数。
3、乘积C的第m行第n列的元素等于矩阵A的第m行的元素与矩阵B的第n列对应元素乘积之和。
#include "iostreamh"
void MatrixChain(int p,int n,int m,int s)
{
for(int i=1;i<=n;i++)
m[i][i]=0;
for(int r=2;r<=n;r++)
for( i=1;i<=n-r+1;i++)
{
int j=i+r-1;
m[i][j]=m[i+1][j]+p[i-1]p[i]p[j];
s[i][j]=i;
for(int k=i+1;k<j;k++)
{
int t=m[i][k]+m[k+1][j]+p[i-1]p[k]p[j];
if(t<m[i][j])
{
m[i][j]=t;
s[i][j]=k;
}
}
}
}
void Traceback(int i,int j,int s)
{
if(i==j)return;
Traceback(i,s[i][j],s);
Traceback(s[i][j]+1,j,s);
cout<<"让 A"<<i;//<<","<<s[i][j];
cout<<"和 A"<<(s[i][j]+1)<<"相乘"<<endl;//<<","<<j<<"相乘"<<endl;
}
void main()
{
int n,p;
int j=1;
cout<<"请输入矩阵的个数"<<endl;
cin>>n;
p=new int[n+1];
cout<<"请输入第一个矩阵的行数,然后按回车键"<<endl;
cin>>p[0];
cout<<"第"<<j<<"个矩阵是"<<endl;
cout<<p[0]<<"";
cin>>p[1];
// cout<<p[1]<<endl;
cout<<endl;
for(int i=2;i<n+1;i++)
{
cout<<"第"<<i<<"个矩阵是:";
cout<<p[i-1]<<"";
cin>>p[i];
}
// int p[]={30,35,15,5,10,20,25};
// int m[6][6],s[6][6];
int m,s;
m=new int[n];
for( i=1;i<=n;i++)
m[i]=new int[n];
s=new int[n];
for( i=1;i<=n;i++)
s[i]=new int[n];
MatrixChain(p,n,m,s);
Traceback(1,n,s);
}
这是矩阵连乘
以上就是关于c语言程序n维矩阵乘法全部的内容,包括:c语言程序n维矩阵乘法、C语言:编写完整程序:计算两个矩阵的乘积。、求一个 矩阵乘法的C语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)