Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 2.7 求解线性递归矩阵_Python 2.7_Math_Linear Algebra - Fatal编程技术网

Python 2.7 求解线性递归矩阵

Python 2.7 求解线性递归矩阵,python-2.7,math,linear-algebra,Python 2.7,Math,Linear Algebra,我有一个等式: S=C.(BSQ)+(1-C)I,其中S,B,Q是nXn dim的平方矩阵,C是常数,I是单位矩阵。S初始化为单位矩阵 我想通过解方程来求S。我能做到这一点吗?不需要对两边进行任何求逆,然后进行简化等等?(我正在处理大型数据集,求逆可能非常慢)通过使用上面的方程,我得到了一些结果,但我不确定它是否正确,因为你不能同时进行三次矩阵乘法。我能为S做些什么呢 根据您的矩阵,您可以迭代该公式并希望它收敛。也就是说,从S=I开始,重新计算S,直到它不再变化。当然,这并不能保证收敛,但您可能

我有一个等式:

S=C.(BSQ)+(1-C)I,其中S,B,Q是nXn dim的平方矩阵,C是常数,I是单位矩阵。S初始化为单位矩阵 我想通过解方程来求S。我能做到这一点吗?不需要对两边进行任何求逆,然后进行简化等等?(我正在处理大型数据集,求逆可能非常慢)通过使用上面的方程,我得到了一些结果,但我不确定它是否正确,因为你不能同时进行三次矩阵乘法。我能为S做些什么呢


根据您的矩阵,您可以迭代该公式并希望它收敛。也就是说,从
S=I
开始,重新计算
S
,直到它不再变化。当然,这并不能保证收敛,但您可能想尝试一下

如果你想直接解决这个问题,你可以导出一个线性系统。只需将RHS因子计算出来(这样就可以得到结果矩阵中每个条目的表达式),并为每个条目建立方程。例如,对于第一个条目,如下所示:

s11 = 1 - c + c * (q11 * (b11 * s11 + b12 * s21 + b13 * s31 + ...) + 
                   q21 * (b11 * s12 + b12 * s22 + b13 * s32 + ...) + 
                   q31 * (b11 * s13 + b12 * s23 + b13 * s33 + ...) + 
                   ...)

求解
s..
就完成了。当然,如果系统允许解决方案。否则,您可能需要求解最小二乘解。

根据您的矩阵,您可能只需要迭代该公式,并希望它收敛。也就是说,从
S=I
开始,重新计算
S
,直到它不再变化。当然,这并不能保证收敛,但您可能想尝试一下

for t in range(100):

        s=c*(sc.dot(sc.dot(Qin.T,s),Qin))+ (1-c)*I
如果你想直接解决这个问题,你可以导出一个线性系统。只需将RHS因子计算出来(这样就可以得到结果矩阵中每个条目的表达式),并为每个条目建立方程。例如,对于第一个条目,如下所示:

s11 = 1 - c + c * (q11 * (b11 * s11 + b12 * s21 + b13 * s31 + ...) + 
                   q21 * (b11 * s12 + b12 * s22 + b13 * s32 + ...) + 
                   q31 * (b11 * s13 + b12 * s23 + b13 * s33 + ...) + 
                   ...)
求解
s..
就完成了。当然,如果系统允许解决方案。否则,您可能需要求解最小二乘解

for t in range(100):

        s=c*(sc.dot(sc.dot(Qin.T,s),Qin))+ (1-c)*I
这将递归求解方程100次。你可以做一个收敛测试,即Si-Si-1=一些小值来检查收敛性


这将递归求解方程100次。您可以做一个收敛测试,即Si-Si-1=一些小值来检查收敛性。

既然您没有告诉我们
C
B
Q
的值是什么,即使在您的图形中,我们如何回答您的问题?你说“你不能同时做三次矩阵乘法”是什么意思?把前两个乘以第三个。用简单的算法,矩阵求逆在最坏情况下是O(n**3),这是多项式时间,那么这有什么错呢?您的特定示例可能具有一些功能,这些功能可以将速度提高到甚至更短的时间。请以文本形式向我们展示您的完整示例,以便我们检查您答案的正确性。此外,如果速度很重要,您可能应该使用numpy数组,而不是基本的Python列表。我不能将前两个矩阵相乘,然后再将第三个矩阵相乘,因为前两个是B和S,相乘将更改S的值。这将是一个问题,因为S在等式的两侧都存在,因此计算的值将是错误的。我使用的是numpy数组。我也应该发布我的代码吗?我只是没有发布它,因为它主要是如何使用一些条件等单独计算矩阵的。主要部分是使用矩阵的值来解方程。一旦你有了
S
的候选答案,你可以将三个矩阵相乘来检查你的答案。这不是你说的“我不确定它是否正确,因为你不能同时做三个矩阵乘法”的意思吗?您仍然需要显示一些示例值,以便我们能够确定您的意思。它们应该是缩小的、更小的示例,根据。既然您没有告诉我们
C
B
Q
的值是什么,即使在您的图形中,我们如何回答您的问题?你说“你不能同时做三次矩阵乘法”是什么意思?把前两个乘以第三个。用简单的算法,矩阵求逆在最坏情况下是O(n**3),这是多项式时间,那么这有什么错呢?您的特定示例可能具有一些功能,这些功能可以将速度提高到甚至更短的时间。请以文本形式向我们展示您的完整示例,以便我们检查您答案的正确性。此外,如果速度很重要,您可能应该使用numpy数组,而不是基本的Python列表。我不能将前两个矩阵相乘,然后再将第三个矩阵相乘,因为前两个是B和S,相乘将更改S的值。这将是一个问题,因为S在等式的两侧都存在,因此计算的值将是错误的。我使用的是numpy数组。我也应该发布我的代码吗?我只是没有发布它,因为它主要是如何使用一些条件等单独计算矩阵的。主要部分是使用矩阵的值来解方程。一旦你有了
S
的候选答案,你可以将三个矩阵相乘来检查你的答案。这不是你说的“我不确定它是否正确,因为你不能同时做三个矩阵乘法”的意思吗?您仍然需要显示一些示例值,以便我们能够确定您的意思。它们应该是缩小的,更小的例子,根据。谢谢。希望它在这种情况下是收敛的,但它不是一个好提示谢谢。希望它在这种情况下是收敛的,但它不是一个好提示