当前位置:文档之家› c语言实现矩阵的相关操作

c语言实现矩阵的相关操作

算法分析与设计课程论文—通过C语言实现矩阵的相关操作一.摘要本文在Microsoft Visual Studio 2010的编译环境下,通过C语言进行一些矩阵的基本操作,包括矩阵的设置,加减乘除,数乘运算。

求矩阵的逆等操作。

关键词矩阵 C语言逆矩阵二.正文1.引言矩阵的相关知识只是是高等数学的基础,但是其庞大的运算量和纷繁的步骤让人却步。

虽然有Matlab等软件可以实现矩阵的相关操作,但是我校一些专业并不学习数学实验,故通过C语言实现矩阵的操作也是一种可行的方法,本文列举的了一些矩阵的加减乘除等基本运算规则,还有对矩阵进行转置,也有矩阵求逆的相关操作。

同时,还介绍了行列式的计算,通过运行该程序,可以大大简化行列式的计算量。

2.算法分析矩阵的初始化相关概念在数学中,矩阵(Matrix)是一个按照长方阵列排列的复数或实数集合,最早来自于方程组的系数及常数所构成的方阵。

这一概念由19世纪英国数学家凯利首先提出。

矩阵是高等代数学中的常见工具,也常见于统计分析等应用数学学科中。

在物理学中,矩阵于电路学、力学、光学和量子物理中都有应用;计算机科学中,三维动画制作也需要用到矩阵。

矩阵的运算是数值分析领域的重要问题。

将矩阵分解为简单矩阵的组合可以在理论和实际应用上简化矩阵的运算。

对一些应用广泛而形式特殊的矩阵,例如稀疏矩阵和准对角矩阵,有特定的快速运算算法。

理论分析在C语言中,可以使用二维数组来描绘一个矩阵。

值得注意的是,在二维数组中,必须标明列数,否则编译器就会报错。

故二维极其多维数组使用时要注意数组下标。

代码实现#include<stdio.h>int main(){int juzheng [100][100];int i , j , a , b ;printf("请输入矩阵的行数a 列数b \n") ;scanf ("%d %d",&a,&b);for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng[i][j]);}}printf ("你所输入的矩阵是:\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){printf("%d ",juzheng[i][j]);}printf ("\n");}return 0;}矩阵的相加相关概念加法矩阵的加法满足下列运算律(A,B,C都是同型矩阵):A+B=B+AA+B+C=A+(B+C)应该注意的是只有同型矩阵之间才可以进行加法理论分析:矩阵相加就是将两个矩阵的相同位置的元素相加,相加的值输出,通过循环语句,可以很好的实现该过程,如果要改成减法的话,就可以改成printf(“%d”,juzhen1[i][j]-juzhen2[i][j])。

这样就可以实现矩阵的减法。

代码实现#include<stdio.h>int main(){int juzheng1 [100][100],juzheng2[100][100];int i , j , a , b ;printf("请输入矩阵的行数a和列数b\n") ;scanf ("%d %d",&a,&b);printf("输入矩阵1\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng1[i][j]);}}printf("输入矩阵2\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng2[i][j]);}}printf ("您所输入的矩阵1是:\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){printf("%d ",juzheng1[i][j]);}printf ("\n");}printf ("\n您所输入的矩阵2是:\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){printf("%d ",juzheng2[i][j]);}printf ("\n");}printf ("\n您输出的矩阵是:\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){printf("%d ",juzheng1[i][j]+juzheng2[i][j]);}printf ("\n");}return 0;}矩阵的数乘相关概念矩阵的数乘满足以下运算律:矩阵的加减法和矩阵的数乘合称矩阵的线性运算。

理论分析矩阵的数乘,就是把要乘的那个数乘上每一个元素。

要想实现矩阵的数乘,只需在每一个元素上乘上那个数就行了。

通过对二维数组的遍历,就可以实现该项功能。

代码实现#include<stdio.h>int main(){int juzheng [100][100];int i , j , a , b ,u;printf("请输入矩阵的行数a 列数b \n") ;scanf ("%d %d",&a,&b);printf("请输入需要数乘的那个数u\n") ;scanf ("%d",&u);for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng[i][j]);}}printf ("你所输出的矩阵是:\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){printf("%d ",u*juzheng[i][j]);}printf ("\n");}return 0;}求矩阵中的最大最小值相关概念矩阵中所有元素存在最大最小值,通过在矩阵中的比较大小,就可以找到矩阵中所有元素的最大最小值。

理论分析在一个矩阵中,存在最大值与最小值,通过在循环语句中比较,就可以得出一个矩阵中所有元素的最大最小值。

通过初始化一个max与min,然后将矩阵中个个元素与其进行比较,就可以得出矩阵中个个元素的最大值与最小值。

代码实现#include<stdio.h>int main(){int juzheng [100][100];int i , j , a , b , min , max ;max = -100000;min = 100000;printf("请输入矩阵的行数a 列数b \n") ;scanf ("%d %d",&a,&b);for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng[i][j]);}}for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){if (juzheng[i][j] > max)max = juzheng[i][j];if (juzheng[i][j] < min)min = juzheng[i][j];}printf ("\n");}printf("max = %d min = %d",max,min);return 0;}矩阵的乘法相关概念两个矩阵的乘法仅当第一个矩阵A的列数和另一个矩阵B的行数相等时才能定义。

如A是m×n矩阵和B是n×p矩阵,它们的乘积C是一个m×p矩阵,它的一个元素:并将此乘积记为:. 例如:矩阵的乘法满足以下运算律:结合律:ABC=A(BC)左分配律:(A+B)*C=AC+BC右分配律:A*(B+C)=AC+BC但是矩阵乘法不满足交换律。

理论分析矩阵乘法必须是a*b的矩阵和b*n的矩阵形式才能相乘,通过矩阵乘法的运算法则,就可以得到新的矩阵。

值得注意的是代码实现#include<stdio.h>int main(){int juzheng1 [100][100],juzheng2[100][100];int i , j , a , b , n ,d , k;printf("请输入矩阵的行数a和列数b\n") ;scanf ("%d %d",&a,&b);printf("输入矩阵1\n");for (i = 0;i < a ;i++){for (j = 0;j < b ;j++){scanf ("%d",&juzheng1[i][j]);}}printf("矩阵2为a行n列,输入n\n");scanf ("%d",&n);printf("输入矩阵2:\n");for (i = 0;i < b ;i++){for (j = 0;j < n ;j++){scanf ("%d",&juzheng2[i][j]);}}printf("两个矩阵的乘积y为:\n");for(i = 0;i < a;i++){{for(j = 0;j < n;j++){for(d = 0,k = 0;k < n;k++)d += juzheng1[i][k] * juzheng2[k][j];printf("%d ",d);}printf("\n");}}}求转置矩阵把矩阵A的行换成相应的列,得到的新矩阵称为A的转置矩阵,记作T A或A。

相关主题