• 締切済み

tan(Y)へのカーブフィット(2)

1. tan(Y)=(a(X/b)/((X/b)^2-1)の式に データ配列を最小二乗法によりカーブフィットさせたいのですが、線形代数での解き方をご教授お願いします。 2. (マトリックスを使う場合は、どのように展開すれば 良いのでしょうか。)

  • omai
  • お礼率50% (4/8)

みんなの回答

  • stomachman
  • ベストアンサー率57% (1014/1775)
回答No.3

ふふふ。皆さん、非線形と決めてかかってますね。 じつは、データがたくさんあって、しかもモデルと良く合うことが分かっている場合には、実用上問題ない精度で線形計算ができます。 元のモデルを変形すると tan(Y)X^2=(abX)+tan(Y)b^2 ですよね。ここで、 A= b^2, B= ab yi = (tan(Yi) Xi^2), xi = tan(Yi) (i=1,2,....,N) とおけば yi= A xi+ B + 誤差 というモデルをフィッティングすることで、A, Bが得られます。A,Bからa,bを求めるのはできますよね。  どうしても本来の問題をきちんと解くと言う場合には、やはり非線形最小二乗法が必要ですが、上記の方法でa,bの非常に良い近似値を出しておけば、あとは「ガウス-ニュートン法」、いやさ「ニュートン法」のようなシンプルかつ高速な方法で収束させることができます。 この方法は、縦軸を(tan(Y) X^2)、横軸をtan(Y)にとったグラフを描けばデータが直線上に乗り、この空間での最小二乗法をやる、という仕組みなのです。非常に応用が広いんですよ。私的に開発したもので「超平面法」と読んでいます。

  • TCM
  • ベストアンサー率44% (81/181)
回答No.2

 ▼返答遅くなりました。さあ回答しようとPCの前に座ったものの、はっと気がつくともう朝という状態が二晩続きました。P(^.^)  さて、前回の質問や円の方程式もそうですが、展開するとaやbというパラメータについて線形結合になっています。このような場合は、代数的に解いたり、直接法(Gauss-Jordan法とか)で求めることができます。ところが、今回はtanY=abx/(x^2-b^2)ですからパラメータについて非線形です。これは直接法で解けないので、反復法で求める必要があります。反復法というのは、解に適当な初期値を設定した後、ある基準によって徐々に解を改善して、誤差が許容範囲内に収まれば終了するという方法です。SOR法、最急降下法、共役勾配法などがあります。  a、b、評価関数(偏差平方和のような)からなる3次元空間があるとします。評価関数を高さ方向にとると、aとbの値によってうねうねとうねる曲面をイメージできるでしょう。山あり谷ありの曲面ですが、ある場所に評価関数最小の点があります。その点のaとbが求めたい最尤推定値です。しかし、この曲面上には霧が立ち込めており、どこに評価関数最小の点があるのか最初は見えません。そこで適当な場所に立ち、その場所の評価関数の値や勾配を調べて、次のステップはどれくらいの距離、どの方向へ進もうかと考えながら谷底(評価関数最小の点)へと降りていく、というのが反復法のイメージです。その「次のステップはどれくらいの距離、どの方向へ進もうか」という増分の求め方に反復法ごとの特徴があります。  逆Hesse法では、極値(最尤推定値といえる)近傍では評価関数が2次関数で十分近似できることを利用しています。Hesse行列(評価関数の2階偏微分)の1/2をα、評価関数の1階偏微分の1/2をβとして、Σαδ=βを解いて増分δを求めます。しかし、「評価関数が2次関数で近似できる」という仮定があまり良くない場合には収束が悪くなります。そこで、反復初期は最急降下法を、極値近傍では逆Hesse法を利用するようにしたアルゴリズムが Levenberg-Marquardt法(単にMarquardt法ともいう)です。最急降下法では、増分をδ=定数xβで求めますが、この定数を求める際にHesse行列の対角項を利用するところに特徴があり、非線形最小2乗問題の解法の標準といえます。  大雑把というとこんな感じなのですが、Numerical Recipes in C(技術評論社)に詳細な解説がありますので参照してみてください。Levenberg-Marquardt法のソースコード(C言語)も載っていますので便利ですよ。わかりにくいところがありましたら、また回答いたしますので、この質問は閉じなくてもいいですよ。それでは、健闘を祈ります。

omai
質問者

補足

お手数をおかけしております。 非常に、参考になります。 分かったような気にさせてくれますね。(^_^;) ご教授頂いた 概要をガイドラインとして、もうすこし勉強してから再度質問させて頂きます。

  • TCM
  • ベストアンサー率44% (81/181)
回答No.1

 こんばんは、TCMです。  非線形のフィッティングですね。これは繰り返し操作が伴うので、質問#8014のように簡単には解けません。キャラクタ環境だけで、これの説明をするのはかなりやっかいです。ということでまず確認したいのですが、omaiさんはこのフィッティングについて何らかの情報はお持ちでしょうか?  例えば「逆Hesse法で計算することは知っているのだが、Hesse行列の作り方がわからない」とか「Levenberg-Marquardt法で解きたい」とか。2でマトリクスという文言が出ていますので、何らかの資料を手元に持っておられるとお見受けするのですが。ちょっとポイントを絞ってみるというのはいかがでしょうか?

omai
質問者

補足

TCMさん、お世話になっております。 資料は、webです。 泥縄ですが、コメントにありました"逆Hesse法"とか "Levenberg Marquardt"をwebで検索して調べてます。 しかしみな難解で 直には理解できそうにありません(~_~;) 以前、円の方程式 (x-a)^2 + (y-b)^2 = c^2 を A=[x^2+y^2] B=[2x,2y,1] C=[a,b,c^2-a^2-b^2] とおいて C=inv(B'*B)*B'*A で近似した事がある程度なんで、同様に解けることを期待してたんです。 よろしければ、まず"逆Hesse法"と "Levenberg Marquardt法"の大雑把な特徴を教えて下さい。

関連するQ&A

  • 最小二乗法によるtan(Y)へのカーブフィットについて

    tan(Y)=(2aX)/(x^2-1)の式に データ配列を最小二乗法によりカーブフィットさせたいのですが、線形代数での解き方をご教授お願いします。

  • sinc関数のカーブフィッティング

    データ配列に、 y = a sinc(b(x-c)) で表せれる式をフィッティング(最小二乗法など)したいのですが、良い方法がわかりません。 どなたか教えてもらえませんでしょうか?

  • データのカーブフィッティングについて

    (x,y)の組み合わせのデータが数多くあり、y=a+bx+cx^2..という曲線をフィットさせることを考えます。係数a, b, cを求めるということです。エクセルとか科学ソフトに入っているものと思います。 この係数の決め方は、実際にはどのような方針なのしょうか。例えば、最小二乗法のように誤差を調べて、その誤差の式をa, b, cで偏微分して0として3つの式を立て、それを解いてa, b, cを求めるというようなことでしょうか。それはダメなんじゃないかと思うのですが。 y(x,z)=a+bx+czで、x, zが独立ならそれがやれるのであり、この場合、z=x^2なのでzのxに対する独立性に問題があるからなのですが。どうでしょうか。 試しにy=1.5x^2 でxに乱数を与えて計算して(x, y)の組み合わせを数多く作成し、模擬データとしてy=a+bx+cx^2のa, b, cを推定してa=b=0, c=1.5がしっかり算出されるものでしょうか。y=1.5x^2 で乱数で発生したデータであっても低次のy=a + bxという式で最小二乗法を使えばa, b(いずれも非0)の結果が出ますね。そこでもう1つ高次の項 cx^2を付けて推定したら先のa, bが変更を受けてa, bが0でc=1.5となる結果が出てくるものでしょうか。 よろしくお願いします。

  • 曲面フィット

    こんにちは、早速ですが 2つの入力変数(X1とX2)と1つの出力変数(Y)があり、 このデータを3D散布図に描くと曲面展開できそうな (ねじれた平面?)形になりました。 が、カーブフィットの方法がわかりません。 簡単な2Dのフィッティングは最小二乗など使って 何度かやったことあるんですけど 独立変数が複数になるとさっぱりわからなくなりました。 どなたかご教授ください。 またこのようなフィッティングが簡単にできる おすすめのグラフソフトなどあれば教えてください。 よろしくお願いします。

  • tan^-1y=x+C ⇔ tan(x+C)=y 何か変な感じです

    tan^-1y=(xのすごい式) この式の右辺がどんな式であろうともこの式は常に tan(xのすごい式)=y となるのでしょうか?

  • 非線形最小二乗法のmarquardt法とsimplex法に関して

    ほぼ一定の周期を持つデータがあり、それに対してy = a*cos(b*X+c)+d*X+eという形の近似式を求めたいと思っております。 いろいろ調べてみると非線形最小二乗法を利用して、求めればいいことが分かりました。 しかし非線形最小二乗法にはmarquardt法とかsimplex法などがあることが書かれていたのですが、それらの処理法が何をどうしているのか、参考書を見ても、よく分からず、脳が悲鳴をあげています。 この非線形最小二乗法のmarquardt法とsimplex法に関して、違いと求め方を素人でも分かるような形で教えていただくことができましたら、どうかご教授よろしくお願い致します。

  • 実験データのフィッティングについて

    i 個の測定データ(x[i],y[i]) を,最小二乗法などを用いて下記の式にフィッティングさせ、AとBを求めたいと思うのですが、私の勉強不足で線形最小二乗法(グラフにプロットして、切片と傾きから求める方法)で解く方法が分かりません。 Y = Alog{x/(x-B)} (x>B) 考え方だけでも構いませんので,どうかご教授下さい。よろしくお願いいたします。 また、最小二乗法に関する大学学部生程度のレベルの教科書的な本がありましたら、教えて下さい。よろしくお願いします。

  • tanθって|tanβ-α|?それともtan|β-α|?

    y=x^2上の2点A(a,a^2),B(b,b^2)における2接線のなす鋭角θを求める問題 なのですが、Aにおける接線とx軸のなす角をα、Bにおける接線とx軸のなす角β とすると、tanθ=|tanβ-α|と書かれてあったのですが、なぜtan|β-α|では ないのでしょうか?また、tan|θ|と|tanθ|はどう違うのでしょうか?

  • tanθと直線について教えてください

    y=mxの場合は原点を通る直線ならy/xが式の傾きとなるので, x軸と成す角が θであるとすると tanθ=m(傾き)になるのは分かるのですが y=mx+nの場合には、 直線 y = ax + b が x軸と成す角が αであるとすると、tanα=m(傾き)となる理由が分かりません 確かに切片bが変わっても傾きが等しければx軸と成す角の大きさは変わりません しかしtanθ=y/xです。だから tanαの場合もtanα=y/xなのだからtanα=y/x= (mx+n)/x = m+x/nになると思うのですが なにが言いたいのかというとtanθ=tanαの理由がよくわかりません (tanα=m+x/n、tanθ=mになるからtanθ=tanαには決してならないと思うのですが、どうしてそうなるのかが知りたいということです)

  • y=a/(x-b)+cの最小二乗法

    y=a/(x-b)+cの最小二乗法 y=a/(x-b)+c という、反比例の式をx方向に+b、y方向に+c平行移動したような曲線の係数a,b,cを求めるための最小二乗法の方法を教えていただけないでしょうか。 工夫してみたのですが、なかなかうまくいきませんでした。 すみませんが、力を貸してください。