重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
语言只提供+,-,*,/等低级运算功能,高级的都必须代码实现,包括次方开放运算,都是编写代码实现。 你学过矩阵乘法,这就很容易,你需要定义一个结构体,作为矩阵。。。。
创新互联公司专注于泸水企业网站建设,成都响应式网站建设公司,商城系统网站开发。泸水网站建设公司,为泸水等地区提供建站服务。全流程按需网站设计,专业设计,全程项目跟踪,创新互联公司专业和态度为您提供的服务
矩阵很简单,行数,列数,元素。
typedef struct {
uint r,c;
float *d;
int size;
}matrix;
分别是行数,列数,数据指针,和数据最大长度。数据最好用指针不用数组,是因为增加灵活性,你只需要动态申请内存即可让你的矩阵大小可变,数组长度不可变。最后一个参数代表内存长度,最好是要有,方便你重新定义数组时看内存够不够,不够可以realloc,没有的话你就不知道够不够(5*4的矩阵,乘以 4*5 矩阵必然变成5*5矩阵,赋值到新矩阵结构体里,如果还是20个单位,显然装不下,必须realloc,所以该参数必须有)。。。
你只要实现个函数 int mul(matrix *m1,*m2,*m3)即可,m1,m2分别为左右 矩阵,m3为结果。
按照运算法则,你必须完成两件事,判断m1,m2是否可以相乘,不可以相乘返回一个错误(比如返回-1),(3*3和4*4矩阵不能相乘),如果可以那就先让m3.r=m1.r,m3.c=m2.c;
m3.d[i][j]=0;
for(k=0;km1.c;k++)
m3.d[i][j]+=m1.d[i][k]*m2.d[k][j];
这你就能到到m3的一个元素,那你只要求出所有的元素就得到新矩阵了。
不过因为是C语言,你要考虑内存,m3也许内存不够长,你必须要做一下内存长度判断,不够长要申请,否则就报错没法用了。。。所以size这个成员也是必须的。。
不过话说回来,如果是用C++,只要你写一个矩阵类,重载运算符 * ,你就可以用
m3=m1*m2; 这样运算,书写更方便,但C语言没这好事。
1、程序运行输入数据时,第一行为A矩阵的行列数和B矩阵的行列数,接着分别输入A、B两个矩阵的值。
2、首先,定义6个整型变量,保存A、B矩阵的行和列,以及控制循环的变量,k则用于实现矩阵的乘法。
3、接着,定义三个整型二维数组,保存A、B和C矩阵的各元素。
4、输入三个矩阵的行数和列数,保存在变量a、b、c中。
5、输入矩阵A的各元素,保存在数组X中。
6、输入矩阵B的各元素,保存在数组Y中。
7、将二维数组Z的各元素,初始化为0。
8、用两层for循环,控制矩阵的乘法,并输出乘法所得的结果。
9、计算A矩阵和B矩阵的乘法,结果保存在数组Z中。
10、最后,输出乘法所得的结果,即输出Z数组中的所有元素。
11、运行程序,输入矩阵A和B的行数和列数,以及A矩阵和B矩阵的所有元素,电脑就会计算出乘积C矩阵的所有元素,并输出C矩阵。
函数类型是根据有无返回值判断的,无返回值就把函数定义为void类型
如果是单纯输出矩阵那就不用返回了,如果还要传回主函数有其它应用那就返回吧
#define MAX 50
#define M MAX
#define N MAX
#define T MAX
#define S MAX
int Mult(double a[][N],int m,int n,double b[][T]int s,int t,double c[][T]) {
int i,j,k;
if(n != s) {
printf("两矩阵相乘,左矩阵的列数与右矩阵的行数必须相等。\n");
return 0;
}
int c;
tmp.m_Mat = new double *[tmp.m_Rows];
for(int i = 0;i tmp.m_Rows;i++) tmp.m_Mat[i] = new double[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];
}
}
return 1;
}