Я пытаюсь проанализировать свои данные, используя смесь python и matlab, но я застрял и не смог найти ни одного обсуждения, которое решило бы мою проблему. Мои данные состоят из измерений температуры и тока, которые записываются одновременно, но с использованием двух разных устройств. После этого эти измерения сопоставляются с использованием метки времени каждого измерения, чтобы получить «график необработанных данных». Однако значения тока различаются при одной и той же температуре в зависимости от того, был ли образец нагрет или охлажден. Теперь я хотел бы разделить значения нагрева и охлаждения для измерений тока и вычислить среднее и стандартное отклонение для всех токов при одной температуре для охлаждения и нагрева соответственно.
То, что я делаю до сих пор, является первымискать все значения, относящиеся к одной и той же температуре, независимо от того, является ли это циклом охлаждения или нагрева. Это приводит к довольно большим значениям стандартного отклонения. На двух рисунках показан простой пример того, как выглядят мои данные.
На первом рисунке показаны значения температуры в зависимости от количества точек данных и отмечены все значения, относящиеся к этой температуре:
![The first figure](https://i.stack.imgur.com/fsFFm.png)
На втором рисунке показаны текущие данные с отмеченными значениями, которые соответствуют температуре.
![The second figure](https://i.stack.imgur.com/Dbpyx.png)
Температура всегда поддерживается постоянной в течение 180 с, а затемувеличился или уменьшился на 10 ° C. В течение 180 с проводится несколько измерений тока, что приводит к нескольким точкам данных на температуру за цикл. Цикл повторяется несколько раз (здесь не показано). Чтобы упростить пример здесь, я просто использовал простые числа вместо реальных значений температуры и тока. Повторение того же номера указывает на несколько измерений при одной температуре. В действительности текущие значения не являются полностью стабильными, но колеблются вокруг определенного значения (которое я также игнорировал здесь).
Код, который делает это, выглядит следующим образом:
Пример данных:
Test_T = [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1] ;
Test_I = [5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9,7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4] ;
Код:
Test_T_sel =Test_T;
Test_I_sel = Test_I;
ll = 0;
ul = 2;
ID = Test_T_sel <ul & Test_T_sel >ll;
Test_x_avg = mean(Test_T_sel(ID));
Test_y_avg = mean(Test_I_sel(ID));
figure('Position', [100 100 700 500]);
plot(Test_T_sel);
hold on;
plot(find(ID), Test_T_sel(ID), '*r');
ylabel('Temperature [°C]')
figure('Position', [900 100 700 500]);
plot(Test_I_sel);
hold on;
plot(find(ID), Test_I_sel(ID), '.r');
ylabel('Current [µA]')
И Test_T
содержит 90 значений, ступенчато увеличиваясь с 1 до 5 каждые 10 значений, в то время как Test_I
содержит текущие значения. Как вы можете видеть для Temperature = 1°C
, текущие значения равны 5 или 4. Теперь я хотел бы получить вектор, который содержит только значения T
и соответствующее значение тока, если T
увеличивается, и второй вектор длятекущие значения были T
уменьшается.
Я думал использовать команду if else, но на самом деле я не знаю, как это реализовать. Может быть, что-то подобное может сработать:
if T2 == T1 and T2-T1 <= 0.2
«принять соответствующие значения I» (это верно, когда температура стабильна и изменяется только на 0,2 ° C)
if T2-T1 > 0.2
«игнорироватьI значения до "T2 == T1
снова and T2-T1 <= 0.2
(это будет либо более сильное изменение при одной температуре, либо указывает на изменение температуры и ждет, пока T снова станет постоянной)
Но теперь мне все еще нужно различать, еслитемпература обычно увеличивается или уменьшается после 5 измерений.
if T2 > T1
, T увеличивается (Test_T_heat
), и соответствующие значения I должны быть записаны в векторе Test_I_heat
if T2 < T1
, T уменьшается (Test_T_cool
), и соответствующие значения I должны быть записаны в векторе Test_I_cool
Для приведенного выше примера это должно выглядеть примерно так:
Test_T_heat: [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5];
Test_I_heat: [5,5,5,5,5,6,6,6,6,6,7,7,7,7,7,8,8,8,8,8,9,9,9,9,9];
Test_T_cool: [4,4,4,4,4,3,3,3,3,3,2,2,2,2,2,1,1,1,1,1] ;
Test_I_cool: [7,7,7,7,7,6,6,6,6,6,5,5,5,5,5,4,4,4,4,4] ;
Как изменить "код", чтобы я получал такие векторы?