Я пытаюсь интерполировать кривые в промежутках некоторых уже существующих кривых, используя matlab (и функцию interp1).
Начало редактирования 1
У меня уже есть данные 5 кривых крутящего момента на оборотах в минуту, которые я получил с помощью ряда симуляций для каждой кривой.Так как время моделирования драгоценно, я хотел бы сэкономить время с помощью интерполяции кривых, которые «заполняют разрыв» между уже существующими.
Я ищу формуследующее:
Дальнейшие мысли обо мне ниже.
Конец редактирования 1
Я пыталсявыполните шаги из вопроса в теме Интерполяция между двумя кривыми (matlab) , но, похоже, он не работает с моим кодом.Я не уверен, что код действительно применим, поскольку кривые могут перекрываться ...
Я попытался отредактировать код по ссылке выше, как показано ниже:
% Save the data in one array each. The original data is stored in the
% arrays "x/yOriginal" row-wise.
curve1_data = [xOriginal(:,1) yOriginal(:,1)];
curve2_data = [xOriginal(:,2) yOriginal(:,2)];
% This was to try if the code from the link works
yy = [0:1:60];
xx1 = interp1(curve1_data(:,2),curve1_data(:,1),yy,'spline');
xx2 = interp1(curve2_data(:,2),curve2_data(:,1),yy,'spline');
m = 3; % Curve_Offset
mm(:,m) = xx1 + (xx2-xx1)*(m/(8750-5000));
% With the following I tried to interpolate over x
xx = (xOriginal(1,1):1:xOriginal(1,2));
yy1 = interp1(curve1_data(:,1),curve1_data(:,2),xx,'spline');
yy2 = interp1(curve2_data(:,1),curve2_data(:,2),xx,'spline');
m = 3; % Curve_Offset
% From the original code:
mm(:,m) = xx1 + (xx2-xx1)*(m/(8750-5000));
% Interpolation over x
yINT = yy1 + (yy2-yy1)*(m/8750-5000);
Ни один из методов интерполяции не работал, значения y либо на 90% отрицательны (с кодом из ссылки), либо слишком высоки (10e8 с интерполяцией по x).
То, что я ожидалбыло то, что он создает кривую, немного менее крутую, чем кривая «налево», и немного круче кривой «направо».
Мои дальнейшие мысли:
Существующие кривые являются произведением больших трехмерных массивов.То есть, возможно, это более удобный способ интерполировать массивы и , а затем «считывать» кривые Torque-over-rpm-Curves.С другой стороны, я не вижу способа интерполировать между двумя массивами 1001 на 7001 на 5 ... Более того, для следующих шагов с программой, интерполяция кривой должна быть достаточно хорошей (этонеобходимо иметь более чем одну интерполированную кривую между двумя существующими кривыми), что еще более усложняет задачу.