VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > temp > 简明python教程 >
  • Python3与线性代数的随笔之初等变换

初等变换(elementary transformation)是三种基本的变换,即交换(switching),相乘(multiplication)和相加(addition)。

以下是关于实现初等变换的Python3代码,不需要用numpy和matlib等第三方模块。可能这不是最好,最简单的,但能实现功能,抛砖引玉。

其中程序已定义了一个二维列表变量matrix,并满足矩阵的条件,如[[1, 2, 3], [4, 5, 6], [7, 8, 9]]

 

交换:

1 switch_num = input("请输入需要交换的那两行的编号:").split()
2 a, b = int(switch_num[0])-1, int(switch_num[1])-1
3 for num in range(len(matrix[0])):
4     matrix[a][num], matrix[b][num] = matrix[b][num],  matrix[a][num]

 

相乘:

复制代码
 1 command = input("按格式:[行编号] [*或/] [乘数或除数]来输入:").split()
 2 row_num, sign, k = int(command[0])-1, command[1], float(command[2])
 3 if k == 0:
 4     raise MathError("Can't be multiplied by a zero constants.")
 5 else:
 6 for num in range(len(matrix[0])):
 7         if sign == "*":
 8             matrix[row_num][num] *= k
 9         elif sign == "/":
10             matrix[row_num][num] /= k
复制代码

说明一下,第4行我自定义了一个错误。因为规定,做相乘运算时,乘数不可为0,自然除数也不能为0,所以要引发错误来提醒用户。

自定义的错误:

1 class MathError(Exception):
2     def __init__(self, value):
3         self.value = value
4 
5     def __str__(self):
6         return self.value

 

相加:

复制代码
 1 command = input("按格式:[行编号] [+或-] [系数] [另一个行编号]来输入:").split()
 2 row_num_a, sign, k, row_num_b = int(command[0])-1, command[1], float(command[2]), int(command[3])-1
 3 if row_num_a == row_num_b:
 4     raise MathError("Can't operate in the same row/column.")
 5 else:
 6     for num, item in enumerate(matrix[row_num_b]):
 7         if sign == "+":
 8             matrix[row_num_a][num] += k * item
 9         elif cmd[2] == "-":
10             matrix[row_num_a][num] -= k * item
复制代码

说明,规定不能对同一行进行加减,若用户输入的两个行编号相同,则引发自定义错误


相关教程