Используйте якобиан внутри lsode в октаве - PullRequest
0 голосов
/ 20 февраля 2019

Я пытаюсь решить простой нелинейный генератор с помощью lsode, используя якобиан.Это скрипт, который вызывает функцию и якобиан:

x_0 = [1, 0];
t = linspace(0,10,1000);
[X] = lsode([@fcn, j], x_0, t);
figure(1);
plot(t,X(:,1));

Функция fcn:

function f = fcn(x,t)
  c = 5;
  m = 10;
  k = 10;
  if x(1) < 0
    k = 10e9;
  endif
  f1 = x(2);
  f2 = -c/m*x(2)-k/m*x(1);
  f = [f1; f2];
endfunction

и якобиан:

function jac = j(x,t)
  c = 5;
  m = 10;
  k = 10;
  jac = [0, 1; -k/m, -c/m];
endfunction

Я получаюэта ошибка:

error: horizontal dimensions mismatch (1x1 vs 2x2)
error: called from
    script at line 5 column 4
...