T_H2O(i+1) = T_H2O(i)+h;
Okay, you are growing the vector T_H2O as you go, and if T_H2O(i) did not exist then you would not have gotten past that line. So we know that afterwards T_H2O(i+1) will exist.
f1 = @(T_H2O,h_Luft) cp_H2O * Massenstromverhaeltnis *(1+(X_sat(i)-X(i))*cp_H2O*T_H2O(i)./Ch(i));
This function accepts a parameter that for the purposes of the expression will be called T_H2O . This parameter will not necessarily have anything to do with the vector T_H2O that we established above will have at least at least i+1 elements. You need to mentally re-write the line as something like
f1 = @(FirstParameter,SecondParameter) cp_H2O * Massenstromverhaeltnis *(1+(X_sat(i)-X(i))*cp_H2O*FirstParameter(i)./Ch(i));
Whatever first parameter you pass in is going to be indexed at i.
l1 = f1((T_H2O(i) ),(h_Luft(i) ));
You extract a single element from T_H2O and pass that as the first parameter to f1, passing in a scalar there. But f1 wants to access that scalar at index i.