下面的代码实际上在做什么?。。 特别是索引一。。。在
据我所知, 对于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
不一定:在上面的代码中,我们没有}函数的定义。当值}等于函数{}返回的值。另一方面,
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
:2)既然所有的},我们递增
^{pr2}$j
值,从j=0
到{i
,然后再次迭代j
的所有值:3)然后我们对
i=2
,i=3
等重复相同的循环,直到i=n-1
。在现在我们来看看>}或{>}是在循环的第一次或最后一次迭代(例如,^{>}或},或})的边界值,那么{{}}和{{}}的值不再是本回答开头所描述的那些,那么{}和}和{{}{在,但是根据以}的值将根据
if
和else
块。对于上述所述的每一个循环,如果我们有一个边界值,即^{j
}是{{i=n-1
}或{{{b
的不再是本答案开头所描述的那些,本回答开头所描述的那些,那么{if
开头的行之后的两行进行更改。如果i
或j
的值不是边界值,而是内部节点,A
和{else
语句后的行进行更改。在if
和else
部分中的语句只更改A
和{A
必须是一个二维数组(矩阵),正如你在问题中正确指出的,b
是一维数组(向量)。(顺便说一句,在Python中,数组实际上是列表,但这里我将使用通用术语数组)。在if
和else
块中,我们都有index
关键字:例如,b[index]
意味着我们修改的b
的值是b
的第N个值,其中index
=N。对于{A[x, y]
,而是A[x][y]
(逗号只能在定义矩阵时使用,而不能在选择其中一个值时使用)。但是A
和{除了},然后在
lil_matrix
和zeros
,您需要研究的另一个函数是linspace
,因为它的定义没有包含在这段代码中:它在开始时用于创建变量x
和{if
块中使用。在相关问题 更多 >
编程相关推荐