2016-02-24 2 views
2

У меня есть код (который требует ввода большого количества данных пользователем), который даст мне матрицу с ошибкой (скажем А), которую я должен использовать для решения системы ОДУ X ' = АХ. Как включить эту матрицу A в файл функции (файл .m) ode45. Если бы я включил код в функции файл, как показано ниже:Входная матрица в файл функции ode45

function xp=g_test(t,x); 
k=input('something'); 
A=some manipulation of inputs; 
xp=A*x; 
end 

Matlab просит ввод на каждый временный шаге (обычно моя проблема имеет 30k временные шагов). Итак, как мне включить/передать матрицу A функции?

ответ

3

Вы можете создать функцию, которая возвращает function handle:

function odeFcn = makeODE(a,b,c) 
    A = some_function(a, b, c); 
    odeFcn = @(t,x) A*x; 
end 

Теперь вы можете вызвать ode45 с входными матрицами a, b, c:

outputVector = ode45(makeODE(a,b,c), [t0, t1], x0); 

Вдохновение берется из ответа gnovice в here.