Yahoo奇摩知識+將於 2021 年 5 月 4 日 (美國東部時間) 終止服務。自 2021 年 4 月 20 日 (美國東部時間) 起,Yahoo奇摩知識+服務將會轉為唯讀模式。其他Yahoo奇摩產品與服務或您的Yahoo奇摩帳號都不會受影響。如需關於Yahoo奇摩知識+ 停止服務以及下載您個人資料的資訊,請參閱說明網頁。

用VBA取得折線圖折角位置

http://b54.in/9sut

折線圖如上,X座標是公里數,Y軸是+500~-500的折線圖,如果要用VBA計算折角的所在公里數,要用怎樣計算比較好

因為Y軸的值是波動的,X軸的值不等長,所以無法用一段X軸的值取MIN或MAX的方式來計算

是否有大大可以給的方向,好研究該如何計算比較好

已更新項目:

感謝Lopez,我試看看

因為資料其實是上下波動在變化,1,0,1,2,3,2,3,4

我在想可能要先算一次平均數,再從平均數換成斜率

2 個已更新項目:

Lopez您的方向可以找到我想要的點,只是我目前的困境在於

圖表看到的直線並非是直線,是一個震盪的折線,只是上下震盪的幅度沒有折線來的大

直接找斜率會失敗,目前試過用平均值或是linest都失敗,還要找個將震盪的折線先拉稱的方式,再找斜率

3 個已更新項目:

193.35140

193.35140

193.35140

193.35141

193.3501141

193.3501141

193.3502142

193.3502142

193.3503142

193.3503142

193.3504149

193.3504150

193.3504143

193.3504150

193.3505144

193.3505144

193.3506151

193.3506151

193.3507144

193.3507145

193.3508145

193.3508145

193.3508145

4 個已更新項目:

數字的排列大概如上,最後三碼是Y軸,其他是X軸,後來發現第四碼重覆所以造成斜率沒辦法算

所以先取X軸的平均值,後來再用斜率*斜率就可以找到折角了,感謝兩位大大的意見

麻煩Lopez轉到回答區吧!

2 個解答

評分
  • Lopez
    Lv 7
    6 年前
    最佳解答

    可以考慮引入斜率的概念:

    m = ( Yn - Yn-1 ) / ( Xn - Xn-1 )

    m' = ( Yn+1 - Yn ) / ( Xn+1 - Xn )

    若 m * m' < 0 , 則 Xn 即為 波峰 或 波谷 所在的公里數

    n = n + 1

    原因:

    波峰: m > 0 , m' < 0

    波谷: m < 0 , m' > 0

    2015-03-08 14:56:32 補充:

    你給的圖看不出實際數據如何分佈,但我大概猜得出你的意思.

    若要忽略小幅震盪,斜率的方法的確不行,

    可以換個方法試看看:

    每K個視為一組(例如,K=5,先嘗試再調整)

    引入廻歸直線的概念:

    Y = α + βx + ε

    β 的點估計值為 b

    b

    = SSxy / SSxx

    = Σ(x - xbar)(y - ybar) / Σ(x - xbar)^2

    = ( nΣxy - ΣxΣy ) / [ nΣx^2 - (Σx)^2 ]

    2015-03-08 15:13:07 補充:

    b 代表迴歸直線的斜率估計值,

    所以用此導出式:

    b = ( nΣxy - ΣxΣy ) / [ nΣx^2 - (Σx)^2 ]

    寫Excel VBA 程式,

    找出b值接近0的各組,應該很接近極值所在.

    (以微積分的概念就是: 極值可能發生在 f ' (c) = 0 的位置)

    2015-03-08 15:22:04 補充:

    或是你把前3個Cycle的 x, y 值提供給我研究看看.

    (雖然程式設計並非我的專長,但可以試試看)

    可否將圖上前3個Cycle ( x = 164.915 ~ 164.628 )

    存成Excel檔,

    A欄放x值, B欄放對應的y值,

    然後將Excel檔壓縮成 .zip檔,

    再PO到以下網址:

    http://www.funp.net/

    完成後,請提供該檔的下載網址給我研究看看.

    2015-03-10 16:26:26 補充:

    我將意見欄所述,大略整理至此:

    可以考慮引入斜率的概念,程式演算法大致如下:

    m = ( Yn - Yn-1 ) / ( Xn - Xn-1 )

    m' = ( Yn+1 - Yn ) / ( Xn+1 - Xn )

    若 m * m' < 0 , 則 Xn 即為 波峰 或 波谷 所在的公里數.

    n = n + 1

    next n

    原因:

    波峰: m > 0 , m' < 0

    波谷: m < 0 , m' > 0

    但因為實際數據有小幅震盪,要忽略,

    此外x軸的數據有重複,造成斜率計算的分母為0,

    (重複的原因應該是因為精確度只到小數四位,且在微小時間差取資料)

    所以斜率的方法還要調整一下.

    至於調整的方法,版主已自行解決了,

    ( 取小組Xbar, 再用 m * m' )

    所以意見欄的另一種方法,迴歸直線計算斜率點估計值,

    暫時就不需要了...

  • ?
    Lv 7
    6 年前

    用鄰近點的變化,便可判斷轉折點。

    在上升區段,若下一點的Y值變小,該點為轉折。

    在下降區段,若下一點的Y值變大,該點為轉折。

    2015-03-08 20:49:22 補充:

    小震盪的界定是幾個X軸單位以內?

    針對小震盪的情境,還是可以用個人前述的鄰近比對法找出折點。

還有問題?馬上發問,尋求解答。