基于营养搭配餐问题探究线性方程组的解法
Exploring Solutions to Systems of Linear Equations Based on the Problem of Nutritious Meal Combinations
摘要: 线性方程组是线性代数中的一个重要分支,也是线性代数的基础,它贯穿了线性代数的大的部分内容,以线性代数为基础,可以解方程组,求解各类方程组解的问题,以及利用线性方程组解决矩阵的问题等。在实际生活中,线性方程组的应用也广泛,本文着重于从人体所需的营养物质问题出发,探究线性方程组的求解过程,最后得出结论,利用消元法,矩阵的初等变换来求解线性方程组。得到了关于非齐次线性方程组的解的判定方法以及求解过程。
Abstract: Linear equations are an important branch and foundation of linear algebra, permeating most of its content. Based on linear algebra, one can solve systems of equations and various problems related to solving systems of equations, and matrix problems have been solved using linear equations. In real life, linear equations are widely applied. This article focuses on the issue of nutrients required by the human body, exploring the process of solving linear equations. Finally, it concludes that linear equations can be solved using the method of elimination and elementary matrix transformations. The determination method and solving process for the solutions of non-homogeneous linear equations are obtained.
文章引用:王卓. 基于营养搭配餐问题探究线性方程组的解法[J]. 理论数学, 2025, 15(10): 129-136. https://doi.org/10.12677/pm.2025.1510256

1. 引言

线性代数的起源,可追溯至九章算术,其中就有关鸡兔同笼的问题[1],这是有关线性方程组最早的记载。《九章算术》“方程”章是人类历史上第一部系统论述线性方程组解法的数学著作。它不再是零星的、解决特定问题的方法,而是提供了一整套普适的算法,可以解决从二元到五元甚至更多未知数的线性方程组。这意味着中国数学家早在汉代就已经将线性方程组作为一个独立的数学对象进行系统性研究,形成了抽象的理论雏形,这标志着数学思维的一次巨大飞跃。

《九章算术》采用算筹在计算板上布列一个方阵(称为“方程”)。每一行(古代为竖排)代表一个方程,每一列代表一个未知数(或常数项)的系数。这种分离系数法和矩阵式的排列方式,又称“算筹布阵”与分离系数法,与现代线性代数中的增广矩阵思想完全一致。它将方程组的本质——系数之间的关系一一清晰地抽象出来,是数学史上一次革命性的进步。

为了解算筹,提出了直除法,它的核心思想是消元。是高斯消元法的先驱,也是“方程术”的核心解法。通过对方阵中的算筹进行遍乘(整体乘以某数)、直除(两行相减以消元)等变换,逐步消元,最终将矩阵化为上三角阵,然后反向代入求解。直除法的原理与19世纪德国数学家高斯独立提出的高斯消元法完全相同。但《九章算术》比高斯早了近1800年。这证明中国古人已经掌握了一套完整、有效且可计算性极强的解线性方程组的算法。《九章算术》并非空谈理论,其“方程”章包含了18个实际问题,涉及粮食分配、牲畜交易、按等级纳税、工程派遣等社会生产和生活的方方面面[2]

下面从日常生活中所需的营养物质成分来引入线性方程组,假设一位营养师需要为一位健身人士设计一份餐食。这份餐食需要精确满足以下营养目标:

蛋白质:至少55克;碳水化合物:至少130克;脂肪:不超过50克;现有三种食材可供选择:

鸡胸肉(A):每100克含蛋白质30 g,碳水化合物0 g,脂肪4 g。

糙米饭(B):每100克含蛋白质3 g,碳水化合物25 g,脂肪1 g。

牛油果(C):每100克含蛋白质2 g,碳水化合物9 g,脂肪15 g。

为了恰好满足(或超过)所有营养目标,这三种食材分别需要多少克?

建立数学模型,定义变量并列出方程组。首先,定义未知数:

x为所需鸡胸肉的克数;设y为所需糙米饭的克数;设z为所需牛油果的克数。

