当前位置:首页 » 编程软件 » 矩阵相乘编程

矩阵相乘编程

发布时间: 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语言矩阵乘法程序

热点内容
win系统如何组建sip服务器 发布:2024-05-09 08:52:21 浏览:278
基于图像匹配算法 发布:2024-05-09 08:35:32 浏览:28
编译安卓内核源码 发布:2024-05-09 08:22:32 浏览:184
骑砍二霸主怎么连接联机服务器 发布:2024-05-09 08:21:58 浏览:546
c语言引用参数 发布:2024-05-09 08:21:58 浏览:251
怎么查看服务器流量 发布:2024-05-09 08:12:34 浏览:879
不用压缩泵 发布:2024-05-09 08:12:33 浏览:850
硬盘存储容量发展速度 发布:2024-05-09 08:06:47 浏览:786
微信在哪里密码锁 发布:2024-05-09 08:01:27 浏览:282
wifi安卓密码怎么改 发布:2024-05-09 07:51:00 浏览:618