當前位置:首頁 » 編程語言 » c語言中實現矩陣的叉乘
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言中實現矩陣的叉乘

發布時間: 2022-04-26 02:20:43

Ⅰ 求通過c語言實現矩陣的加、減及乘法。要自己寫的,不要復制過來

#include <iostream>
using namespace std;
int main()
{
int am=3,bm=3,an=3,bn=3;
int a[am][an];
int b[bm][bn];
for(int i=0;i<am;i++)
{
for(int j=0;j<an;j++)
{
a[i][j]=i*am+j;
}
}
for(int i=0;i<bm;i++)
{
for(int j=0;j<bn;j++)
{
b[i][j]=i*bm+j;
}
}
//original matrix
cout<<"原始矩陣a"<<endl;
for(int i=0;i<am;i++)
{
for(int j=0;j<an;j++)
{
cout<<a[i][j]<<" ";
if(j==an-1)
cout<<endl;
}
}
cout<<"原始矩陣b"<<endl;
for(int i=0;i<bm;i++)
{
for(int j=0;j<bn;j++)
{
cout<<b[i][j]<<" ";
if(j==bn-1)
cout<<endl;
}
}
//matrix add
cout<<"矩陣加法"<<endl;
if(am!=bm || an!=bn)
{
cout<<"Sorry, can not be added!"<<endl;
}
else for(int i=0;i<am;i++)
{
for(int j=0;j<an;j++)
{
cout<<a[i][j]+b[i][j]<<" ";
if(j==an-1)
cout<<endl;
}
}
//matrix minus
cout<<"矩陣減法"<<endl;
if(am!=bm || an!=bn)
{
cout<<"Sorry, can not be minused!"<<endl;
}
else for(int i=0;i<am;i++)
{
for(int j=0;j<an;j++)
{
cout<<a[i][j]-b[i][j]<<" ";
if(j==an-1)
cout<<endl;
}
}
//matrix multiply
cout<<"矩陣乘法"<<endl;
int temp;
if(an!=bm)
{
cout<<"Sorry, can not be multiplied!"<<endl;
}
else for(int i=0;i<am;i++)
{
for(int j=0;j<bn;j++)
{
temp=0;
for(int k=0;k<an;k++)
{
temp+=a[i][k]*b[j][k];
}
cout<<temp<<" ";
if(j==bn-1)
cout<<endl;
}
}
}

Ⅱ 編寫一個函數,實現3*1和1*3矩陣的叉乘,結果存入一個3*3矩陣

#include"stdio.h"
main()
{
int i,j,a[3][1],b[1][3],c[3][3];//定義三個矩陣
printf("請輸入矩陣a[3][1]:\n");
for(i=0;i<3;i++)
scanf("%d",&a[i][0]);//輸入3*1矩陣
printf("請輸入矩陣b[1][3]:\n");
for(i=0;i<3;i++)
scanf("%d",&b[0][i]);//輸入1*3矩陣
for(i=0;i<3;i++)
for(j=0;j<3;j++)
c[i][j]=a[i][0]*b[0][j];//計算2個矩陣的叉乘,並存入c[3][3]
printf("a[3][1]*b[1][3]的結果是:\n");
for(i=0;i<3;i++)
{
for(j=0;j<3;j++)
printf("%6d ",c[i][j]);//輸出結果
printf("\n");
}
getchar();
getchar();
getchar();
}

Ⅲ C語言中兩矩陣相乘

