我有一个矩阵M和初始向量v0。我想写一个递归函数来执行M * v_ {i},这样我就可以找到v_ {i}和v_ {i + 1},使得向量差的所有元素之和小于0.45。例如:
import numpy as np
M = np.array([[0, 0, 0, 0.5, 0, 0], [1, 0, 0, 0, 0.5, 0], [0, 1, 0, 0, 0.5, 1], [0, 0, 1, 0, 0, 0], [0, 0, 0, 0, 0, 0], [0, 0, 0, 0.5, 0, 0]])
M = M.astype(float)
v0 = np.array([1/6, 1/6, 1/6, 1/6, 1/6, 1/6])
v1 = np.dot(M, v0)
v2 = np.dot(M, v1)
v3 = np.dot(M, v2)
v4 = np.dot(M, v3)
v5 = np.dot(M, v4)
x = np.absolute(v4 - v5)
print(sum(x))
这里我想要的输出是sum(x)= 0.42和矢量v4和v5的值。到目前为止,我已经尝试了这个并且卡住了,
def diff_sum(M, v):
v1 = np.dot(M, v)
x = np.absolute(v - v1)
x = sum(x)
if x < 0.45:
return (x, v, v1)
else:
diff_sum(M, np.dot(M, v1))
return (x, v, v1)
我会很感激任何建议!
答案 0 :(得分:0)
我不确定你为什么需要递归,但这可以通过循环轻松完成:
def diff_sum(M,vi1):
er=1
while (er>0.45):
vi=vi1.copy()
vi1=M @ vi
er=np.abs(vi1-vi).sum()
return vi,vi1,er
vn1,vn,er=diff_sum(M,v0)