0

F(x)=1/(ax^2+bx+c) の形式で、いくつかの点を逆放物線に当てはめようとしています。

私の目的は、10 ~ 30 点のセットを取り、それらを逆放物線に適合させる関数を C++ でプログラムすることです。

最小二乗法を使用して分析式を取得しようとし始めましたが、結果を得ることができません。私は手で試してみました(少しクレイジー)、次に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を使用して解決できます。ではない?

4

2 に答える 2

2

最小二乗の解析解はありません。これは最小化問題であり、解決するには巧妙な反復法が必要です。(非線形 LS - @insilico に感謝)

ニュートン スタイルの反復法を試すこともできますが (方程式を再構成することによって)、関数が簡単に収束するとは思いません。関数は 2 点で非常に非線形になります。

これにはライブラリを使用することをお勧めします。肉食獣探索など

http://www.codecogs.com/code/maths/optimization/nelder.php

エラー関数を提供するだけです-これは

sum( pow(F(x) - dataY(x), 2) ) 

初期値のセットを提供します (解決策への暗闇の中での突き刺し)。私は nelder-mead でうまくいきました。

私はあなたが良い平易なコード化された解決策を見つけるとは思わない.

于 2012-12-17T16:16:11.110 に答える
1

私の理解が正しければ、特定のデータ セットに適合する式を知っていればよいのではないでしょうか。

その場合は、カーブ フィッティング プログラムを入手し、目的の方法を使用してカーブをフィッティングするだけです。次に、カーブ フィットで示される式を実装します。

そこにはいくつかのカーブフィットプログラムがあります:

曲線エキスパート

http://www.curveexpert.net/

*ユーレクア*

http://creativemachines.cornell.edu/eureqa

さらに、一部のスプレッドシート パッケージには、必要なカーブ フィッティング機能が含まれている場合があります。

データを提供していただければ、喜んでフィッティングを行います。ご希望のフィット感を保証するものではありません。

于 2012-12-17T16:16:24.103 に答える