2014-02-21 5 views
0

У меня есть следующие данные, представляющие значения в течение 12 месяцев:Перестановка функция распределения Matlab

1. 0 
2. 253 
3. 168 
4. 323 
5. 556 
6. 470 
7. 225 
8. 445 
9. 98 
10. 114 
11. 381 
12. 187 

Как я могу сгладить эту линию вперед?

Мне нужно, чтобы через список последовательно любое значение, которое выше среднего (268), равномерно распределялось между оставшимися месяцами, но таким образом, чтобы оно производило как можно более гладкую линию. Мне нужно пройти с января по декабрь по порядку. В ожидании, я хочу, чтобы все лишние (пики) менялись в ближайшие месяцы, чтобы распределение было как можно более возможным (таким образом, чтобы впадины заполнялись в первую очередь). Таким образом, проблема заключается в том, чтобы в каждом пункте определить, что такое «избыток» за этот месяц, а во-вторых, как распределить это среди предстоящих месяцев.

Я использовал

p = find(Diff>0); 
n = find(Diff<=0); 
POS = Diff(p,1); 
NEG = Diff(n,1) 

, чтобы увидеть, где недобор/эксцессы против среднего значения существует, но не знает, как построить код, который будет перераспределять вперед путем выделения для «впадин» распределений в первую очередь. Аналогия заключается в том, что эти цифры представляют собой объемы сбора, и я должен давать урожай населению. Как перераспределить входящий сбор за год, чтобы я минимизировал избыток предложения/поставки? Я, очевидно, не могу дать ничего, чего не получил в конкретный месяц, если я не сохранил некоторый урожай с предыдущих месяцев. , например. Я начинаю в январе, я вижу, что я не могу дать ничего месяцам с февраля по декабрь, поэтому значение для Яна равно 0. В феврале у меня есть 253 - я настраиваю 253 вниз или все отдаю? Если да, то сколько? и где я перераспределяю избыток, который я обрезаю между Мар до Дек? И так далее и т. Д. Как мне это сделать, чтобы как можно более плавное (даже) распределение? В течение любого месяца новое значение, присвоенное этому месяцу, не может превышать текущее значение. Сумма за 12 месяцев должна быть равна до и после сглаживания. Поскольку первая позиция января всегда будет 0.

+0

У вас есть кривая фитинг набор инструментов? Возможно, вы захотите заглянуть в «гладкую» функцию. –

ответ

1

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

for n = 1:11 
    if y(n)>y(n+1); 
     y(n:n+1)=(y(n)+y(n+1))/2; 
    end 
end 

enter image description here

+0

Спасибо nkjt. Как я могу это повторить, пока не будет более сглаживания? Я думаю, что это даст мне распределение, в котором я нуждаюсь. – Mary

+0

Вы можете просто добавить цикл while: 'while any (diff (y) <- 0.01)'. (не '<0' из-за проблем с плавающей запятой). – nkjt

+0

Спасибо nkjt. Отлично. Прекрасно работает. – Mary

0

Мне не очень понятно, что вы просите ... Это звучит как обходной способ задать how to fit a straight line to data. Если это так, см. Ниже. В противном случае: пожалуйста, уточните немного больше, что вы хотите. Предоставьте исходные данные примера игрушек и ожидаемые выходные данные.

y = [ 0 253 168 323 556 470 225 445 98 114 381 187 ].'; 
x = (0:numel(y)-1).'; 

A = [ones(size(x)) x]; 

plot(... 
    x,  y, 'b.',... 
    x, A*(A\y), 'r') 
xlabel('Month'), ylabel('Data') 
legend('original data', 'fit') 

enter image description here

+0

Спасибо Роди. Я думаю, что решающая роль заключается в том, что в течение любого нового месяца новое значение, присвоенное этому месяцу, не может превышать текущее значение, и поэтому установка прямой линии в противном случае была бы решением. – Mary

+0

Я отредактировал вопрос с дополнительными пояснениями. – Mary

0

я не получаю именно то, что вы хотите, либо, может быть что-то простое, как это?

year= [0 253 168 323 556 470 225 445 98 114 381 187]; 
m= mean(year); 
total_before = sum(year) 
linear_year = linspace(0,m*2,12); 
toal_after= sum(linear_year) 

это дает строку, сумма остается той же, а линия идеально гладкая ...

+0

Спасибо Бен. Мое намерение состоит в том, чтобы максимально приблизить значения друг к другу, чтобы как можно более равномерно распределить их. Это дает все большее значение из месяца в месяц. Я снова отредактирую вопрос, чтобы уточнить. – Mary

Смежные вопросы