c语言程序n维矩阵乘法

c语言程序n维矩阵乘法,第1张

>

#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语言程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9862019.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存