numpy 用于解方程的Python数组

klh5stk1  于 2022-11-24  发布在  Python
关注(0)|答案(1)|浏览(124)

我正在编写一个简单的热方程求解器,以适应python编程语言。我的代码如下:

for i in range(1,m):
    c=gamma*p*(q[i-1]+q[i])
    rhs=np.matmul(B,np.transpose(u[i-1,:]))+np.transpose(c)
    sol=np.linalg.solve(A,rhs[0])
    u[i,:]=np.transpose(sol)
print('Simulation Complete!')

我遇到的问题是如何理解矩阵的结构。我常用的编程语言Matlab,处理数组的方式非常严格,就像数学一样,你必须小心你的维数。看起来python的情况并非如此。在我代码的最后几行,我将行向量和列向量视为不同的,但这太麻烦了。有没有办法让这些东西更有效率
现在,我似乎把所有的东西都当作一个数组,为了从线性代数解算器中正确地得到一个向量,我必须选择第一个元素。我可以对我的输入稍微宽松一点吗?或者我可以对我定义矩阵的方式更严格一点吗?所以,如果它们是行向量或列向量,请保持标签。

cbeh67ev

cbeh67ev1#

在numpy中,您可以定义列向量、行向量和2D矩阵。
例如:

>>> np.ones((1,4))
array([[1., 1., 1., 1.]])

>>> np.ones((4,1))
array([[1.],
       [1.],
       [1.],
       [1.]])

>>> np.ones((4,4))
array([[1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.],
       [1., 1., 1., 1.]])

您可以:

>>> np.dot(2*np.ones((1,4)), np.ones((4,4)))
array([[8., 8., 8., 8.]])

你也可以做

>>> np.dot(np.ones((4,4)), 2*np.ones((4,1)))
array([[8.],
       [8.],
       [8.],
       [8.]])

但如果你试图

>>> np.dot(np.ones((4,4)), 2*np.ones((1,4)))

or 

>>> np.dot(2*np.ones((4,1)), np.ones((4,4)))

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<__array_function__ internals>", line 5, in dot
ValueError: shapes (4,1) and (4,4) not aligned: 1 (dim 1) != 4 (dim 0)

因此,如您所见,考虑了维度,如果所涉及的向量的维度不匹配,则不允许执行某些操作

相关问题