c c 矩陣相乘

2021-10-05 05:13:18 字數 2155 閱讀 5853

矩陣相乘最重要的方法是一般矩陣乘積。它只有在第乙個矩陣的列(column)和第二個矩陣的行數(row)相同時才有意義 。一般單指矩陣乘積時,指的便是一般矩陣乘積。乙個m×n的矩陣就是m×n個數排成m行n列的乙個數陣。由於它把許多資料緊湊的集中到了一起,所以有時候可以簡便地表示一些複雜的模型。

運算如下所示:

我們可以在2個矩陣上執行加,減,乘和除運算。從使用者輸入一行數字和列號,組成第乙個矩陣元素和第二個矩陣元素。然後,對使用者輸入的矩陣執行乘法。

1.思路

首先,由於輸入的矩陣維數是隨機的,因此,我們要設計程式,手動把行和列算出來,這樣方便後續乘法運算。並且把輸入的數字提取出來,放入乙個float型陣列中,這樣我們就完成了讀入工作,之後就是利用乘法公式進行運算,並把結果放入乙個二維陣列中,最後把結果輸出來就行了。

2.資料讀入

這裡是容易出現問題的地方,最初的想法是用cin.getline()把整個輸入都讀進乙個char型字串行中,然後再用特定位置的數做乘法。後來發現有兩個問題,第一,數字讀入乙個char字串行中就變成了ascii碼,這個還比較好解決,用每個位置的數減去『 0『就行了。第二個問題是硬傷,就是把乙個數字放到乙個char型的序列中,他會把連在一起的數字給拆開,比如說我想輸入123,他不會把123放到乙個格里,而是1放到乙個格,2放入另乙個格,3再放乙個格。所以不能放到char中。於是想到把輸入放到float陣列裡, 但是這樣就有乙個新問題,就是如何把符號摘出去。如果直接用cin,那麼碰到符號它並不會跳過,而是也會錄入,這是不行的,但是對於這個問題,我們知道輸入的格式都是類似於:123,1,2;1,2,3這樣的,規律就是乙個數字乙個符號,我們可以用賦值的方式來跳過,和;的錄入。具體來說就是先用乙個cin,把第乙個數字錄入,然後用c=getchar()的方式來跳過逗號的錄入。然後再cin,再c=getchar,最終當c=getchar()等於回車,也就是\n時停止。由於c=getchar()是判斷條件,所以我們這個迴圈要從逗號開始,也就是先錄入乙個數字,再進行迴圈。

在錄入的過程中,我們就可以直接把行數和列數讀取出來:行數就是;(分號)的個數加一,列數就是總共的數字個數除以行數。
cout << "please enter matrixa:"<> a[i];

while ((c=getchar()) != '\n')

m++;

i++;

n = i/ m;

cout << "please enter matrixb:"<> b[j];

while ((c = getchar()) != '\n')

k++;

j++;

p = j / k;

拿第一段,矩陣a的錄入來說,m是行數,由於m作為;的計數器,因此行數要在分號個數的基礎上加一,即m++,而由於a[ ]這個陣列是從a[0]開始的,因此a[i]表示有i+1個數,所以i++。這樣就實現了矩陣a,b的錄入,雖然錄進去的是乙個一維的陣列,但也不妨礙後續的矩陣乘法計算。

3.矩陣相乘

在矩陣乘法第一矩陣中,乙個行元素乘以第二矩陣所有列元素。讓我們通過下面的**理解3 * 3和3 * 3矩陣的矩陣乘法:

下面來看看看c++中的矩陣乘法程式。

#include using namespace std;

int main()

}

cout<<"enter the second matrix element=\n";

for(i=0;i>b[i][j];

}

}

cout<<"multiply of the matrix=\n";

for(i=0;i執行上面**得到以下結果

enter the number of row=3

enter the number of column=3

enter the first matrix element=

1 2 3

1 2 3

1 2 3

enter the second matrix element=

1 1 1

2 1 2

3 2 1

multiply of the matrix=

14 9 8

14 9 8

14 9 8

實現稀疏矩陣相乘C C

1 問題描述 已知稀疏矩陣a m1,n1 和b m2,n2 求乘積c m1,n2 a 3 0 0 7 b 4 1 c 12 17 0 0 0 1 0 0 0 2 0 2 0 0 1 1 0 0 0 2 a b c的三元組表示法分別為 a ijv1112 2147 324 1 4322 b i jv1...

CULA矩陣相乘和CUBLAS矩陣相乘

cula的矩陣相乘 culadevicedgemm n n n,m,k,alpha,b device,n,b k x n a device,k,a m x k beta,c device,n 上式表示 c a b的矩陣相乘方法,而且資料型別為double,也可以使用float型別資料的函式 cula...

矩陣冪(矩陣相乘)

題目描述 給定乙個n n的矩陣,求該矩陣的k次冪,即p k。第一行 兩個整數n 2 n 10 k 1 k 5 兩個數字之間用乙個空格隔開,含義如上所示。接下來有n行,每行n個正整數,其中,第i行第j個整數表示矩陣中第i行第j列的矩陣元素pij且 0 pij 10 另外,資料保證最後結果不會超過10 ...