Tôi đã xây dựng một mã nhỏ mà tôi muốn sử dụng để giải quyết các vấn đề eigenvalue liên quan đến ma trận thưa thớt lớn. Nó hoạt động tốt, tất cả những gì tôi muốn làm bây giờ là thiết lập một số phần tử trong ma trận thưa thớt bằng 0, tức là những phần tử trong hàng trên cùng (tương ứng với việc thực hiện các điều kiện biên). Tôi chỉ có thể điều chỉnh các vectơ cột (C0, C1 và C2) bên dưới để đạt được điều đó. Tuy nhiên, tôi tự hỏi nếu có một cách trực tiếp hơn. Rõ ràng, chỉ mục NumPy không hoạt động với gói thưa thớt của SciPy.Làm thế nào để thay đổi các yếu tố trong ma trận thưa thớt trong SciPy của Python?
import scipy.sparse as sp
import scipy.sparse.linalg as la
import numpy as np
import matplotlib.pyplot as plt
#discretize x-axis
N = 11
x = np.linspace(-5,5,N)
print(x)
V = x * x/2
h = len(x)/(N)
hi2 = 1./(h**2)
#discretize Schroedinger Equation, i.e. build
#banded matrix from difference equation
C0 = np.ones(N)*30. + V
C1 = np.ones(N) * -16.
C2 = np.ones(N) * 1.
diagonals = np.array([-2,-1,0,1,2])
H = sp.spdiags([C2, C1, C0,C1,C2],[-2,-1,0,1,2], N, N)
H *= hi2 * (- 1./12.) * (- 1./2.)
#solve for eigenvalues
EV = la.eigsh(H,return_eigenvectors = False)
#check structure of H
plt.figure()
plt.spy(H)
plt.show()
Đây là hình ảnh hóa của ma trận được tạo bởi mã bên trên. Tôi muốn thiết lập các phần tử trong hàng đầu tiên bằng không.
Tôi đã tìm được một công việc. Các định dạng tôi đang sử dụng (dia_matrix) là không tốt cho muốn tôi muốn đạt được. Tôi sẽ sử dụng csr_matrix để thay thế. Tôi có nên đóng bài đăng này sau đó không? – seb
đó là một câu hỏi hay và có thể hữu ích cho những người khác trong tương lai. Làm thế nào về việc đăng những gì bạn tìm thấy như là một câu trả lời? – YXD
ok, tôi sẽ làm điều đó – seb