Freemat умеет решать только обыкновенные дифференциальные уравнения первого порядка, и только одним способом - методом Рунге-Кутта. Чтобы им воспользоваться, нужно представить уравнение в виде y'(t) = f(t,y) и задать начальное условие y(0) = y0. Сам расчёт производится функцией ode45:
[t,y] = ode45(f(t,y), tsp, y0, option),
где f(t,y) - функциональная связь производной со значением аргумента и функции,
tsp - интервал t, на котором производится расчёт,
y0 - значение функции в начальной точке,
option - дополнительные параметры.
В данном примере рассчитывается значение функции y(t), заданной уравнением y'(t)=2y + sin(t), на интервале от 1 до 2 со значение в начальной точке y(1) = 1. В результате работы функции будет создана длинная распечатка полученных точек (от которой, похоже, не избавиться). Удобнее всего представить результат в виде графика с помощью функции plot(t,y).
Freemat позволяет хранить информацию в виде структуры данных (в понимании языка С). Необязательный параметр option функции ode45 именно структурой и является. Его можно задать следующим образом:
option = struct('AbsTol', 1e-6, 'RelTol', 1e-3, 'MaxStep', (tsp(2)-tsp(1))/10, 'InitialStep', MaxStep/100)
Здесь AbsTol - абсолютная погрешность (1e-6), RelTol - относительная погрешность (1e-3), MaxStep - максимальная величина шага ((tsp(2)-tsp(1))/10), InitialStep - начальная величина шага (MaxStep/100). Указанные числа являются значениями по умолчанию, при необходимости, их можно изменить. Данная структура также позволяет настраивать обработчик событий и функцию проекции, но копать так глубоко мне не приходилось.
Комментариев нет:
Отправить комментарий