add / interpolate arrays of different length

3 vues (au cours des 30 derniers jours)
Marko
Marko le 16 Mai 2024
Réponse apportée : Tony le 17 Mai 2024
Hello community,
i have two array's tsol and ysol. Each array has the length of 9;
I have also an error estimate array errorEst. The error estimate has only 4 elements.
The four elements have a "time" length of 0.25.
The errorEst
tsol = linspace(0,1,9);
ysol = sin(tsol*pi);
errorEst = rand(1,4); %each bar has a length of 0.25;
bar(errorEst);
plot([0 0.25 0.5 0.75; 0.25 0.5 0.75 1],[errorEst; errorEst]/0.25,'k')
title('gradient of errorEst ')
xlabel('t')
ylabel('d errorEst / dt')
% who could i integrate this gradient of errorEst w.r.t the time tSol and
% add to ysol?
% the first part should be a continous (function/plot)
% is there an elegant solution, which is parallelizable?
the solution should be plottet:
%yp = ysol + errorEstLin;
%ym= ysol -errorEstLin;

Réponses (1)

Tony
Tony le 17 Mai 2024
Here's one way to do it by piece-wise integration by checking which interval you are.
tsol = linspace(0,1,9);
ysol = sin(tsol*pi);
errorEst = rand(1,4); %each bar has a length of 0.25;
bar(errorEst);
errorEst0 = 0; % need to specify initial error at t=0
errorEstLin = zeros(size(tsol));
for i = 1:numel(tsol)
if i == 1
errorEstLin(i) = errorEst0;
else
errorEstIntervalPrev = ceil(tsol(i-1) / 0.25 + 1e-12); %1e-12 to exclude lower bound of interval from interval
errorEstIntervalCurr = ceil(tsol(i) / 0.25);
errorEstLin(i) = errorEstLin(i - 1);
if errorEstIntervalCurr == errorEstIntervalPrev
errorEstLin(i) = errorEstLin(i) + (tsol(i) - tsol(i-1)) * errorEst(errorEstIntervalPrev);
else
errorEstLin(i) = errorEstLin(i) ...
+ (0.25 * errorEstIntervalPrev - tsol(i-1)) * errorEst(errorEstIntervalPrev) ...
+ sum(0.25 * errorEst(errorEstIntervalPrev + 1 : errorEstIntervalCurr - 1)) ...
+ (tsol(i) - 0.25 * (errorEstIntervalCurr - 1)) * errorEst(errorEstIntervalCurr);
end
end
end
yp = ysol + errorEstLin;
ym= ysol -errorEstLin;
plot(tsol', [ysol ; yp ; ym ; errorEstLin]')
legend({'ysol', 'yp', 'ym', 'errorEstLin'})

Catégories

En savoir plus sur Logical dans Help Center et File Exchange

Produits


Version

R2023a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by