當前位置:首頁 » 編程軟體 » 矩陣相乘編程

矩陣相乘編程

發布時間: 2022-05-15 18:11:10

❶ 將"編寫程序實現兩個矩陣相乘"的編程中文註解 越詳細越好

private Matrix multiply(Matrix mat1, Matrix mat2) {
Matrix mat=new Matrix();
// TODO 自動生成方法存根
if(mat1.col==mat2.row){//矩陣1的行數與矩陣2的列數相同才能乘

double sum; //用來單項保存和的臨時變數

mat.data=new
double[mat1.row][mat2.col]; //創建結果矩陣,行數與矩陣1的列數相同,列數與矩陣2的行數相同

for (int i = 0; i < mat1.row; ++i)//循環矩陣1的每一列
{
for (int j = 0; j < mat2.col; ++j)//循環矩陣2的每一行
{
sum = 0; //每次相加前初始化單項和
for (int k = 0; k < mat1.col; //循環當前列的每一行
++k) {
sum += mat1.data[i][k] * //對應的矩陣1元素和矩陣2元素相乘再相加後,累加到單項和
mat2.data[k][j];
}
mat.data[i][j] = sum; //將單項和復制給結果矩陣的對應項
} //返回計算當前矩陣1的列與矩陣2的下一行相乘
} //返回計算矩陣1的下一列與矩陣2相乘
return mat; //返回結果矩陣
}
return null; //不能相乘,返回空
}

❷ 與矩陣乘法有關 C++編程

boost下面的ublas已經提供了現成的模板庫,我給你寫了個例子,基本上涵蓋了矩陣的基本操作

// MatrixSample.cpp : 定義控制台應用程序的入口點。
//

#include "stdafx.h"
#include <time.h>
#include <iostream>
#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>

#define UB boost::numeric::ublas

template<typename _Matrix>
void initMatrix(_Matrix& mtVal)
{
time_t nTime; time(&nTime); srand((unsigned int)nTime);
/// 賦值,size1是行,size2是列.
for (int i = 0; i < mtVal.size1 (); ++ i)
{
for (int j = 0; j < mtVal.size2 (); ++ j)
{
mtVal(i, j) = i * j;
}
}
}

int _tmain(int argc, _TCHAR* argv[])
{
/// 定義一個3x3的矩陣double是元素的類型,也可以是int.
UB::matrix<double> mtVal(3, 3);

initMatrix(mtVal);

/// 直接輸出矩陣即可,因為矩陣的IO已經提供了串流的重載.
std::cout << "我的第一個矩陣: " << mtVal << std::endl;

/// Ok 我們來試試矩陣的運算.
{
UB::matrix<double> mtLeft(4, 3), mtRight(3, 4);
initMatrix(mtLeft);
initMatrix(mtRight);

/// 矩陣相乘,產生一個4x4的矩陣.
UB::matrix<double> mtProdRes = UB::prod(mtLeft, mtRight);
std::cout << "矩陣相乘結果: " << UB::prod(mtLeft, mtRight) << std::endl;
}

{
UB::matrix<double> mtLeft(3, 3), mtRight(3, 3);
initMatrix(mtLeft);
initMatrix(mtRight);

/// 矩陣相加(矩陣的尺寸必須一樣,否則斷言激活).
UB::matrix<double> mtPlusRes = mtLeft + mtRight;
std::cout << "矩陣相加結果: " << mtPlusRes << std::endl;
}

{
UB::matrix<double> mtLeft(3, 3), mtRight(3, 3);
initMatrix(mtLeft);
initMatrix(mtRight);

/// 矩陣相加(矩陣的尺寸必須一樣,否則斷言激活).
UB::matrix<double> mtMinusRes = mtLeft - mtRight;
std::cout << "矩陣相減結果: " << mtMinusRes << std::endl;
}

return 0;
}

❸ 輸入m*n階矩陣A和B,用函數編程實現兩個函數相加和相乘

輸入m*n階矩陣A和B,用c語言編程實現兩個函數相加和相乘:

一、矩陣相乘。程序中先初始化矩陣,然後判斷第一個矩陣的列數和第二個矩陣的行數是否相等,如果不相等則直接提示錯誤後退出程序。相等的話則利用公式計算乘積,結果賦給matrix二維數組。最後用for循環列印出結果驗證。

