У меня есть много наборов данных за тот же период времени с отметкой 300 секунд. Наборы, которые заканчиваются до конца периода наблюдения (здесь я усеченный его от 0 до 3000 секунд) имеют пренебрежимо малые в остальных пространствах:Решите для независимой переменной между точками данных в MATLAB
x = [0;300;600;900;1200;1500;1800;2100;2400;2700;3000];
y(:,1) = [4.65;3.67;2.92;2.39;2.02;1.67;1.36;1.07;NaN;NaN;NaN];
y(:,2) = [4.65;2.65;2.33;2.18;2.03;1.89;1.75;1.61;1.48;1.36;1.24];
y(:,3) = [4.65;2.73;1.99;1.49;1.05;NaN;NaN;NaN;NaN;NaN;NaN];
Я хотел бы знать, в какое время каждого набор данных будут достигают точки, где y равно определенному значению, в этом случае y = 2,5
Сначала я попытался найти ближайшее значение y до 2,5, а затем используя связанное время, но это не очень точно (точки должны упасть на одну и ту же горизонтальную линию):
ybreak = 2.5;
for ii = 1:3
[~, index] = min(abs(y(:,ii)-ybreak));
yclosest(ii) = y(index,ii);
xbreak(ii) = x(index);
end
Затем я попытался сделать линейную интерполяцию между точками данных, а затем решением для й при у = 2,5, но не был в состоянии сделать эту работу:
Сначала я устранил пренебрежим малый (что это кажется, что там должна быть более простой способ сделать):
for ii = 1:3
NaNs(:,ii) = isnan(y(:,ii));
for jj = 1:length(x);
if NaNs(jj,ii) == 0;
ycopy(jj,ii) = y(jj,ii);
end
end
end
Затем попытался фитинга:
for ii = 1:3
f(ii) = fit(x(1:length(ycopy(:,ii))),ycopy(:,ii),'linearinterp');
end
И получить следующее сообщение об ошибке:
Error using cfit/subsasgn (line 7)
Can't assign to an empty FIT.
Когда я пытаюсь фитинга вне цикла (только для одного набора данных), он отлично работает:
f = fit(x(1:length(ycopy(:,1))),ycopy(:,1),'linearinterp');
f =
Linear interpolant:
f(x) = piecewise polynomial computed from p
Coefficients:
p = coefficient structure
Но я тогда еще не может решить п (x) = 2,5, чтобы найти время, в течение которого y = 2,5
syms x;
xbreak = solve(f(x) == 2.5,x);
Error using cfit/subsref>iParenthesesReference (line 45)
Cannot evaluate CFIT model for some reason.
Error in cfit/subsref (line 15)
out = iParenthesesReference(obj, currsubs);
Любые советы или мысли о Эти подходы к этому будут высоко оценены. Мне нужно сделать это для многих наборов данных, все из которых имеют различное количество значений NaN.