Python:用于计算2个向量差异之和的隐式函数

时间:2018-05-15 20:35:32

标签: python recursion matrix vector sum

我有一个矩阵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)

我会很感激任何建议!

1 个答案:

答案 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)