Отдельные значения y в зависимости от того, увеличивается или уменьшается значение x - PullRequest
0 голосов
/ 29 октября 2019

Я пытаюсь проанализировать свои данные, используя смесь python и matlab, но я застрял и не смог найти ни одного обсуждения, которое решило бы мою проблему. Мои данные состоят из измерений температуры и тока, которые записываются одновременно, но с использованием двух разных устройств. После этого эти измерения сопоставляются с использованием метки времени каждого измерения, чтобы получить «график необработанных данных». Однако значения тока различаются при одной и той же температуре в зависимости от того, был ли образец нагрет или охлажден. Теперь я хотел бы разделить значения нагрева и охлаждения для измерений тока и вычислить среднее и стандартное отклонение для всех токов при одной температуре для охлаждения и нагрева соответственно.

То, что я делаю до сих пор, является первымискать все значения, относящиеся к одной и той же температуре, независимо от того, является ли это циклом охлаждения или нагрева. Это приводит к довольно большим значениям стандартного отклонения. На двух рисунках показан простой пример того, как выглядят мои данные.

На первом рисунке показаны значения температуры в зависимости от количества точек данных и отмечены все значения, относящиеся к этой температуре:

The first figure

На втором рисунке показаны текущие данные с отмеченными значениями, которые соответствуют температуре.

The second figure

Температура всегда поддерживается постоянной в течение 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] ;

Как изменить "код", чтобы я получал такие векторы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...