我需要用一些值填充矩陣(存儲爲數組數組)。該矩陣是一個簡單的擴散問題,雅可比,看起來像這樣:Smalltalk(Pharo)中嵌套的「if」(AKA「開關」)
J(1,1) = 1, J(N,N)=0
和1<n<N
:
J(n,n) = -2k/dx^2 - 2*c(n)
J(n,n-1)=J(n,n+1) = k/dx^2
矩陣元素都爲零的其餘部分。
到目前爲止,我有這個畸形:
(1 to: c size) collect: [ :n |
(1 to: c size) collect: [ :m |
n = 1 | (n = c size)
ifTrue: [ m = n ifTrue: [ 1.0 ] ifFalse: [ 0.0 ] ]
ifFalse: [ m = n
ifTrue: [ -2.0 * k/dx squared - (2.0 * (c at: n)) ]
ifFalse: [ m = (n-1) | (m = (n+1))
ifTrue: [ k/dx squared ]
ifFalse: [ 0.0 ] ] ]
] ]
通知嵌套的 「if語句」(Smalltalk的當量)。這工作。但是,在那裏,也許有更好的方法來做同樣的事情?就目前來看,這是相當難以理解的。
對於非玩具問題,您可能希望爲此使用更高效(稀疏)的矩陣實現。 –
@StephanEggermont當然,對於更嚴重的任務,我必須實現一個稀疏(帶狀)矩陣:速度性能x2 - x3。 – mobiuseng