Существует аналитическое решение вида (x (t), x '(t)) = exp (A t) * (x (0), x' (0)), где A - матрица 2x2.Если вам не нужно использовать ODE-решатель Matlab, это верный способ найти временную эволюцию системы.
Чтобы найти A, напишите свою систему в этой форме
- X = (x, x ')
- dX = A * X
- X = expm (A t) X (0)% обратите внимание, что для взятия экспоненты матрицы необходимоиспользовать expm, иначе вы просто получите экспоненту каждого элемента в отдельности
, так что здесь A = [0 1;-k / m -c / m]
установка k / m = 1 и c / m = 0,1, мы можем написать
t = linspace(0,20, 1000);
A = [0 1; -1 -0.1];
for j = 1:length(t); x(j,:) = expm([0 1; -1 -0.1]*t(j))*[1;0]; end
plot (t,x)
legend ('position', 'velocity');
title ('underdamped spring starting at y = 1; y'' = 0')