首页 > 解决方案 > 在python的for循环中使用Ax = b中的先前值x(i-1)获取x(i)数组很热

问题描述

我的代码有问题,欢迎需要帮助。

我从 Excel 文件(此处)创建了一个数组。第一行给出的数据是系统的初始条件。x(i) 应该是我每行的 C1、C2 和 C3。

我在 Ax=b 中求解 x,使用先前的计算值为每一步创建向量 x(i),而不是从 excel 文件中获取先前的值。(我正在使用蜘蛛)

我想解决 x 考虑到之前计算的 x(i-1) 。

有人可以给我一些指导来处理这个问题吗?先感谢您。

# Import data from Excel file:
data = pd.read_excel('3zones_DataObserved_1.xlsx', sheet_name='Sheet1')

# Constant variables:
v1 = 30
v2 = 35
v3 = 30
dt = 5

# Solving x in Ax=b:

dataarray = data.to_numpy()
countr = 1
for i in range(1,len(dataarray)):
    # matrix A 3x3
    A = np.array([[v1/dt+dataarray[i][4]/2, -dataarray[i][4]/2, -dataarray[i][4]],
                  [-dataarray[i][5]/2, v2/dt+dataarray[i][5]/2, -dataarray[i][5]/2],
                  [-dataarray[i][6]/2, -dataarray[i][6]/2, v3/dt+dataarray[i][6]/2]])
   # vector A 3x1
    b = np.array([[v1*dataarray[i-1][3]/dt-dataarray[i-1][4]*dataarray[i-1][0]/2+dataarray[i][7]/2],
                  [v2*dataarray[i-1][3]/dt-dataarray[i-1][5]*dataarray[i-1][1]/2+dataarray[i][8]/2],
                  [v3*dataarray[i-1][3]/dt-dataarray[i-1][6]*dataarray[i-1][2]/2+dataarray[i][9]/2]])
    # vector A 3x1
    x = np.linalg.solve(A,b)

    print ("Ite ",countr,":",x[0],x[1],x[2])
    countr += 1

标签: python-3.7

解决方案


我假设您想访问先前计算的 x 值。一种方法是在 for 循环之前移动 x 的定义。然后在循环体中赋值后,再次进入循环时,x 中有旧的 x 值。


推荐阅读