用Python实现三阶矩阵的求逆? 求逆矩阵怎么用python源代码实现
python\u9006\u77e9\u9635\u600e\u4e48\u6c42\u5230\u5e95\u5e94\u8be5\u600e\u4e48\u6837\u53bb\u6c42\u9006\u77e9\u9635\u624d\u597d\u5462\uff1f
\u52a0\u4e0a\u5934\u6587\u4ef6
from numpy import *
\u77e9\u9635\u6709\u51e0\u4e2a\u7279\u6709\u7684\u5c5e\u6027\uff1a
(a) .T \uff0d\uff0d \u8fd4\u56de\u81ea\u8eab\u7684\u8f6c\u7f6e
(b) .H \uff0d\uff0d \u8fd4\u56de\u81ea\u8eab\u7684\u5171\u8f6d\u8f6c\u7f6e
(c) .I \uff0d\uff0d \u8fd4\u56de\u81ea\u8eab\u7684\u9006\u77e9\u9635
(d) .A \uff0d\uff0d \u8fd4\u56de\u81ea\u8eab\u6570\u636e\u76842\u7ef4\u6570\u7ec4\u7684\u4e00\u4e2a\u89c6\u56fe
你好,下面是一个对应的三阶矩阵求逆的代码
import warnings
warnings.filterwarnings("ignore")
matrix1 = [
[1,2,0,0],
[3,4,0,0],
[0,0,4,1],
[0,0,3,2],
]
matrix2 = [
[1,0,-1,2,1],
[3,2,-3,5,-3],
[2,2,1,4,-2],
[0,4,3,3,1],
[1,0,8,-11,4],
]
matrix3 = [
[1,0,-1,2,1,0,2],
[1,2,-1,3,1,-1,4],
[2,2,1,6,2,1,6],
[-1,4,1,4,0,0,0],
[4,0,-1,21,9,9,9],
[2,4,4,12,5,6,11],
[7,-1,-4,22,7,8,18],
]
def step0(m):
n = len(m)
l = []
for i in range(0,n):
l.append([])
for j in range(0,n):
if i == j:
l[i].append(1)
else:
l[i].append(0)
return l
def step1(m):
n = len(m)
"""交换操作记录数组 swap"""
swap = []
l = []
for i in range(0,n):
swap.append(i)
l.append([])
for j in range(0,n):
l[i].append(0)
"""对每一列进行操作"""
for i in range(0,n):
max_row = m[i][i]
row = i
for j in range(i,n):
if m[j][i] >= max_row:
max_row = m[j][i]
#global row
row = j
swap[i] = row
"""交换"""
if row != i:
for j in range(0,n):
m[i][j],m[row][j] = m[row][j],m[i][j]
"""消元"""
for j in range(i+1,n):
if m[j][i] != 0:
l[j][i] = m[j][i] / m[i][i]
for k in range(0,n):
m[j][k] = m[j][k] - (l[j][i] * m[i][k])
return (swap,m,l)
def step2(m):
n = len(m)
long = len(m)-1
l = []
for i in range(0,n):
l.append([])
for j in range(0,n):
l[i].append(0)
for i in range(0,n-1):
for j in range(0,long-i):
if m[long-i-j-1][long-i] != 0 and m[long-i][long-i] != 0:
l[long-i-j-1][long-i] = m[long-i-j-1][long-i] / m[long-i][long-i]
for k in range(0,n):
m[long-i-j-1][k] = m[long-i-j-1][k] - l[long-i-j-1][long-i] * m[long-i][k]
return (m,l)
def step3(m):
n = len(m)
l = []
for i in range(0,n):
l.append(m[i][i])
return l
def gauss(matrix):
n = len(matrix)
new = step0(matrix)
(swap,matrix1,l1) = step1(matrix)
(matrix2,l2) = step2(matrix1)
l3 = step3(matrix2)
for i in range(0,n):
if swap[i] != i:
new[i],new[swap[i]] = new[swap[i]],new[i]
for j in range(i+1,n):
for k in range(0,n):
if l1[j][i] != 0:
new[j][k] = new[j][k] - l1[j][i] * new[i][k]
for i in range(0,n-1):
for j in range(0,n-i-1):
if l2[n-1-i-j-1][n-1-i] != 0:
for k in range(0,n):
new[n-1-i-j-1][k] = new[n-1-i-j-1][k] - l2[n-1-i-j-1][n-i-1] * new[n-1-i][k]
for i in range(0,n):
for j in range(0,n):
new[i][j] = new[i][j] / l3[i]
return new
x1 = gauss(matrix1)
x2 = gauss(matrix2)
x3 = gauss(matrix3)
print (x1)
print (x2)
print (x3)
假设一个三阶矩阵
a = [ [1 0 0],
[0 2 0],
[0 0 3] ]
a的逆矩阵为np.linalg.inv(a)
如果求不出来证明没有逆矩阵
绛旓細array = [[int(input()) for i in range(3)] for j in range(3)]
绛旓細鎴戜滑闇瑕佽绠楃敱1.2.3.4.5.6.7.8.9鏋勬垚鐨3闃琛屽垪寮忥紝鐒跺悗姹傚嚭鏈澶у笺傞鍏堬紝鎴戜滑闇瑕佺煡閬3闃惰鍒楀紡鐨勮绠楁柟娉曪細瀵逛簬3闃惰鍒楀紡锛屾垜浠湁3!=6绉嶆帓鍒楁柟寮忥紝鎵浠ヤ竴鍏辨湁6绉嶅彲鑳界殑鍊笺傛垜浠彲浠浣跨敤Python鐨itertools搴撴潵鐢熸垚鎵鏈夊彲鑳界殑鎺掑垪锛屽苟璁$畻琛屽垪寮忕殑鍊笺傛墍鏈夌敱涓婅堪鏁板瓧鏋勬垚鐨3闃惰鍒楀紡涓紝鏈澶у兼槸...
绛旓細璇ュ嚱鏁颁富瑕佸垎涓轰袱涓楠わ細鐢熸垚n脳n鐨鐭╅樀銆備娇鐢ㄥ垪琛ㄦ帹瀵煎紡鐢熸垚涓涓猲脳n鐨勭煩闃碉紝鍏朵腑姣忎釜鍏冪礌鐨勫间负璇ュ厓绱犲湪鐭╅樀涓殑琛屽垪鍧愭爣涔嬪拰銆傝绠楁瘡涓厓绱犵殑骞虫柟鍜屻備娇鐢ㄥ弻閲嶅惊鐜亶鍘嗙煩闃典腑鐨勬瘡涓厓绱狅紝璁$畻姣忎釜鍏冪礌鐨勫钩鏂瑰拰銆傝鍑芥暟鐨勬椂闂村鏉傚害涓篛(n^2)锛屽洜涓洪渶瑕侀亶鍘唍脳n涓厓绱犱互璁$畻姣忎釜鍏冪礌鐨勫钩鏂瑰拰銆
绛旓細鍘讳笅杞絥umpy锛屾湁浜嗚繖涓氱敤宸ュ叿鍖咃紝鏁堢巼鏄互鍓嶇殑10鍊. 鐩存帴A*B灏卞ソ
绛旓細2. 鍒涘缓鐭╅樀锛氫娇鐢∟umPy鐨刞array`鍑芥暟鎴栬卄matrix`鍑芥暟鍒涘缓鐭╅樀銆3. 杩涜鐭╅樀闄ゆ硶杩愮畻锛歂umPy涓苟娌℃湁鐩存帴鐨勯櫎娉曡繍绠楃瀵瑰簲鐭╅樀闄ゆ硶锛屼絾鍙互閫氳繃鐭╅樀涔樻硶瀹炵幇銆備緥濡傦紝鑻ヨ瀹炵幇鐭╅樀A闄や互鐭╅樀B锛屽彲浠ヨ浆鎹负姹傝В鐭╅樀A涔樹互鐭╅樀B鐨勯嗐傝繖鍙互閫氳繃`np.dot)`鏉ュ疄鐜般傜ず渚嬩唬鐮侊細python import numpy as np 鍒涘缓...
绛旓細涓涓鐭╅樀鐨绉╃瓑浜庡畠鐨勮鍚戦噺缁勶紙鎴栧垪鍚戦噺缁勶級鐨勬瀬澶х嚎鎬ф棤鍏崇粍涓悜閲忕殑涓暟銆傚洜姝わ紝鎴戜滑鍙互浣跨敤楂樻柉娑堝厓娉曞皢鐭╅樀鍖栦负琛屾渶绠闃舵鐭╅樀锛岀劧鍚庢暟涓涓嬪叾涓潪闆惰鐨勪釜鏁板嵆鍙緱鍒扮煩闃电殑绉┿備互涓嬫槸 Python 浠g爜绀轰緥锛歚``python m = [[1, 2, 3],[4, 5, 6],[7, 8, 9]]灏嗙煩闃靛寲涓鸿鏈绠闃舵...
绛旓細鍦Python涓彲浠ヤ娇鐢∟umPy搴撴潵璁$畻鐭╅樀鐨琛屽垪寮忥紝浠ヤ笅鏄眰瑙e惈鏈夊彉閲弜鐨勭煩闃佃鍒楀紡鐨勭ず渚嬩唬鐮侊細import numpy as np 瀹氫箟鐭╅樀 A = np.array([[1, 2, x], [4, 5, 6], [7, 8, 9]])璁$畻琛屽垪寮 det_A = np.linalg.det(A)杈撳嚭缁撴灉 print(det_A)鍦ㄤ唬鐮佷腑锛宯p.array()鍑芥暟鐢ㄤ簬瀹氫箟鐭╅樀A銆
绛旓細fx鏄柟绋媐(x)鐨勭郴鏁板垪琛 gx鏄柟绋媑(x)鐨勭郴鏁板垪琛 q鏄椤瑰紡g(x)闄や互f(x)鐨勫晢 r鏄椤瑰紡g(x)闄や互f(x)鐨勪綑鏁 rx鏄椤瑰紡f(x)涔樹互g(x)鐨勭粨鏋 import numpy as np fx=[1,-14,48]fxroots=np.roots(fx)print(fxroots)gx=[1,-9,18,31,-102]gxroots=np.roots(gx)print(gxroots)q,...
绛旓細浣犲緱鍏堝畨瑁卬umpy搴擄紝鐭╅樀锛坣darray锛夌殑shape灞炴у彲浠ヨ幏鍙鐭╅樀鐨褰㈢姸锛堜緥濡備簩缁存暟缁勭殑琛屽垪锛夛紝鑾峰彇鐨勭粨鏋滄槸涓涓厓缁勶紝鍥犳鐩稿叧浠g爜濡備笅锛歩mport numpy as npx = np.array([[1,2,5],[2,3,5],[3,4,5],[2,3,6]])# 杈撳嚭鏁扮粍鐨勮鍜屽垪鏁皃rint x.shape # (4, 3)# 鍙緭鍑鸿鏁皃rint x....
绛旓細姣斿璇磋鐢熸垚涓涓笁琛屼袱鍒楃殑闅忔満array锛屽彲浠ヨ繖鏍峰啓锛歩mport numpy x = numpy.random.randn(3,2)鍍忚繖鏍凤細鍚庨潰杩欎釜mat=x.T.dot(...)鏄厛姹傝繖涓3*3鐭╅樀鐨杞疆锛.T锛夛紝鍐嶆眰涓庣偣绉(.dot)鐐圭Н灏辨槸鐭╅樀鍚勪釜瀵瑰簲鍏冪礌鐩镐箻, 杩欎釜鏃跺欒姹備袱涓煩闃靛繀椤诲悓鏍峰ぇ灏忋傚叾瀹炲彲浠ュ垎姝ユ潵鐨勶紝灏辩煡閬鍋浜嗕粈涔堣繍绠椾簡銆