Я пытаюсь решить систему ODE, и мое входное возбуждение является функцией времени.ODE с временным входом, как ускорить Up без использования интерполяции?
Я использовал interp1
внутри функции интеграции, но это не похоже на очень эффективный способ сделать это. Я знаю, что это не так, потому что как только я изменю входное возбуждение на функцию sin
, которая не требует вызова interp1
внутри функции, я получаю гораздо более быстрые результаты. Но делая интерполяцию, каждый шаг занимает примерно 10-20 раз дольше, чтобы сходиться. Итак, есть ли лучший способ решения ODE для произвольного зависящего от времени возбуждения, без необходимости делать интерполяцию или некоторые другие трюки для ускорения?
Я просто скопировать модифицированную версию simple example from The MathWorks здесь:
входного возбуждением является gradually increasing sin
функцией, но после того, как через некоторое время он становится constant amplitude sin
функции.
Dt = 0.01; % sampling time step
Amp0 = 2; % Final Amplitude of signal
Dur_G = 10; % Duration of gradually increasing part of signal
Dur_tot = 25; % Duration of total signal
t_G = 0 : Dt : Dur_G; % time of gradual part
A = linspace(0, Amp0, length(t_G));
carrier_1 = sin(5*t_G); % Unit Normal Signal
carrier_A0 = Amp0*sin(5*t_G);
out_G = A.*carrier_1; % Gradually Increasing Signal
% Total Signal with Gradual Constant Amplitude Parts
t_C = Dur_G+Dt:Dt:Dur_tot; % time of constant part
out_C = Amp0*sin(5*t_C); % Signal of constant part
ft = [t_G t_C]; % total time
f = [out_G out_C]; % total signal
figure; plot(ft, f, '-b'); % input excitation
function dydt = myode(t,y,ft,f)
f = interp1(ft,f,t); % Interpolate the data set (ft,f) at time t
g = 2; % a constant
dydt = -f.*y + g; % Evaluate ODE at time t
tspan = [1 5]; ic = 1;
opts = odeset('RelTol',1e-2,'AbsTol',1e-4);
[t,y] = ode45(@(t,y) myode(t,y,ft,f), tspan, ic, opts);
figure;
plot(t,y);
Обратите внимание, что я объяснил только первую часть моей проблемы выше, которая решает систему постепенно возрастающей sin
функции. Во второй части мне нужно решить ее для произвольного входного возбуждения (например, входного сигнала ускорения заземления).
Thank you Horchler. Мне нужно больше объяснить проблему, но эта область комментариев ограничена словами, поэтому я должен опубликовать ее как ответ? О, ладно, я отредактирую свой вопрос ... Не могли бы вы проверить его? –
@IsmailBahadirKuzucu: У меня нет времени, чтобы посмотреть ваш обновленный вопрос прямо сейчас. У меня может быть время позже на этой неделе/в выходные. – horchler
Да, я понимаю Хорчлера. Я с нетерпением жду, когда вы узнаете о проблеме. Спасибо за ваше время. –