#include <stdio.h>
int main()
{
int x,y,z;
int i,j,l;
int sum=0;
printf("請輸入前一個矩陣的行數,列數與後一個矩陣的列數:\n");
scanf("%d %d %d",&x,&y,&z);
int a[x][y];
int b[y][z];
int c[x][z];
//讀入矩陣
printf("請輸入矩陣a:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
scanf("%d",&a[i][j]);
}
}
printf("請輸入矩陣b:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
scanf("%d",&b[i][j]);
}
}
printf("矩陣a為:\n");
for(i=0;i<x;i++){
for(j=0;j<y;j++){
printf("%d",a[i][j]);
if(j==y-1)
printf("\n");
else
printf("\t");
}
}
printf("矩陣b為:\n");
for(i=0;i<y;i++){
for(j=0;j<z;j++){
printf("%d",b[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}
for(i=0;i<x;i++){
for(l=0;l<z;l++){
for(j=0;j<y;j++){
sum+=a[i][j]*b[j][l];
if(j==y-1){
c[i][l]=sum,sum=0;
}
}
}
}
printf("矩陣a與矩陣b的乘積為:\n");
for(i=0;i<x;i++){
for(j=0;j<z;j++){
printf("%d",c[i][j]);
if(j==z-1)
printf("\n");
else
printf("\t");
}
}

return 0;
}

Ⅳ 用c語言實現兩個矩陣相乘怎麼做

C語言實現矩陣相乘
問題描述:
編寫程序,可以實現m*n矩陣和n*p矩陣相乘。m,n,p均小於10,矩陣元素為整數。
分析:
首先我們可以根據題意寫出函數頭。可以定為void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX]),其中lMatrix1和lMatrix2分別是輸入的m*n矩陣和n*p矩陣,lMatrixResult是輸出的m*p矩陣。
因為m,n和p都是未知量,要進行處理的矩陣大小是變數。但我們可以定義比較大的二維數組,只使用其中的部分數組元素。
矩陣相乘的演算法比較簡單,輸入一個m*n矩陣和一個n*p矩陣,結果必然是m*p矩陣,有m*p個元素,每個元素都需要計算,可以使用m*p嵌套循環進行計算。
根據矩陣乘法公式:
可以用循環直接套用上面的公式計算每個元素。嵌套循環內部進行累加前,一定要注意對累加變數進行清零。
數據要求
問題中的常量:
#define
MAX
10
/*矩陣最大行數和列數*/
問題的輸入:
int
m,n,p;
/*相乘的兩個矩陣的行列數*/
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
/*相乘的兩個矩陣*/
問題的輸出:
long
lMatrixResult[MAX][MAX];
/*矩陣相乘後得到的矩陣*/
初始演算法
1.輸入兩個矩陣的的行列數m,n,p;
2.輸入第一個矩陣的每個元素;
3.輸入第二個矩陣的每個元素;
4.調用函數進行乘法運算,結果放在lMatrixResult
中;
5.
列印輸出結果矩陣。
演算法細化
演算法的步驟4計算兩個矩陣的乘法演算法如下:
4.1
定義循環變數i,j,k;
4.2
嵌套循環計算結果矩陣(m*p)的每個元素。
程序代碼如下:
#define
MAX
10
void
MatrixMutiply(int
m,int
n,int
p,long
lMatrix1[MAX][MAX],
long
lMatrix2[MAX][MAX],long
lMatrixResult[MAX][MAX])
{
int
i,j,k;
long
lSum;
/*嵌套循環計算結果矩陣(m*p)的每個元素*/
for(i=0;i<m;i++)

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

{

/*按照矩陣乘法的規則計算結果矩陣的i*j元素*/

lSum=0;

for(k=0;k<n;k++)

lSum+=lMatrix1[i][k]*lMatrix2[k][j];

lMatrixResult[i][j]=lSum;

}
}
main()
{
long
lMatrix1[MAX][MAX],lMatrix2[MAX][MAX];
long
lMatrixResult[MAX][MAX],lTemp;
int
i,j,m,n,p;
/*輸入兩個矩陣的的行列數m,n,p*/
printf(" Please
input
m
of
Matrix1: ");
scanf("%d",&m);
printf("Please
input
n
of
Matrix1: ");
scanf("%d",&n);
printf("Please
input
p
of
Matrix2: ");
scanf("%d",&p);
/*輸入第一個矩陣的每個元素*/
printf(" Please
elements
of
Matrix1(%d*%d): ",m,n);
for(i=0;i<m;i++)

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

{

scanf("%ld",&lTemp);

lMatrix1[i][j]=lTemp;

}
/*輸入第二個矩陣的每個元素*/
printf(" Please
elements
of
Matrix2(%d*%d): ",n,p);
for(i=0;i<n;i++)

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

{

scanf("%ld",&lTemp);

lMatrix2[i][j]=lTemp;

}
/*調用函數進行乘法運算,結果放在lMatrixResult
中*/
MatrixMutiply(m,n,p,lMatrix1,lMatrix2,lMatrixResult);
/*列印輸出結果矩陣*/
printf(" Result
matrix:
");
for(i=0;i<m;i++)
{

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

printf("%ld
",lMatrixResult[i][j]);

printf(" ");
}
}
程序運行結果如下:
Please
input
m
of
Matrix1:
3
Please
input
n
of
Matrix1:
2
Please
input
p
of
Matrix2:
3
Please
elements
of
Matrix1(3*2):
1
2
0
1
3
0
Please
elements
of
Matrix2(2*3):
1
2
0
3
1
1
Result
matrix:
7
4
2
3
1
1
3
6
0

Ⅳ 用C語言寫一個兩個矩陣相乘的函數

自己看看吧,可以同時都換成注釋的行,有助於你理解參數傳遞
:)======================================================
#include<stdio.h>
#define M 5
#define P 4
#define N 3
void mltp(float (*a)[P],float (*b)[N],float (*c)[N])
//void mltp(float *a,float *b,float *c)
{
for(int i=0;i<M;i++)
for(int j=0;j<N;j++)
for(int k=0;k<P;k++)
c[i][j]+=a[i][k]*b[k][j];
//c[i*N+j]+=a[i*P+k]*b[k*N+j];
}

void main()
{
int i,j;
float a[M][P],b[P][N];
float c[M][N]={0};
printf("plz input a,b:\n");
for(i=0;i<M;i++)
for(j=0;j<P;j++)
scanf("%f",&a[i][j]);
for(i=0;i<P;i++)
for(j=0;j<N;j++)
scanf("%f",&b[i][j]);
mltp(a,b,c);
//mltp(&a[0][0],&b[0][0],&c[0][0]);//等
//mltp((float*)a,(float*)b,(float*)c);//價
printf("result is:\n");
for(i=0;i<M;i++)
{
for(j=0;j<N;j++)
printf("%f\t",c[i][j]);
printf("\n");
}
}

Ⅵ 如何用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語言編程求矩陣乘積

#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>
void matrix(int a[][100],int a1,int a2,int b[][100],int b1,int b2,int c[][100])
{
int i,j,k;
if(a2!=b1)
{
printf("矩陣的維數錯了!\n");
return;
}
for(i=0;i<a1;i++)
{
for(j=0;j<b2;j++)
{
c[i][j]=0;
for(k=0;k<a2;k++)
c[i][j]+=a[i][k]*b[k][j];
}
}
}
int main()
{
int a1,a2,b1,b2,a[100][100],b[100][100],c[100][100],i,j;
printf("輸入矩陣一的行數和列數(不超過100):\n");
scanf("%d%d",&a1,&a2);
for(i=0;i<a1;i++)
{
for(j=0;j<a2;j++)
scanf("%d",&a[i][j]);
}
printf("輸入矩陣一的行數和列數(不超過100):\n");
scanf("%d%d",&b1,&b2);
for(i=0;i<b1;i++)
{
for(j=0;j<b2;j++)
scanf("%d",&b[i][j]);
}
matrix(a,a1,a2,b,b1,b2,c);
printf("結果:\n");
for(i=0;i<a1;i++)
{
for(j=0;j<b2;j++)
printf("%d ",c[i][j]);
printf("\n");
}
return 0;
}

Ⅸ C語言如何實現兩向量叉乘

根據叉乘的計算方法可知