![](/img/trans.png)
[英]2D circular convolution Vs convolution FFT [Matlab/Octave/Python]
[英]Defining a 2D array of functions without constructing each function individually first (Python or MATLAB/Octave)
(我很高興在 Python 或 MATLAB/Octave 中完成以下任務。下面我概述了 Python 中的問題。)
我想通過重復定義一個 17x8 的函數數組
if 0<k<16:
f[k,n+1](j) = A(k,j)*f[k-1,n](j) + B(k,j)*f[k+1,n](j)
elif k==0:
f[k,n+1](j) = B(k,j)*f[k+1,n](j)
elif k==16:
f[k,n+1](j) = A(k,j)*f[k-1,n](j)
函數A(k,j)
和B(k,j)
沒有索引,它們不需要數組。 它們對於這個問題不是必不可少的。 循環的初始值由已知值給出
if k==8:
f[k,0](j)=0
else:
f[k,0](j)=1
這適用於任意j
。
如何在二維數組中反復定義函數數組? 我見過這樣的例子,它們通過以下方式構造函數數組
myFuncs = [f0,f1,f2]
myFuncs[2](...) #calls f2
但是,這需要我在將它們集中到myFuncs
數組中之前創建並命名各個函數。 相反,我需要在不命名 17x8 數組中的所有 136 個函數的情況下構建此表。 我怎樣才能做到這一點?
編輯:為了明確並證明可以將解決方案編寫為 k 的 function,我試圖解決的重復是
f[k,n+1](j) = sqrt(j+k-8)*f[k-1,n](j) + sqrt(k+j-7)*f[k+1,n](j)
使用n=0
的已知值,對於 n=1,我可以獲得以下結果:
f[9,1](j) = sqrt(j+1)
f[7,1](j) = sqrt(j)
其他等於 0,然后對於n=2
f[10,2](j) = sqrt((j+1)*(j+2))
f[8,2](j) = 2*j+1
f[6,2](j) = sqrt(j*(j-1))
與其他零。 但是,手動執行此操作容易出錯,我想對此進行概括,因為我希望計算所有這些函數的其他兩個遞歸。
您可以將其實現為單個遞歸 function:
function ret = f(k,n,j)
if n==0
if k==8
ret = 0;
else
ret = 1;
end
else
if k==0
ret = A(k,j) * f(k-1,n-1,j);
else if k==16
ret = B(k,j) * f(k+1,n-1,j);
else
ret = A(k,j) * f(k-1,n-1,j) + B(k,j) * f(k+1,n-1,j);
end
end
請注意,這不是計算 function 值的有效方法,因為我們將多次重新計算相同的值。 最有效的方法是簡單地計算 17x8 數組中給定j
值的所有值,從n=1
開始並從那里向上移動。 或者,您可以將記憶添加到遞歸function以避免重新計算值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.