#include<stdio.h>

#include<stdlib.h>

#define M 100

int main(void)

{

int i,j,k,matrix1[M][M],matrix2[M][M],row1,col1,row2,col2,matrix[M][M];

printf("輸入第一個矩陣的行數和列數:");

scanf("%d%d",&row1,&col1);

printf("輸入第一個矩陣: ");

for(i=0;i<row1;i++){

for(j=0;j<col1;j++){

scanf("%d",&matrix1[i][j]);

}

}

printf("輸入第二個矩陣的行數和列數:");

scanf("%d%d",&row2,&col2);

printf("輸入第二個矩陣: ");

for(i=0;i<row2;i++){

for(j=0;j<col2;j++){

scanf("%d",&matrix2[i][j]);

}}

for(i=0;i<row1;i++){

for(j=0;j<col2;j++){

matrix[i][j]=0;

} }

if(col1!=row2){

fprintf(stderr,"enput error!");

exit(EXIT_FAILURE);

}

printf("The result: ");

for(i=0;i<row1;i++){

for(j=0;j<col2;j++){

for(k=0;k<col1;k++){

matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j];

} } }

for(i=0;i<row1;i++){

for(j=0;j<col2;j++){

printf("%d ",matrix[i][j]); }

printf(" "); }

return 0;}



二、矩陣相加:

#include<stdio.h>

#define M 20

#define N 20

float A[M][N];

float B[M][N];

float C[M][N];

int i,j,m,n,p,q;

float y=1.0;

void main()

{

scanf("%d,%d",&i,&j);

printf("請輸入矩陣B的行數和列數(用逗號隔開):");

scanf("%d,%d",&m,&n);

if(i!=m||j!=n)

printf("***對不起,您輸入的兩個矩陣不能相加,請重試.*** ");

else printf("請輸入矩陣A: ");

for(p=0;p<i;p++)

for(q=0;q<j;q++)

scanf("%f",&A[p][q]);

printf("輸出矩陣A: ");

for(p=0;p<i;p++)

for(q=0;q<j;q++)

{

printf("%10.2f",A[p][q]);

if((q+1)%j==0)

printf(" ");

}

printf("請輸入矩陣B: ");

for(p=0;p<i;p++)

for(q=0;q<j;q++)

scanf("%f",&B[p][q]);

printf("輸出矩陣B: ");

for(p=0;p<i;p++)

for(q=0;q<j;q++)

{

printf("%10.2f",B[p][q]);

if((q+1)%j==0)

printf(" ");

}

printf("矩陣A+矩陣B為: "); //計算兩個矩陣相加

for(p=0;p<i;p++)

for(q=0;q<j;q++)

C[p][q]=A[p][q]+B[p][q];

for(p=0;p<i;p++)

for(q=0;q<j;q++)

{

printf("%10.2f",C[p][q]);

if((q+1)%j==0)

printf(" ");

}

};

❹ 如何用C語言編程實現矩陣相加、相乘

矩陣相加會簡單點,設a[2][3]和b[2][3],只要在相應的地方相加就行了,
for(i=0;i<2;i++)
for(j=0;j<3;j++)
c[i][j]=a[i][j]+b[i][j];

兩矩陣相乘,
int a[][3]={1,2,3,4,5,6,7,8,9};//A為N×P矩陣,
//假設是3*3的矩陣
int b[][5]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
//B為P×M矩陣,假設是3*5的矩陣
int c[3][5]={0};//結果矩陣3*5
for(int i=0;i<3;i++)
for(int j=0;j<5;j++)
for(int k=0;k<3;k++)
c[i][j]+=a[i][k]*b[k][j];

❺ 用C++編程求兩矩陣的乘積,要求兩矩陣的維數由鍵盤臨時輸入。

#include<stdio.h>
#include<stdlib.h>

//創建二維數組,參數是矩陣維數
int**createMatrix(intn){
int**matrix=(int**)malloc(sizeof(int*)*n);
for(inti=0;i<n;i++){
matrix[i]=(int*)malloc(sizeof(int)*n);
}
returnmatrix;
}

//顯示矩陣,第一個參數是矩陣,第二個參數是矩陣的維數
voiddisplay(int**input,intn){
for(inti=0;i<n;i++){
printf("[");
for(intj=0;j<n;j++){
printf("%d",input[i][j]);
}
printf("] ");
}
}

