解n元线性方程组的模型
问题的提出:小明妈妈去买白菜,青菜总共花了10元。白菜2.5元一斤,
青菜3元一斤,请算出小明妈妈买了几斤白菜及青菜?
尽管这个问题听起来非常熟悉,显得非常简单,但仅仅由这几个数字和约束条件解不出来这个问题的实际解。因为这个问题有白菜和青菜的质量的两个变元,所以还必须需要一组约束,既需要白菜和青菜的总和斤量才能解出这个问题唯一解,否则这个问题会有很多解,这不符合实际要求。
再举一个物理机械运动学有关的简单例子:甲乙两人分别从相距30千米的A、B两地同时相向而行,经过3小时后相距3千米,再经过2小时,甲到B地所剩路程是乙到A地所剩路程的2倍,求甲、乙两人的速度。
解方程组的思想是数学上很热的问题,更是在化学,物理,经济,天文学,医学等许多领域都常会遇到及需要解的问题。
在生活当中不管是直接的还是间接地也经常遇到这样问解方程组的问题。 因为上面那些领域里所遇到的问题的变元不同,我们需要做出通用的方程组的模型,及需作出有n个变元的方程组。这样可以看实际情况直接调用方程组模型。 建立方程组模型之前需要要引进几个数学概念及符号。
排列:n个数码1,2,3,?n的一个排列指的是由这n个数码组成的一个有序
组。
反序:如果一个较大的数码排在一个较小的数码前面,就说这两个数码构成一
个反序。我们用∏(j1,j2...jn)表示排列j1,j2...jn的反序数。
行列式:用符号 a11a12....a1n
............的是n!项的代数和,这些项表示的n阶行列式指....是一切可能的取自(1)an1an2....ann的不同的行与不同的列上的n个元素a1j1a2j2??anjn。项a1j1a2j2??anjn的符号(-1)^(j1,j2...jn),也就是说,当j1,j2...jn是偶排列时,这一项的符号为正,当j1,j2...jn是奇排列时,这一项的符号为负。
a21a22....a2n(1)
行列式的一些性质:
转置行列式:如果把(1)行变为列,就得到一个新的行列式,则称这个
a11a21....an1a12a22....an2................an1a2n....ann行列式位为(1)的转置行列式。
命题一:行列式与它的转置行列式相等。
命题二:交换一个行列式的两行(或两列),行列式改变符号。
命题三:如果一个行列式有两行(或两列)完全相同,则这个行列式等于零。 命题四:一个行列式的某一个行(列)等于零,则这个行列式等于零。
矩阵:由st个数cij排成的一个s行t列的表叫作一
个s行t列(或s*t)矩阵。Cij叫作这个矩阵的元素。
?c11c12??c21c22?......??cs1cs2?...c1t??...c2t?......??...cst??注意: 矩阵与行列式虽然形式上有些类似,但有完全不同的意义。一行列式死
一些数的代数和,而矩阵仅仅是一个表。
定义1:矩阵的行(列)初等变换指的是对一个矩阵实行的下列变换:
(i)交换矩阵的两行(列);
(ii)用一个不等于零的数乘矩阵的某一行(列),即用一个不等于零的数乘矩
阵某一行(列)所有元素;
(iii)用某一数乘矩阵的某一行(列)后加到另一行(列),即用某一数乘矩阵的某一行(列)的每个元素后加到另一行(列)的对应元素上;
定义2:在一个s行t列矩阵中,任取k行k列(k=
列交点处的元素(不改变元素的相对位置)所构成的k阶行列式叫作这个矩阵的一个k阶子式。
定义3:一个矩阵中不等于零的子式的最大阶数叫作这个矩阵的秩。 定理1:初等变换不改变矩阵的秩。
模型建立 AX=B。
注:其中A是m*n阶矩阵,X是n*1的变量,B是m*1的常数项列向量。
定理2:这个模型有解的充要条件是:秩A=秩(A,B)。
定理3:当秩A≠秩(A,B)时无解;当秩A=秩(A,B),且等于变量的个数n
时有唯一解;当秩A=秩(A,B)<n时有无穷多解; 下面是用计算机实现解这个模型的具体程序:
求解线性方程组AX=b的算法
一、求出矩阵的秩的方法:
(1) 先将矩阵A保存到二维数组A[i][j]中,i=0,1,??m-1,j=0,1,??n-1,
并将A[i][j]进行矩阵的初等变换化为三角阵u[i][j]= A[i][j]。 化成三角阵的代码: int ToTriangle() {int i,j,k; double x;
if(SetPrintMatrix) PriontMatrix(); for(k=0;k For(j=k;j If(SetPrintMatrix) PriontMatrix(); If(k=M-1) break; For(i=k+1;i For(j=k;j If(SetPrintMatrix) PriontMatrix() } Return 0; } (2) 再定义一个求和变量sum和一个指针变量*P,其中p指向 最后一行的每一个元素U[m-1][j], j=0,1,??n-1,判断p所指向的元素的值是否为0,如果是0,则sum++,P++,若不为0,则结束程序; (3) 得出sum的值,若sum 这样可以得出矩阵A的秩,并用同样的方法,在算出增广矩阵的(A,b)秩,然后就可以将线性方程组AX=b的系数矩阵的秩与正广矩阵的秩进行比较了! 求出矩阵的秩代码: main() {int i,j, r,sum; double u[i][j]; char *P; Printf(“请输入一个矩阵:”); Scanf(“%d”,&a[i][j]); for(r=m-1;r>=o;) For(j=o;j Sum=sum+1; p++; {if(sum==n) r--;} else printf(“sum=%d”,sum); printf(“矩阵的秩为:\\n”,r);} 二、求解线性方程组思路: 设AX=b,其中A为m*n阶矩阵,X为n*1阶矩阵,b为m*阶矩阵, 令 R(A)=m,R(A,B)=n 当m=n时,A是满秩的n阶方阵,那么方程组有唯一的解,可用线性方程组求解; m<n程组有无穷多个解,通常希望寻找某种意义下的最优解(运筹学方法解决); m>n,那么方程组无解,但是作为实际问题的数学模型还是有意义的,解决办法是转向寻找它的最小二乘解。 程序的基本流程图如下: 方程AX=b 秩(A)= 秩(A,b) 是 否 秩(A)= n 否 是 有无限解 有唯一解 求解 求解 输出 三、有唯一解的情况: 四、总结 这次团队合作有些不是很默契,面对这道题开始有些茫然,特别是在判断有解中,求秩就是一个很大的问题,还有,这里只讨论求解线性方程组AX=b有唯一解的情况有无穷多个解和无解的情况并没有求解的过程;但是,在做题过程中大家都很积极,很努力;每一个决策都经过大家讨论后在做出选择,更体现了合作的精神,相信将来会更上一层楼! 五、参考文献 [1]陈维兴 林晓茶. C++面向对象程序设计(第二版).9.中国铁道出版社 2009.11(2010.9重印) [2] 胡 超 梁 伟 闫玉宝. C语言从入门到精通 . 机械工业出版社 .2011.1 [3] 甄西丰 实用数值计算方法 .清华大学出版社 2006.1

