単純に加重平均としてしまうと線形になりますが、今回は添付の図のように山なりな曲線としたいです。
このような事を実現するアルゴリズムの名前や数式を教えて頂けますでしょうか。
よろしくお願いいたします。
「アルゴリズムの名前」が存在するかは分かりませんでしたので、数式だけの回答です。
図を拝見したところ、下記の条件のようでしたのでその前提で回答させて頂きます。
1. オレンジのカーブは円弧
2. オレンジのカーブは点Bで傾きが0になる
まず、条件2から円弧の中心のx座標は2となります。
そこで、この円弧の式は下記のとおりとなります。
ただし、が円弧の中心のy座標、
が半径とします。
次に、この円弧は点(0,1)と点(2,2)を通るので、下記の式が成り立ちます。
まず、2番めの式を解くととなります。
これを1番目の式に代入して解くととなり、これを上の行の式に代入し
も求まります。
よって、円弧の式はとなります。
後は、任意のxを上記の式に代入して解けば、その時点でのyの値が求まります。
オレンジが円弧ではなく他の曲線の場合であっても、
1. 曲線の式を未知の変数(今回の例ではや
)込みで記述する。
2. 曲線の満たすべき条件(通る点や、傾きが0になる点)から、未知の変数を決定する。
というステップで解決可能かと思います。
ルートXの式に似てるね。二次曲線を横にして半分に割ったようなやつ。
でも曲線を描く式なんて、ルート以外の指数関数も、反比例(を途中で切り取ったもの)も、なんだって考えられる。
境界条件くらいはわかるといいんだけどね。
http://aidiary.hatenablog.com/entry/20100327/1269657354
ここにあるように、各地点のデータにノイズが乗っていると、期待していない結果になります。
「関数近似」とか「回帰」で検索すると、色々情報が出てきます。
曲線の満たす条件がわかれば、どんな関数で近似するのがベストかわかるのですが。
(例えば、周期的に上下するならsin関数を適当に変形すればOKでしょう。)
そしてその点は2つ以上で、数百になる事もあります。そのため境界条件は定められなさそうです。
まずは移動平均で均して突出値を丸め込んだ後に3次関数補間を行おうかと現状は考えております。