2013-04-18 57 views
0

我正在進行一項任務,其中需要找到位於區間[a,b)中的三對角矩陣的特徵值的數目。我需要使用二分算法來找到這些特徵值,並且它們必須以向量E的形式輸出。函數是函數[E] =二等分(A,a,b,tol),其中tol是可接受的誤差容限。在MATLAB中遞歸地追加到矢量中

% If tolerance is met, add (a + b)/2 to E as many times as there are 
% eigenvalues left in [a,b). This is the recursive stopping criterium. 
if(b - a < tol) 
    for i = 1:n 
     E = [E; (a + b)/2]; 
    end 
end 

% If there are eigenvalues left in [a,b), add new eigenvalues to E through 
% recursion. 
if(n > 0) 
    E = [E; bisection(A, a, (a+b)/2, tol); bisection(A, (a+b)/2, b, tol)]; 
end 

E = []; 

我想要做的是擴大向量E與另一個函數調用平分。只有我得到這個錯誤:

??? Undefined function or variable "E". 

Error in ==> bisection at 56 
    E = [E; bisection(A, a, (a+b)/2, tol); bisection(A, (a+b)/2, b, tol)]; 

我已經做了一個空的向量E,我顯然不能放在函數內部。那麼有什麼辦法遞歸地擴展一個向量?

+0

您正在試圖收集一個來歷不明的結果。嘗試用零或NaN初始化E – fpe

回答

2

如果您不能將空的起始矢量放入函數中,則應將其作爲輸入參數傳遞。

這是最高級別的代碼可能是什麼樣子,例如:

E = []; 
E = myRecursiveFunction(E,inputs,stoppingCriteria) 
+0

謝謝。我假設Matlab會使用該變量,即使它沒有作爲參數傳遞。 – user2295313