Hello! I am trying to do a function that basically does this:
getInterpolationArrays(2,8)
x = [1, 3, 5, 7]
xp = [2, 4, 6, 8]
getInterpolationArrays(5,8)
x = [1, 6]
xp = [2, 3, 4, 5, 7, 8]
The array xp is like a "complement" of x. I writed the function below, but i get the following warning: Variable xp appears to change size on every loop iteration. I dont know how to solve it. Thank you for the response!
function [x, xp] = getInterpolationArrays(days, size)
x = 1:days:size-1;
n = length(x);
xp = [];
for i=1:size
if(ismember(i,x) == 0)
xp = [xp, i];
end
end
end

 Akzeptierte Antwort

Voss
Voss am 7 Jun. 2022
Bearbeitet: Voss am 7 Jun. 2022

1 Stimme

It's only a warning (not an error), so you don't have to solve it.
getInterpolationArrays is written such that xp is constructed element-by-element, so of course xp changes size as the loop iterates.
If you want to rewrite getInterpolationArrays to avoid that warning, you could do it like this:
[x,xp] = getInterpolationArrays(2,8)
x = 1×4
1 3 5 7
xp = 1×4
2 4 6 8
[x,xp] = getInterpolationArrays(5,8)
x = 1×2
1 6
xp = 1×6
2 3 4 5 7 8
function [x, xp] = getInterpolationArrays(days, size)
x = 1:days:size-1;
xp = 1:size;
xp = xp(~ismember(xp,x));
end

2 Kommentare

Matías Bozo Pizarro
Matías Bozo Pizarro am 7 Jun. 2022
Thank you! I didn't find a way to make it so simple.
Voss
Voss am 7 Jun. 2022
You're welcome!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by