Python。。创建矩阵

2024-06-16 13:55:03 发布

您现在位置:Python中文网/ 问答频道 /正文

下面的代码实际上在做什么?。。 特别是索引一。。。在

据我所知, 对于a“a,b=创建矩阵1(4,4)” 矩阵A是16*16;b是16*1

我理解这个问题有些困难。任何有见识的人都会很感激的

def create_matrix_1(n,m,force=0.0): 
    """ 
      Create a matrix associated with a tension force to a membrane. 
      The domain is represented by a 2D grid of size n*m 
    """ 

    hx = 1.0/(n-1) 
    hy = 1.0/(m-1) 

    hx2 = 1.0/hx**2 
    hy2 = 1.0/hy**2 

    x = linspace(0,1,n) 
    y = linspace(0,1,m) 

    A = lil_matrix((n*m, n*m)) 
    b = zeros(n*m) 
    for i in range(n): 
            for j in range(m): 
                    index = i + j*n 
                    if( i==0 or i==n-1 or j==0 or j==m-1): # Boundary nodes 
                            b[index] = saddle_function(x[i],y[j]) 
                            A[index,index] = 1.0 
                    else: # Interior Nodes 
                            b[index] = force 
                            A[index,index] = -2.0*(hx2 + hy2) 
                            A[index,index+1] = hx2 
                            A[index,index-1] = hx2 
                            A[index,index+n] = hy2 
                            A[index,index-n] = hy2 
    return A,b

Tags: or代码inforindexdefrange矩阵
1条回答
网友
1楼 · 发布于 2024-06-16 13:55:03

For my understanding, for a "A,b = create_matrix_1(4,4)" the matrix A is 16*16; b is 16*1

不一定:在上面的代码中,我们没有lil_matrix和{}函数的定义。当值for作为元组传递给函数(n*m, n*m)时,for循环之前的语句只表示{}等于函数{}返回的值。另一方面,b等于函数zeros返回的值,n*m。在

然后是循环部分。 基本上,有两个嵌套循环,即有两个迭代器i和j,分别从0递增到n-1和从0递增到m-1;因此,假设n=4和m=4:

1)我们首先迭代j的所有值,其中i=0

Iteration    Value of index

1            0+0*4
2            0+1*4
3            0+2*4
4            0+3*4

2)既然所有的j值,从j=0到{},我们递增i,然后再次迭代j的所有值:

^{pr2}$

3)然后我们对i=2i=3等重复相同的循环,直到i=n-1。在

现在我们来看看ifelse块。对于上述所述的每一个循环,如果我们有一个边界值,即^{>}或{>}是在循环的第一次或最后一次迭代(例如,^{>}或j}是{{},或i=n-1}或{{{})的边界值,那么{{}}和{{}}的值不再是本回答开头所描述的那些,那么{}和b的不再是本答案开头所描述的那些,本回答开头所描述的那些,那么{}和{{}{在,但是根据以if开头的行之后的两行进行更改。如果ij的值不是边界值,而是内部节点,A和{}的值将根据else语句后的行进行更改。在

ifelse部分中的语句只更改A和{}中的一些元素,它们是数组。看看代码,A必须是一个二维数组(矩阵),正如你在问题中正确指出的,b是一维数组(向量)。(顺便说一句,在Python中,数组实际上是列表,但这里我将使用通用术语数组)。在ifelse块中,我们都有index关键字:例如,b[index]意味着我们修改的b的值是b的第N个值,其中index=N。对于{},我们在方括号中有两个值,因为{}是一个矩阵。顺便说一句,我认为在语法上有一个错误,因为当你在一个矩阵中选择一个值时,你不使用逗号,例如,你不写A[x, y],而是A[x][y](逗号只能在定义矩阵时使用,而不能在选择其中一个值时使用)。但是A和{}都是首先使用本代码中未包含的函数创建的,因此我们知道的不多。在

除了lil_matrixzeros,您需要研究的另一个函数是linspace,因为它的定义没有包含在这段代码中:它在开始时用于创建变量x和{},然后在if块中使用。在

相关问题 更多 >