//計算矩陣相乘函數,第一個參數是矩陣1,第二個參數是矩陣2,第三個參數是矩陣維數
int**calcMatrix(int**matrix1,int**matrix2,intn){
int**result=createMatrix(n);
for(inti=0;i<n;i++){
for(intj=0;j<n;j++){
inttmp=0;
for(intk=0;k<n;k++){
tmp+=matrix1[i][k]*matrix2[k][j];
}
result[i][j]=tmp;
}
}
returnresult;
}

intmain(){
printf("請輸入矩陣維數:");
intn;//矩陣維數
scanf("%d",&n);
int**matrix1=createMatrix(n);//矩陣1
int**matrix2=createMatrix(n);//矩陣2
//經過上面的for循環,兩個matrix就變成了二維數組
printf(" 請輸入第一個矩陣 ");
for(inti=0;i<n;i++){
for(intj=0;j<n;j++){
printf("請輸入矩陣的第[%d][%d]元素:",i+1,j+1);
scanf("%d",&matrix1[i][j]);
}
printf(" ");
}
printf(" 請輸入第二個矩陣 ");
for(inti=0;i<n;i++){
for(intj=0;j<n;j++){
printf("請輸入矩陣的第[%d][%d]元素:",i+1,j+1);
scanf("%d",&matrix2[i][j]);
}
printf(" ");
}
display(calcMatrix(matrix1,matrix2,n),n);
}

❻ C語言編程:編寫一個函數,實現矩陣的乘法。

如果確定距陣的大小長度,定義兩個二維數組,用兩個for循環兩數據輸入到內存,是每兩個for輸入一個數組,然後定義另外一個數組,用來得到結果距陣,再用三個嵌套的for將結果放入第三個數組當中,即c[i][j]=a[i][k]+b[k][j],k是在第三重循環,這樣就可以得到要求的距陣,如果不確定大小長度就在輸入語句的每個for循環的轄區內加一個變數作為標記程序運行時求出距陣的大小

❼ 編程實現任意兩個矩陣的相乘

#include<stdio.h>
#define M 10
#define N 10
void matrix(int a[M][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
scanf("%d",&a[i][j]);
}
void comput(int a[M][N],int b[M][N],int c[M][N],int m1,int n1,int m2,int n2)
{
int i,j,k,sum;
for(i=0;i<m1;i++)
for(j=0;j<n2;j++)
{
sum=0;
for(k=0;k<n1;k++)
sum=sum+a[i][k]*b[k][j];
c[i][j]=sum;
}
}
void print(int c[M][N],int m,int n)
{
int i,j;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
printf("%3d",c[i][j]);
printf("\n");
}
}
void main()
{
int m,n,r,p,a[M][N],b[M][N],c[M][N];
printf("輸入第一個矩陣的行數與列數");
scanf("%d%d",&m,&n);
matrix(a,m,n);
printf("輸入第二個矩陣的行數與列數");
scanf("%d%d",&r,&p);
matrix(b,r,p);
comput(a,b,c,m,n,r,p);
print(c,m,p);
}

❽ C語言編程求矩陣乘積

#defineMAX50
#defineMMAX
#defineNMAX
#defineTMAX
#defineSMAX

intMult(doublea[][N],intm,intn,doubleb[][T]ints,intt,doublec[][T]){
inti,j,k;
if(n!=s){
printf("兩矩陣相乘,左矩陣的列數與右矩陣的行數必須相等。 ");
return0;
}
intc;
tmp.m_Mat=newdouble*[tmp.m_Rows];
for(inti=0;i<tmp.m_Rows;i++)tmp.m_Mat[i]=newdouble[tmp.m_Cols];
for(i=0;i<m;++i){
for(j=0;j<n;++j){
c[i][j]=0;
for(k=0;k<t;++k)
c[i][j]+=c[i][k]*c[k][j];
}
}
return1;
}

❾ c語言程序設計,設計兩個矩陣相乘的程序。已知:

#include<stdio.h>
#include<stdlib.h>
#defineM3

