3

画像を添付 しました:(出典:piccy.info代替テキスト

したがって、この画像には、指定されたポイントで定義された関数の図があります。たとえば、ポイントx=1..N。

半透明の曲線として描かれた別の図、それは私が元の図から得たいものです。つまり、元の関数を滑らかになるように近似したいと思います。

それを行う方法はありますか?

直線または放物線関数で関数を近似するために使用できる最小二乗法について聞いたことがあります。しかし、放物関数で近似する必要はありません。おそらく三角関数で近似する必要があります。それで、それを行うための方法はありますか?そして、1つのアイデアとして、三角関数で推定できる場合、この問題に最小二乗法を使用することは可能ですか?

もう1つ質問があります。離散フーリエ変換を使用して関数を波の合計として考えると、ノイズにはそれを定義できる特別な機能があり、対応する周波数をゼロに設定してから逆フーリエ変換を実行できます。それで、それが可能だと思うなら、ノイズの周波数を特定するために何を提案できますか?

4

5 に答える 5

9

残念ながら、ここに提示されている多くの解決策は問題を解決しないか、および/またはそれらは明らかに間違っています。多くのアプローチがあり、それらはあなたが知っておく必要のある条件と要件を解決するために特別に構築されています!

a)近似理論:(定義またはデータのいずれかによって与えられる)エラーのない非常に鋭い定義関数があり、それを可能な限り正確にトレースしたい場合は、チェビシェフまたはレジェンドレ多項式による多項式または合理的な近似を使用しています。多項式による関数、または周期的である場合はフーリエ級数による関数。

b)補間:いくつかの点(曲線全体ではない!)が与えられる関数があり、この点を通過する関数が必要な場合は、いくつかの方法を使用できます。

ニュートン-グレゴリー、差商のあるニュートン、ラグランジュ、エルミート、スプライン

c)カーブフィッティング:指定されたポイントを持つ関数があり、カーブを可能な限り近似する特定の(!)関数を使用してカーブを描画したいとします。この場合、線形アルゴリズムと非線形アルゴリズムがあります。

あなたの絵は以下を意味します:

  • それは数学関数のようにリモートではありません。
  • データや機能によって明確に定義されていない
  • いくつかの点ではなく、曲線に合わせる必要があります。

あなたが欲しいものと必要なものは何ですか

d)平滑化:ノイズまたは急速に変化する要素を含む曲線またはデータポイントが与えられた場合、時間の経過に伴うゆっくりとした変化のみを確認する必要があります。

Jacobが提案したように、LOESSを使用してそれを行うことができます(ただし、特に妥当なスパンを選択するにはある程度の経験が必要なため、やり過ぎだと思います)。あなたの問題については、ジムCが提案した移動平均をお勧めします。

http://en.wikipedia.org/wiki/Running_average

申し訳ありませんが、cdonnerとOrendorff、あなたの提案は気の利いたものですが、間違った解決策に適切なツールを使用しているため、完全に間違っています。

これらの人々は、気候データを適合させるために6番目の多項式を使用し、完全に恥ずかしい思いをしました。

http://scienceblogs.com/deltoid/2009/01/the_australians_war_on_science_32.php

http://network.nationalpost.com/np/blogs/fullcomment/archive/2008/10/20/lorne-gunter-thirty-years-of-warmer-temperatures-go-poof.aspx

于 2010-01-08T19:04:19.103 に答える
3

R(無料)でレスを使用します。

たとえば、このloess関数はノイズの多い正弦曲線を近似します。

正弦
(出典:stowers-institute.org

ご覧のとおり、曲線の滑らかさを次のように微調整できます。span

ここからいくつかのサンプルRコードがあります

ステップバイステップの手順

正弦曲線を取り、それに「ノイズ」を追加してから、レスの「スパン」パラメータが平滑化された曲線の外観にどのように影響するかを見てみましょう。

  1. 正弦曲線を作成し、ノイズを追加します。

    期間<-120x<-1:120 y <-sin(2 * pi * x / period)+ runif(length(x)、-1,1)

  2. このノイズの多い正弦曲線に点をプロットします。

    plot(x、y、main = "Sine Curve +'Uniform' Noise")mtext( "showing loess平滑化(局所回帰平滑化)")

  3. デフォルトのスパン値0.75を使用してレススムージングを適用します。

    y.loess <-loess(y〜x、span = 0.75、data.frame(x = x、y = y))

  4. 曲線に沿ったすべての点の黄土平滑化値を計算します。

    y.predict <-predict(y.loess、data.frame(x = x))

  5. 黄土の平滑化された曲線を、すでにプロットされているポイントとともにプロットします。

    lines(x、y.predict)

于 2010-01-07T15:32:46.340 に答える
2

FIRフィルターのようなデジタルフィルターを使用できます。最も単純なFIRフィルターは、単なる移動平均です。より洗練された治療法については、FFTのようなものに見えます。

于 2010-01-07T14:43:55.113 に答える
2

これはカーブフィッティングと呼ばれます。これを行うための最良の方法は、あなたのためにそれを行うことができる数値ライブラリを見つけることです。これは、scipyを使用してこれを行う方法を示すページです。そのページの図は、コードの機能を示しています。

2つのノイズの多いデータセットと2つの最適な正弦曲線を示すグラフhttp://www.scipy.org/Cookbook/FittingData?action=AttachFile&do=get&target=datafit.png

今ではたった4行のコードですが、作者はそれをまったく説明していません。ここで簡単に説明しようと思います。

まず、答えをどのような形にするかを決める必要があります。この例では、作成者はフォームの曲線が必要です

f(x) = p 0 cos(2π/ p 1 x + p 2)+ p 3 x

代わりに、いくつかの曲線の合計が必要になる場合があります。それで大丈夫です; 数式はソルバーへの入力です。

したがって、この例の目的は、定数p0からp3を見つけて完成させることですscipyは、この4つの定数の配列を見つけることができます。必要なのは、scipyが実際にサンプリングされたデータポイントにどれだけ近いかを推測するために使用できるエラー関数です。

fitfunc = lambda p, x: p[0]*cos(2*pi/p[1]*x+p[2]) + p[3]*x # Target function
errfunc = lambda p: fitfunc(p, Tx) - tX # Distance to the target function

errfunc長さ4の配列という1つのパラメーターのみを取ります。これらの定数を数式に代入し、候補曲線上の値の配列を計算してから、サンプリングされたデータポイントの配列tXを減算します。結果はエラー値の配列です。おそらく、scipyはこれらの値の2乗の合計を取ります。

次に、いくつかの初期推定値を入力して数値を計算し、エラーが最小化されるパラメーターpscipy.optimize.leastsqのセットを見つけようとします。

p0 = [-15., 0.8, 0., -1.] # Initial guess for the parameters
p1, success = optimize.leastsq(errfunc, p0[:])

結果p1は、4つの定数を含む配列です。successソルバーが実際に解を見つけた場合は、1、2、3、または4です。(errfuncが十分に狂っている場合、ソルバーは失敗する可能性があります。)

于 2010-01-07T14:47:20.083 に答える
1

これは多項式近似のように見えます。Excelで多項式を操作できます([近似曲線の追加]をグラフに追加し、[多項式]を選択してから、必要な近似レベルまで次数を増やします)。そのためのアルゴリズム/コードを見つけるのはそれほど難しいことではありません。Excelは、近似のために思いついた方程式も表示できます。

于 2010-01-07T14:47:48.507 に答える