接下来,根据营养成分列表来建立约束关系。需要注意的是,题目中的营养成分数据是每100克的含量,所以在计算时需要除以100。蛋白质总含量约束:鸡胸肉提供的蛋白:0.3x,糙米饭提供的蛋白:0.3y牛油果提供的蛋白:0.2z,总蛋白质应大于55 g:

0.3x+0.3y+0.2z55

为了简化方程,两边同时乘以100:

30x+3y+2z5500

碳水化合物总含量约束:

0 100 x+ 25 100 y+ 9 100 z130

简化后:

25y+9z13000

脂肪总含量约束:

4 100 x+ 1 100 y+ 15 100 z50

简化后:

4x+y+15z5000

此外,食材重量不能为负数,因此还有非负约束: x0,y0,z0 ,这样,就得到了一个由三个线性不等式构成的线性不等式组。在实际求解中,通常会寻找一个恰好满足边界,即等式的解,或者使用更高级的线性规划方法来寻找最优解,如成本最低的方案。为了更好地理解,假设寻找恰好满足营养最低要求的解,即将不等式变为等式:

{ 30x+3y+2z=5500 (1) 25y+9z=13000 (2) 4x+y+15z=5000 (3)

求解线性方程组

现在要解这个三元一次方程组。可使用代入法或消元法。

步骤一:方程(2)中只含有一个变量,所以从方程(2)中求出关于y的表达式, 25y=130009z ,可得

y= 130009z 25 (4)

步骤二:将方程(4)代入方程(1)和(3)

将(4)代入(1):

30x+3× 130009z 25 +2z=5500

两边同时乘以25以消除分母:

750x+3(130009z)+50z=137500

750x+3900027z+50z=137500

750x+23z=13750039000

750x+23z=9850

将(4)代入(3):

4x+ 130009z 25 +15z=5000

两边同时乘以25:

100x+( 130009z )+375z=125000

100x+366z=12500013000

100x+366z=11200

步骤三:解关于xz的方程组。

现在有一个二元一次方程组:

750x+23z=98500 (5)

100x+366z=11200 (6)

将方程(6)乘以7.5,使其x的系数与方程(5)一致:

7.5×( 100x+366z )=7.5×11200 750x+2745z=840000 (7)

用方程(7)减去方程(5):

( 750x+2745z )( 750x+23z )=84000098500

2722z=741500

z= 741500 2722 272.37

z272.37 代入方程(6):

100x+366×272.37=112000 100x+99687.42=112000 100x=11200099687.42 100x=12312.58

z272.37 代入方程(4):

y= 130009×272.37 25 y= 130002451.33 25 y= 10548.67 25 y421.95

即得,鸡胸肉 x123.13 克,糙米饭 y421.95 克,牛油果 z272.37 。验证营养成分:

蛋白质: 30×1.2313+3×4.2195+2×2.723736.94+12.66+5.4555.05g55g

碳水化合物: 0+25×4.2195+9×2.72370+105.49+24.51130.00g ,恰好满足。

脂肪: 4×1.2313+1×4.2195+15×2.72374.93+4.22+40.8650.01g 恰好满足。

结果表明,使用约123克鸡胸肉、422克糙米饭和272克牛油果,可以恰好满足所有的营养需求。

综上所述,可知,解上述方程组实际上只对未知量的系数做了变换,因此,可以只对系数进行变换,可以写成如下形式[3]

步骤1:建立增广矩阵。

( 30 3 2 | 0 25 9 | 4 1 15 | 5500 13000 5000 )

步骤2:初进行初等行变换。

变换1:交换第1行和第3行(使左上角元素变小);

( 4 1 15 5000 0 25 9 13000 30 3 2 5500 )

变换2:第1行除以4 (使第1行第1列元素为1);

( 1 0.25 3.75 1250 0 25 9 13000 30 3 2 5500 )

变换3:第3行减去30倍的第1行(消除第3行第1列元素);

( 1 0.25 3.75 1250 0 25 9 13000 0 4.5 110.5 32000 )

变换4:第2行除以25 (使第2行第2列元素为1);

( 1 0.25 3.75 1250 0 1 0.36 520 0 4.5 110.5 32000 )

变换5:第1行减去0.25倍的第2行(消除第1行第2列元素);

( 1 0 3.66 1120 0 1 0.36 520 0 4.5 110.5 32000 )

变换6:第3行加上4.5倍的第2行(消除第3行第2列元素);

( 1 0 3.66 1120 0 1 0.36 520 0 0 109.12 28660 )

变换7:第3行除以−109.12 (使第3行第3列元素为1);

( 1 0 3.66 1120 0 1 0.36 520 0 0 1 262.7 )

变换8:第1行减去3.66倍的第3行(消除第1行第3列元素);

( 1 0 0 157.3 0 1 0.36 520 0 0 1 262.7 )

变换9:第2行减去0.36倍的第3行(消除第2行第3列元素);

( 1 0 0 157.3 0 1 0 425.4 0 0 1 262.7 )

步骤3:解释结果。

经过上述初等变换,得到了关于该线性方程组的解:

{ x157.3 y425.4 z262.7

步骤4:验证结果。

将上述结果带入原方程,可得:

{ 30×157.3+3×425.4+2×262.75500.2 25×425.4+9×262.713000.3 4×157.3+425.4+15×262.75000.1

其结果与目标值非常接近,产生误差是因为在计算过程中进行了四舍五入,保留部分小数。与之前的消元法相比, x123.13 y421.95 z272.37 有所不同,原因在于:首先改变了变换路径,先进行了行变换,交换了一、三行的位置;其次,在计算过程中,消元法保留了分数,而初等变换只保留了两位小数,进行了四舍五入的处理,最后,由于上述差异,在变换过程中的步骤顺序不一致,造成了最后结果的不同。但在实际应用中,两种方法在数学上是等价的,都应得到相同的解。通常会使用更精确的计算方法(如保留分数形式)来减少舍入误差。

由此,引入线性方程组,并总结归纳线性方程组的解法[4],通过研究线性方程组的解的问题,不仅可以学会本门课程,也为学生专业课的学习打下了坚实的基础。线性方程组[5]在课本中的定义如下:

{ a 11 x 1 + a 12 x 2 ++ a 1n x n = b 1 a 21 x 1 + a 22 x 2 ++ a 2n x n = b 2 a m1 x 1 + a m2 x 2 ++ a mn x n = b m

其中,n表示未知量的个数,m表示方程的个数, a ij 表示系数, b 1 , b 2 ,, b m 表示常数项。上式也可以矩阵的形式表示: AX=B A表示 mn 的系数矩阵,当右端常数项全部为0时,即 B=0 时,此方程称为齐次线性方程组,有关齐次线性方程组的解;当右端的常数项不全为0时,此方程称为非齐次线性方程组,此时A称为系数矩阵(A, b)称为增广矩阵[6]

关于非齐次线性方程组的解法,利用系数矩阵和增广矩阵之间的关系,可以得到方程组是否有解以及解是否唯一的结论。求解步骤总结如下:

第一步:构建增广矩阵;将一个有m个方程、n个未知数的线性方程组转化为其增广矩阵形式;

[ a 11 a 12 a 1n b 1 a 21 a 22 a 2n b 2 a m1 a m2 a mn b m ]

竖线左侧是方程组的系数矩阵,右侧是常数项。

第二步:高斯–消元法;

这是求解的核心步骤,通过初等行变换将增广矩阵化为行最简形,零行均在矩阵的底部,每一行的主元(第一个非零元素)总是严格位于上一行主元的右边,每个主元都是1。主元所在的列中,其他所有元素都是0。在消元过程中,通常选择当前列中绝对值最大的元素所在行作为主元行,以减少计算误差,也称为“部分主元法”。

第三步:判断解的情况。

根据化简后的行最简形矩阵,可以判断方程组的解的情况:

1. 无解,具体常见形式如下:

[ 0 0 | c ]( c0 )

此方程等价于0 = c矛盾,故无解。此时系数矩阵的秩 r( A ) < 增广矩阵的秩 r( A,b )

2. 有唯一解;

此时系数矩阵部分能化为单位矩阵(主对角线为1,其余为0)形如:

[ 1 0 0 s 0 1 0 t 0 0 1 u ] 解为: x=s,y=t,z=u

每个未知数都有唯一的值与之对应,最右列数即为方程组的解,此时系数矩阵的秩 r( A ) = 增广矩阵的秩 r( A,b ) = 未知数的个数n

3. 有无穷多解。

此时系数矩阵的秩 r( A ) = 增广矩阵的秩 r( A,b )=r r<n (未知数个数),矩阵形式就有n-r个未知数是自由变量,可以任意取值。

例:化为行最简后形式如下:

[ 1 0 2 1 5 0 1 3 4 2 0 0 0 0 0 ]

该线性方程组秩为2,未知量个数为4,自由未知量个数为2,取 x 3 , x 4 为自由未知量,则 x 1 , x 2 可表示为

{ x 1 =52 x 3 + x 4 x 2 =2+3 x 3 4 x 4

需要会从最简行中识别主元和自由变量(主元对应的未知数是约束变量,其余是自由变量);然后将约束变量用自由变量表示出来;最后对自由变量任意赋值,即可得到方程组的一个特解。令 x 3 = c 1 , x 4 = c 2 c 1 , c 2 为任意实数。

( x 1 x 2 x 3 x 4 )=( 5 2 0 0 )+ c 1 ( 2 3 1 0 )+ c 2 ( 1 4 0 1 )

2. 总结

当未知量的个数与方程个数相等时常用克莱姆法则,此时要求系数矩阵行列式不为零。此方法公式繁琐,计算量大,多用于理论推导。若方程组可写为矩阵形式 AX=B A可逆,则解为 X= A 1 B ,需要计算逆矩阵,实用性不如消元法。对于大型方程组,计算机会使用迭代法(如雅可比迭代、高斯–塞德尔迭代)来逼近解,而不是直接消元,此方法也称为数值法。高斯消元法是求解线性方程组最通用、最系统的方法。其核心步骤可以概括为:构建增广矩阵→初等行变换化为行最简形→根据矩阵形态判断解的情况→若有解,可直接表达出。

初等变换法提供了系统化的解决方案,特别适合编程实现,是现代计算机求解线性方程组的基础算法。用线性方程组解决实际问题的典型步骤:理解问题:明确未知量、已知条件和约束目标。定义变量:用字母表示所求的未知量。建立方程:根据题目中的每一个条件,列出等量(或不等量)关系,构建线性方程或不等式。求解方程:使用代入法、消元法、矩阵法(高斯消元法)或线性规划法求解。验证与解释:将解代入原题验证合理性,并给出实际意义的答案。这类问题广泛存在于资源分配、生产计划、交通流量、电路分析和经济学等众多领域。

参考文献

[1] 北大数学系前代数小组. 高等代数[M]. 第三版. 北京: 高等教育出版社, 2003.
[2] 吴传生. 经济数学——线性代数[M]. 北京: 高等教学出版社, 2015: 16.
[3] 张禾瑞, 郝鈵新. 高等代数[M]. 第四版. 北京: 高等教育出版社, 2004.
[4] 王卿文, 杨建生, 张琴. 线性代数[M]. 第二版. 北京: 高等教育出版社, 2022: 93-106.
[5] 黄廷祝, 成孝予. 线性代数与空间解析几何[M]. 第五版. 北京: 高等教育出版社, 2018: 40.
[6] 同济大学数学系. 工科数学: 线性代数[M]. 第六版. 北京: 高等教育出版社, 2014: 8-13.