intmain(void)
{
inti,j,k,matrix1[M][M],matrix2[M][M],row1=M,col1=M,row2=M,col2=M,matrix[M][M];
/*為需要相乘的兩個矩陣賦值:*/
printf("輸入第一個矩陣: ");
for(i=0;i<row1;i++){
for(j=0;j<col1;j++){
scanf("%d",&matrix1[i][j]);
}
}
printf("輸入第二個矩陣: ");
for(i=0;i<row2;i++){
for(j=0;j<col2;j++){
scanf("%d",&matrix2[i][j]);
}
}
/*初始化matrix:*/
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
matrix[i][j]=0;
}
}

printf("Theresult: ");
for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
for(k=0;k<col1;k++){
matrix[i][j]=matrix[i][j]+matrix1[i][k]*matrix2[k][j];
}
}
}

for(i=0;i<row1;i++){
for(j=0;j<col2;j++){
printf("%d",matrix[i][j]);
}
printf(" ");
}
return0;
}

❿ C語言實現矩陣乘法

1,若程序定義為三行三列的矩陣,並在主函數中鍵盤賦值。請編寫函數juzhen(int a[][3],int n),函數功能是:使矩陣左下角元素中的值乘以.例如:若矩陣中的值為:
1 9 7
2 3 8
4 5 6
n=3,則矩陣值變為:
1 9 7
6 9 8
12 15 18
註:二維數組下三角元素每行最後元素的列標和該列的列號一致

#include <stdio.h>
int juzhen(int a[][3],int n)
{
int i,j;
for (i=1;i<3;i++)
for (j=0;j<=i;j++)
a[i][j]=a[i][j]*n;
}
main()
{
int i,j,a[3][3],m;
clrscr();
printf("please enter 9 numbers :\n");
for (i=0;i<3;i++)
for (j=0;j<3;j++)
scanf("%d",&a[i][j]);
printf("the old ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
printf("please enter a int number:\n");
scanf("%d",&m);
juzhen (a,m);
printf("the new ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",a[i][j]);
printf("\n");
}
}
2,請編寫函數juzhen,該函數的功能是:將三行四列矩陣x乘以四行三列矩陣y,結果放在三行三列矩陣中。矩陣相乘的基本方法是:矩陣Xy中行列下標分別為i,j的元素的值,是矩陣X中第i行上四個元素與矩陣Y中第j列上四個元素對應相乘的積。
X和Y矩陣原型可運行後看到!
#include <conio.h>
#include <stdio.h>
void juzhen (int a[3][4],int b[4][3],int ab[3][3])
{
int i,j,z;
for (i=0;i<3;i++)
for (j=0;j<4;j++)
for (z=0;z<3;z++)
ab[i][z]=ab[i][z]+a[i][j]*b[j][z];/*此得為要填寫的內容*/
}
main()
{
int x[3][4]={1,0,1,1,2,1,0,1,1,2,0,3};
int y[4][3]={1,1,1,0,0,0,2,1,1,1,1,3};
int xy[3][3]={0},i,j;
clrscr();
juzhen (x,y,xy);
printf("x ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<4;j++)
printf("%3d",x[i][j]);
printf("\n");
}
printf("y ju zhen is:\n");
for (i=0;i<4;i++)
{
for (j=0;j<3;j++)
printf("%3d",y[i][j]);
printf("\n");
}
printf("xy ju zhen is:\n");
for (i=0;i<3;i++)
{
for (j=0;j<3;j++)
printf("%3d",xy[i][j]);
printf("\n");
}
}
由於你沒有說要求,我就寫了兩個,這是兩道比較精典的求c語言矩陣乘法程序

熱點內容
美團商家新增的技術伺服器是什麼 發布:2024-04-27 12:12:35 瀏覽:343
得到腳本 發布:2024-04-27 12:06:25 瀏覽:936
三星手機鎖屏忘記密碼了怎麼辦 發布:2024-04-27 12:05:41 瀏覽:519
python基礎語言 發布:2024-04-27 11:54:40 瀏覽:84
ioshttp伺服器搭建 發布:2024-04-27 11:40:26 瀏覽:913
忘記密碼如何強制刷機vivo 發布:2024-04-27 11:28:40 瀏覽:385
c語言讀取指定行 發布:2024-04-27 11:28:30 瀏覽:52
c語言中a10什麼意思 發布:2024-04-27 10:45:43 瀏覽:58
物聯網中ftp是什麼意思 發布:2024-04-27 10:41:17 瀏覽:986
銀行密碼保護在哪裡 發布:2024-04-27 10:25:23 瀏覽:189