我試圖用F(x)= 1 /(ax^2 + bx + c)的形式來擬合一些逆拋物線。擬合反拋物線。不能達到最小二乘法解析表達式
我的目標是在C++中編寫一個函數,該函數需要一組10-30個點,並將它們擬合到反演拋物線。
我開始嘗試使用最小二乘法獲得解析表達式,但無法獲得結果。我嘗試了手工(有點瘋狂),然後我試着解析a,b和c的表達式,但是mupad並沒有給我一個結果(我對Matlab的mupad很新穎,所以也許我沒有做到這一點) 。 我不知道如何解決這個問題。
我可以得到這個特定問題的解析表達式嗎?我也看到了一般最小二乘擬合的算法,但我不需要一個如此複雜的算法,我只需要它用於這個等式。 如果不是,StackOverflow人員將如何解決問題?
如果需要,我可以發佈公式和我嘗試過的小型Mupad代碼,但我認爲是不必要的。
編輯:一些例子
對不起形象是有點混亂,但它是我需要的東西。 數據呈藍色(此數據特別嘈雜)。我只需要使用垂直線之間的數據(左邊的一堆數據和右邊的一堆數據)。
適合的結果是在紅線。
所有這些都是用matlab編寫的,但我需要用C++編寫。
我會嘗試發佈的一些數據...
編輯2:我居然做了件在Matlab如下(不實際的代碼):
create linear system Ax = b, with
A = [x² x 1]
x = [a; b; c]
b = 1/y;
它應該工作,不是嗎?我可以用SVD計算Moore-Penrose pseudoinv求解。不是嗎?
因此,考慮到3雙'(X,Y)'你需要計算'了''B'和'C'? – Lol4t0
實際上給了n對(x,y)! @ Lol4t0 –
這不是一個編程問題,這是一個數學/統計問題。這就是說,只有*線性*最小二乘有解析解。非線性最小二乘需要數值方法。 –