суббота, 5 апреля 2014 г.

Freemat. Дифференциальные уравнения

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). Указанные числа являются значениями по умолчанию, при необходимости, их можно изменить. Данная структура также позволяет настраивать обработчик событий и функцию проекции, но копать так глубоко мне не приходилось.

Комментариев нет:

Отправить комментарий