Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function Jacc = ieqprime(k, R_data);
- %
- % "Распаковываем" R_data
- %
- T = R_data.T; alpha = R_data.alpha; beta = R_data.beta;
- %
- % Создаем "смещенный" на один элемент назад вектор k:
- % k(i) = k_disp(i+1)
- % Обрежем последний элемент за ненадобностью и чтобы не мешал увеличенной
- % размерностью вектора
- %
- k_disp = [0; k];
- k_disp = k_disp(1:T+2);
- %
- % Создадим матрицу Якоби и поначалу заполним его целиком по общему правилу
- % (помним про особенности нумерации).
- % Обращаем внимание на то, как функция spdiags заполняет матрицу значениями
- % из массивов, и сдвигаем массивы для неглавных диагоналей, чтобы
- % соответствовать правилам spdiags и логике требуемого якобиана.
- % Поправки в конце якобиана для производных от последней функции будут
- % применены позднее
- %
- l_diagn = alpha^2*beta*(k.^(alpha-1)).*(k_disp.^(alpha-1));
- l_diagn = [l_diagn; 0];
- l_diagn = l_diagn(2:T+3);
- m_diagn = alpha*(alpha-1)*beta*(k.^(alpha-2)).*(k_disp.^alpha) - ...
- (alpha^2*beta + alpha)*(k.^(alpha-1));
- u_diagn = ones(T+2, 1);
- u_diagn = [0; u_diagn];
- u_diagn = u_diagn(1:T+2);
- Jacc = spdiags([l_diagn m_diagn u_diagn], -1:1, T+2, T+2);
- %
- % Сделаем поправки для первой (нулевой) и последней (T+1-ой) функции.
- % Для этого вспомним вид этих функций.
- %
- % F_{0} = k_0 - k* = k(1) - k0;
- % F_{T+1} = 0 = const.
- %
- Jacc(1, 1) = 1; Jacc(1, 2:T+2) = zeros(1, T+1);
- Jacc(T+2, 1:T+1) = zeros(1, T+1); Jacc(T+2, T+2) = 1;
- det(Jacc(2:T+1,2:T+1))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement