Качество кода — на уровне студенческой лабораторной. Причём очень хреновой.
Программа решает четыре системы.
y = f0(t)
y' = f1(t, y)
y'' = f2(t, y, y')
y''' = f3(t, y, y'')
1. Если уж говорить о методе Эйлера — в программе ошибка.
y[1] = y[1] + delt * y[2];
Тут нужно старое значение y[2], а не новое.
2. Функцию eiler стоило бы обозвать eulerStep, заодно убрав лишние параметры.
3. Автор не знает такой концепции, как процедурный тип aka callback, поэтому работа с правой частью у него вышла вот через такую задницу.
4. В промышленном коде метод решения ОДУ я бы вынес в отдельную процедуру, с callback’ами на правую часть и на потребителя результата. Причём внешнее (доступное пользователю библиотеки) именование должно быть такое, чтобы её пользователь мог ею воспользоваться, даже если он не читал статью, по которой библиотеку писали. Так что смотрите, какие имена являются стандартизированными, понятными по любому учебнику, а какие стоит прояснить. Внутреннее именование — это уж думайте сами, научный код обычно сложен, и его постоянно приходится сличать со статьёй. Поэтому имена как в статье — для научного кода не WTF.
5. Не слишком удачно разделена ответственность между функцией правой части и функцией шага по Эйлеру. Это привело к ограничению — программа может решать только ОДУ y{n} = f(t, y, y', ..., y{n−1}).