用于求解方程的Python数组



我正在编写一个简单的热方程求解器,以适应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,有一个非常严格的方法来处理数组,就像数学一样,你必须小心你的维数。蟒蛇似乎不是这种情况。在我的最后几行代码中,我把行向量和列向量都当作不同的,但这太麻烦了,有什么方法可以让这些事情更有效率吗?

此刻,我似乎把一切都当作一个数组,并从线性代数求解器中正确地得到一个向量,我必须选择第一个元素。我能不能对输入宽松一点,或者我能不能更严格地定义我的矩阵,所以要注意它们是行向量还是列向量?

在numpy中可以定义列向量、行向量和二维矩阵。

,

>>> 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)
如你所见,维数被考虑在内,如果涉及的向量的维数不匹配,一些操作是不允许的

最新更新