当前位置:首页 » 编程语言 » 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语言如何实现两向量叉乘

根据叉乘的计算方法可知