好久没有写点随笔了, 主要是感觉, 有的想法太离谱, 写在这里, 还不如写在科幻小说里面.
最近没事就刷刷力扣, 不过 最近想到一个比较好玩的, 代数运算.
其实代数运算是有实际的使用价值的, 一些数学计算的软件都会集成这样的模块, 辅助科研工作者进行理论研究.
在python里面也提供了sympy 模块.
虽然不支持重复造轮子, 但是我认为应该要有摸轮子的手, 摸都没摸过, 那吃的亏也摸不着.
说会来, 我这里先弄个矩阵乘法运算的模块.
import os
# 矩阵导入
pth = 't_maxi.txt'
maxi = {}
with open(pth) as fr:
cur = None
col_i = 0
row_i = 0
maxi_row_max = 0
maxi_col_max = 0
for l in fr.readlines():
l = l.strip()
if (len(l)>0 and '#' == l[0]):
continue
elif len(l)>0 and '=' == l[-1]:
cur = []
maxi[l[:-1].rstrip()] = cur
col_i = 0
row_i = 0
maxi_row_max = 0
maxi_col_max = 0
elif len(l) == 0:
row_i = 0
else:
row_i += 1
if maxi_row_max < row_i:
maxi_row_max += 1
cur_t = []
for t in range(maxi_col_max):
cur_t.append('0')
cur.append(cur_t)
cur[row_i-1].append(l)
# 矩阵打印
def m_print(x):
print()
for i in x:
print(i)
print('---------------------------')
# 矩阵乘法
def m_mul(x1, x2):
m_print(x1)
m_print(x2)
n,m = len(x1), len(x2[0])
res = []
for i in range(n):
res.append([])
for j in range(m):
if len(x1[i]) != len(x2):
print('error')
return
it = []
for t in range(len(x1[i])):
it.append('('+x1[i][t]+')*('+x2[t][j]+')')
res[-1].append('+'.join(it))
m_print(res)
return res
# 测试
t = m_mul(maxi['T_0_1'], maxi['T_1_2'])
m_mul(t, maxi['T_1_2'])
t_maxi.txt 文件
T_0_1 =
c1
s1
0
0
0
0
1
0
s1
-c1
0
0
0
0
d1
1
T_1_2 =
c2
s2
0
0
-s2
c2
0
0
0
0
1
0
a2c2
a2s2
0
1
输出
['c1', '0', 's1', '0']
['s1', '0', '-c1', '0']
['0', '1', '0', 'd1']
['0', '0', '0', '1']
---------------------------
['c2', '-s2', '0', 'a2c2']
['s2', 'c2', '0', 'a2s2']
['0', '0', '1', '0']
['0', '0', '0', '1']
---------------------------
['(c1)*(c2)+(0)*(s2)+(s1)*(0)+(0)*(0)', '(c1)*(-s2)+(0)*(c2)+(s1)*(0)+(0)*(0)', '(c1)*(0)+(0)*(0)+(s1)*(1)+(0)*(0)', '(c1)*(a2c2)+(0)*(a2s2)+(s1)*(0)+(0)*(1)']
['(s1)*(c2)+(0)*(s2)+(-c1)*(0)+(0)*(0)', '(s1)*(-s2)+(0)*(c2)+(-c1)*(0)+(0)*(0)', '(s1)*(0)+(0)*(0)+(-c1)*(1)+(0)*(0)', '(s1)*(a2c2)+(0)*(a2s2)+(-c1)*(0)+(0)*(1)']
['(0)*(c2)+(1)*(s2)+(0)*(0)+(d1)*(0)', '(0)*(-s2)+(1)*(c2)+(0)*(0)+(d1)*(0)', '(0)*(0)+(1)*(0)+(0)*(1)+(d1)*(0)', '(0)*(a2c2)+(1)*(a2s2)+(0)*(0)+(d1)*(1)']
['(0)*(c2)+(0)*(s2)+(0)*(0)+(1)*(0)', '(0)*(-s2)+(0)*(c2)+(0)*(0)+(1)*(0)', '(0)*(0)+(0)*(0)+(0)*(1)+(1)*(0)', '(0)*(a2c2)+(0)*(a2s2)+(0)*(0)+(1)*(1)']
---------------------------
希望能够实现真正的矩阵运算, 如果稍微成熟了, 我就将整个逻辑开源到 gitee 上, 期待!