add / interpolate arrays of different length

1 Ansicht (letzte 30 Tage)
Marko
Marko am 16 Mai 2024
Beantwortet: Tony am 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;

Antworten (1)

Tony
Tony am 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'})

Produkte


Version

R2023a

Community Treasure Hunt

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

Start Hunting!

Translated by