㈠ C語言:編寫完整程序:計算兩個矩陣的乘積。
#include
"stdio.h"
#include
"stdlib.h"
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<<"輸入一個3*2的矩陣:"<<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");
}
}
㈡ 兩個二階矩陣相乘怎麼算
矩陣相乘需要前面矩陣的行數與後面矩陣的列數相同方可相乘。
第一步先將前面矩陣的每一行分別與後面矩陣的列相乘作為結果矩陣的行列。
第二步算出結果即可。
第一個的列數等於第二個的行數,A(3,4) 。B(4,2) 。C=AB,C(3,2)。
(2)兩個n階矩陣的乘積演算法代碼擴展閱讀:
矩陣相乘最重要的方法是一般矩陣乘積。只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義 。
一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多數據緊湊的集中到了一起,所以有時候可以簡便地表示一些復雜的模型。
㈢ 怎樣將兩個二維數組相乘代碼是什麼
兩個數組相乘即是矩陣的乘法。
只有滿足一定條件的兩個矩陣才能相乘,其結果仍是矩陣。
a(m,n)*b(n,k)=c(m,k)
矩陣c中的每個元素按下式計算:
c[i,j]=sum( a[i,x]*b[x,j] ) (x=1..n)
㈣ c語言中兩個矩陣的乘積、求和演算法
就是兩個二維數組 a[i][j],b[m][n]; 再循環嵌套啊 很簡單啊
㈤ 計算兩個三階行列式相乘的c語言代碼
#include<stdio.h>
voidmain()
{
inti,j,k=0;//一位數組初始化
inta[9]={12,34,23,34,45,34,35,45,34};
intb[9]={45,26,34,45,87,34,98,45,90};
//輸出一位數組a[9]b[9]
printf("a[9]:");
for(i=0;i<9;i++)
printf("%d",a[i]);printf(" ");
printf("b[9]:");
for(i=0;i<9;i++)
printf("%d",b[i]);
//定義3*3二維數組
intc[3][3];
//依照3*3矩陣格式列印結果
printf(" 結果為: ");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
{
//兩個一位數組相乘的結果存入二維數組c[3][3]
c[i][j]=a[k]*b[k];
//k的主要目的是控制a[k]*b[k],
//這樣可以取出a[0]-a[8],b[0]-[8]的值相乘存入數組
k++;
//%-6d只是控制輸出格式好看點,沒什麼作用,直接寫%d就可以
printf("%-6d",c[i][j]);
}
printf(" ");
}
}
㈥ 兩個矩陣相乘演算法
矩陣相乘需要前面矩陣的行數與後面矩陣的列數相同方可相乘。
第一步先將前面矩陣的每一行分別與後面矩陣的列相乘作為結果矩陣的行列。
(6)兩個n階矩陣的乘積演算法代碼擴展閱讀:
矩陣相乘最重要的方法是一般矩陣乘積。它只有在第一個矩陣的列數(column)和第二個矩陣的行數(row)相同時才有意義 。一般單指矩陣乘積時,指的便是一般矩陣乘積。一個m×n的矩陣就是m×n個數排成m行n列的一個數陣。由於它把許多數據緊湊的集中到了一起,所以有時候可以簡便地表示一些復雜的模型。
1、當矩陣A的列數等於矩陣B的行數時,A與B可以相乘。
2、矩陣C的行數等於矩陣A的行數,C的列數等於B的列數。
3、乘積C的第m行第n列的元素等於矩陣A的第m行的元素與矩陣B的第n列對應元素乘積之和。
㈦ 編寫一個C函數實現兩個n階矩陣相乘。
float a[n1][m];
float b[m][n2];
float s[n1][n2];
for(w=0;w<n1;w++)
{
for(j=0;j<n2;j++)
{
for(i=0;i<m;i++)
{
s[n1][n2]+=a[n1][m]*b[m][n2];
}
}
}
n1=n2=m時,就是兩個m階方陣的乘積。
㈧ C語言題,求兩個矩陣的乘積
簡單題,按照矩陣的定義去做即可
源代碼如下
//#pragma GCC diagnostic error"-std=c11"
#include<stdlib.h> //有隨機數庫
#include<malloc.h>
#include<time.h> //用於產生隨機數種子
#include<math.h>
#include<string.h>
#include<stdio.h>
#define ELE int
typedef struct Metrix {
ELE *A;
int row, col;
}Metrix;
//初始化矩陣
void init(Metrix *M, int row, int col, int auto_read) {
M->A = (ELE*)calloc(row*col, sizeof(ELE));
M->row = row;
M->col = col;
if (auto_read) {
int i, size = row*col;
for (i = 0; i<size; i++)
scanf("%d", M->A + i);
}
}
#define IDX(M,r,c) (r*(M->col)+c)
ELE* get(Metrix *M, int r, int c) {
return M->A + IDX(M, r, c);
}
int main()
{
int m, l, n, i, j, k;
scanf("%d%d%d", &m, &l, &n);
Metrix L, R;
init(&L, m, l, 1);
init(&R, l, n, 1);
// init(M,m,n,0);
//矩陣乘法走起
for (i = 0; i<m; i++) {
for (j = 0; j<n; j++) {
ELE *lp = get(&L, i, 0), *rp = get(&R, 0, j);
ELE out = 0;
for (k = 0; k<l; k++) {
out += *(rp)*lp[k];
rp += n; //rp換下一行
}
printf("%d ", out);
}
printf(" "); //刪去空格再換行。
}
return 0;
}
㈨ 用c語言實現兩個矩陣相乘怎麼做
1、程序運行輸入數據時,第一行為A矩陣的行列數和B矩陣的行列數,接著分別輸入A、B兩個矩陣的值。
㈩ 為什麼 兩個n階矩陣相乘所需的運算次數為n的3次方
n階矩陣相乘後得到的還是n階矩陣,所以結果中就有n平方個元素,每個元素都是由2n個數兩兩相乘得到,即n次運算,所以是n的三次方。
次方有兩種演算法。
第一種是直接用乘法計算,例:3⁴=3×3×3×3=81
第二種則是用次方階級下的數相乘,例:3⁴=9×9=81
任何非零數的0次方都等於1。原因如下
通常代表3次方
5的3次方是125,即5×5×5=125
5的2次方是25,即5×5=25
5的1次方是5,即5×1=5
由此可見,n≧0時,將5的(n+1)次方變為5的n次方需除以一個5,所以可定義5的0次方為:
5 ÷ 5 = 1