2015-08-23 46 views
0

我需要你的幫助。這個問題迫使我堅果: 我有一個Android應用程序,你可以在sqlite數據庫中存儲你的體重與日期。 我有一個android遊標與數據庫值。它包含日期(如字符串,如「30.12.2005」)和浮點值(權重)。如何爲一個恆定的時間框架建立一個插值數組?

光標可能是這樣的:

2006年3月1日 - 83,5 2006年5月1日 - 82.5 09.01.2006 - 81.8 01.03.2006 - 82,0 2006年3月14日 - 81,6 2006年5月17日 - 81,2 2006年10月22日 - 81,1 2007年1月24日 - 81,0 2007年1月27日 - 80.5

我想在androidPlot diagramm顯示插值。 現在我正在建立7個DB條目中的插入值 這個工程,但我希望時間軸有恆定的時間框架,如14天或一個月。 (androidplot有一個timeSeries,可能很容易使用...我必須檢查。)

該算法應該遍歷遊標,並檢查哪些條目是在14天的時間範圍內,插值它們並保存值在一個單獨的數組中。 萬一有在14天的時間內沒有任何價值,應該插在最近的兩個值....

我不知道該算法應該怎麼樣子...... 這可能是一個好辦法算法?

再見 菲爾

+0

從插值方法自然分開,一切看起來相當微不足道的實施。你正在尋找簡單的線性插值,還是某種平滑擬合? –

回答

0

這是我的時刻使用用於建立一個數組,並計算與內插值

Cursor cursor = ((MainActivity) getActivity()).datasource.getCursor(false); 
    int length = cursor.getCount(); 
    Number[] seriesWeights = new Number[length]; 
    String[] LABELS = new String[length]; 

    int i = 0; 
    while (cursor.moveToNext()) { 
     seriesWeights[i] = cursor.getFloat(2); 
     LABELS[i] = cursor.getString(1); 
     i++; 
    } 

    //------ neues array mit interpolierten werten bauen 
    int interp = 7; // diesen wert anpassen zum interpolieren 

    int addNewDateIndex = (int) (interp/2f); 
    int newLength = (int)length/interp; 
    Number[] seriesWeightsInterp = new Number[newLength]; 
    String[] labelsInterp = new String[newLength]; 
    float addiert, mw; 
    int newIndex = 0; 
    for (int j = 0; j + interp < length; j = j + interp) { 
     addiert = 0; 
     for (int z = 0; z < interp; z++) addiert = addiert + (float)seriesWeights[j + z]; 
     mw = addiert/interp; 
     seriesWeightsInterp[newIndex] = (Number)mw; 
     labelsInterp[newIndex]   = LABELS[j + addNewDateIndex]; 
     newIndex++; 
    } 

此陣列內插值,而不日期之間尊重距離的第二陣列的代碼。 我想要的是通過在「恆定」時間範圍內插入它們來減少數據量,如月或14天.... 所以算法必須檢查日期是否在恆定週期內,並計算僅限插值對於恆定的時間範圍內的值...

這是可以理解的嗎?

再見 菲爾

相關問題