Я работаю над назначением, где должно быть найдено число собственных значений тридиагональной симметричной матрицы, расположенной в интервале [a, b). Мне нужно использовать алгоритм деления пополам, чтобы найти эти собственные значения, и их нужно выводить в виде вектора E. Функция - это функция [E] = bisection (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, который я, очевидно, не могу использовать внутри функции. Итак, есть ли способ рекурсивно развернуть вектор?
Вы пытаетесь собрать неизвестную E с результатами. Попробуйте инициализировать E нулями или NaNs – fpe