I would like to know how to do this using Integral? Here is how I would do it - maybe this is the longhand / longwinded method, but I would like to see some better suggestions.
It is probably easier to see the method in Excel first with the LINE function and Named ranges. I assumed that the function is logarithmic. I outlined steps [1.] - [5.] 
This VBA code then essentially replicates the Excel method using a function to pass 2 arrays, periods, and a return array that can be written to a range
Sub CallingProc() Dim Periods As Long, returnArray() As Variant Dim X_Values() As Variant, Y_Values() As Variant Periods = 4 ReDim returnArray(1 To Periods, 1 To 2) With Sheet1 X_Values = Application.Transpose(.Range("A2:A11")) Y_Values = Application.Transpose(.Range("B2:B11")) End With FGraph X_Values, Y_Values, Periods, returnArray 'pass 1D array of X, 1D array of Y, Periods, Empty ReturnArray End Sub Function FGraph(ByVal x As Variant, ByVal y As Variant, ByVal P As Long, ByRef returnArray As Variant) Dim i As Long, mConstant As Double, cConstant As Double 'calc cumulative Y and take Ln (Assumes Form of Graph is logarithmic!!) For i = LBound(y) To UBound(y) If i = LBound(y) Then y(i) = y(i) Else y(i) = y(i) + y(i - 1) End If x(i) = Log(x(i)) Next i 'calc line of best fit With Application.WorksheetFunction mConstant = .LinEst(y, x)(1) cConstant = .LinEst(y, x)(2) End With 'redim array to fill for new Periods ReDim returnArray(1 To P, 1 To 2) 'Calc new periods based on line of best fit For i = LBound(returnArray, 1) To UBound(returnArray, 1) returnArray(i, 1) = UBound(y) / P * i If i = LBound(returnArray, 1) Then returnArray(i, 2) = (Log(returnArray(i, 1)) * mConstant) + cConstant Else returnArray(i, 2) = ((Log(returnArray(i, 1)) * mConstant) + cConstant) - _ ((Log(returnArray(i - 1, 1)) * mConstant) + cConstant) End If Next i 'returnArray can be written to range End Function
EDIT:
This VBA code now calculates the linear trend of points on both sides of the new period reduction. Data is returned in a 2dimension array named returnArray
Sub CallingProc() Dim Periods As Long, returnArray() As Variant Dim X_Values() As Variant, Y_Values() As Variant Periods = 4 ReDim returnArray(1 To Periods, 1 To 2) With Sheet1 X_Values = Application.Transpose(.Range("A2:A11")) Y_Values = Application.Transpose(.Range("B2:B11")) End With FGraph X_Values, Y_Values, returnArray 'pass 1D array of X, 1D array of Y, Dimensioned ReturnArray End Sub Function FGraph(ByVal x As Variant, ByVal y As Variant, ByRef returnArray As Variant) Dim i As Long, j As Long, mConstant As Double, cConstant As Double, Period As Long Period = UBound(returnArray, 1) 'calc cumulative Y For i = LBound(y) + 1 To UBound(y) y(i) = y(i) + y(i - 1) Next i 'Calc new periods based on line of best fit For i = LBound(returnArray, 1) To UBound(returnArray, 1) returnArray(i, 1) = UBound(y) / Period * i 'find position of new period to return adjacent original data points For j = LBound(x) To UBound(x) If returnArray(i, 1) <= x(j) Then Exit For Next j 'calc linear line of best fit between existing data points With Application.WorksheetFunction mConstant = .LinEst(Array(y(j), y(j - 1)), Array(x(j), x(j - 1)))(1) cConstant = .LinEst(Array(y(j), y(j - 1)), Array(x(j), x(j - 1)))(2) End With returnArray(i, 2) = (returnArray(i, 1) * mConstant) + cConstant Next i 'returnarray holds cumulative % so calc period only % For i = UBound(returnArray, 1) To LBound(returnArray, 1) + 1 Step -1 returnArray(i, 2) = returnArray(i, 2) - returnArray(i - 1, 2) Next i 'returnArray now holds your data End Function
Return:
collapsed
1 38.75%
2 34.35%
3 16.95%
4 9.95%