簡體   English   中英

定義一個二維函數數組,而不首先單獨構造每個 function(Python 或 MATLAB/Octave)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM