Прежде всего, F должен быть вектором столбца при использовании ode45. Вы никогда не получите результат, установив F_initial = eye (9), вам понадобятся F = единиц (9,1).
Кроме того, ode45 (документация здесь, проверьте секцию tspan) не обязательно оценивает вашу функцию на заданных вами временных шагах, поэтому вы не можете предварительно вычислить матрицу A. Здесь я собираюсь предположить, что F - это вектор-столбец, а A - это матрица, которая воздействует на него и может быть вычислена на каждом временном шаге. Если это так, то мы можем просто включить A в функцию, переданную ode45, например:
F_initial = ones(9,1);
dt = 0.01;
tspan = 0:2/dt:2;
[t, F] = ode45(@(t,F) foo(t, F, Ainput), tspan, F_initial);
function f = foo(t, F, Ainput)
A = calculate_A(t, Ainput);
f = A*F;
end
function A = calculate_A(t, Ainput)
%some logic, calculate A based on inputs and timestep
A = ones(9,9)*sqrt(t)*Ainput;
end
@ (x) f (x, y) в основном создает новую анонимную функцию , которая позволяет вам рассматривать y как константу в вычислениях.
Надеюсь, это полезно, дайте мне знать, если я что-то неправильно понял или у вас есть другие вопросы.