ベストアンサー ※ ChatGPTを利用し、要約された質問です(原文:分子構造の重ねあわせ (行列、最小二乗法など?)) 分子構造の重ねあわせについての質問 2008/10/14 15:31 このQ&Aのポイント 分子構造の重ね合わせについてアルゴリズムを知りたい重ね合わせる2つの分子構造の誤差を最小化する方法を教えてほしい重ね合わせのアルゴリズムには行列計算や最小二乗法を使用するのか気になる 分子構造の重ねあわせ (行列、最小二乗法など?) すいません、化学っぽい内容の質問なのですが、 アルゴリズムは数学になると思うのでこちらで質問させていただきます。 また、説明不足を補うために一部プログラムっぽい表記をさせていただきますのでご了承ください。 現在、分子構造を比較するためのプログラムを作成しています。 そのプログラムに構造の「重ね合わせ」機能を追加したいのですが そのアルゴリズムに最小二乗法などが必要らしく、悩んでいます。 (詳細は長くなるので下に書きます) 分かる方がいましたらご教示お願いします。 よろしくお願いします。 ■重ね合わせについて 分子構造のデータは、各原子がそれぞれX, Y, Z座標の3つの値を持っています。 例えば、200原子からなる分子のデータ構造は以下のようになります。 Atom { double x; double y; double z; } Atom atom = new Atom[200]; 重ね合わせる2つの構造は原子数は同じとします。なので、分子構造2つをa1, a2とし、 対応する点の誤差をとっていくと、誤差の平均を求める計算は以下のようになります。 Atom a1 = new Atom[200]; Atom a2 = new Atom[200]; double d = 0; for (i = 0; i < a1.length; i++) d += sqrt(pow((a1[i].x-a2[i].x),2) + pow((a1[i].y-a2[i].y),2) + pow((a1[i].z-a2[i].z),2)); d = d / a1.length; このdの値が最小値をとるようにa2の原子の座標を変更することを「重ね合わせ」と定義します。 ■重ね合わせのアルゴリズムについて 基準となる構造に対し、もう一つの構造を並進や回転によって合わせる感じになると思います。 今回質問する箇所はこのアルゴリズムになります。 この際に行列計算や最小二乗法を使うことになるかと思われます。 ■質問者の考え 途中まで、しかも間違っている可能性がありますが私の考えたアルゴリズムを追記しておきます。 (i) a1, a2の重心を求める double x1 = y1 = z1 = x2 = y2 = z2 = 0; for (i = 0; i < a1.length; i++) { x1 += a1[i].x; y1 += a1[i].y; z1 += a1[i].z; x2 += a2[i].x; y2 += a2[i].y; z2 += a2[i].z; } x1 = x1 / a1.length; y1 = y1 / a1.length; z1 = z1 / a1.length; x2 = x2 / a1.length; y2 = y2 / a1.length; z2 = z2 / a1.length; a1の重心(x1, y1, z1)とa2の重心(x2, y2, z2)が求まります。 (ii) 重心の誤差を求め、誤差をa2の各原子の座標に反映させる xd = (x2 - x1); yd = (y2 - y1); zd = (z2 - z1); for (i = 0; i < a1.length; i++) { a2[i].x -= xd; a2[i].y -= yd; a2[i].z -= zd; } この方法で誤差はかなり小さくなります。しかし、最小値にはなってないと思われます。 なので、この方法が正しいのかよく分かりません。 質問の原文を閉じる 質問の原文を表示する みんなの回答 (1) 専門家の回答 質問者が選んだベストアンサー ベストアンサー echoes_x86 ベストアンサー率65% (21/32) 2008/10/14 16:10 回答No.1 こんにちは. ソースコードは良く見てませんが… 要するに合同であることが期待されるn点のデータ集合XとX'に関して, Σ ||Xi' - (R*Xi+T) ||^2 -> min なる回転と並進ベクタを計算したいと考えます. ここで,XiとXi'はi番目の座標を意味する3次元ベクタであり, 総和演算は範囲(i=1,...,n)とします. 質問者様の方法では上記の変換(R,T)に関して, 並進量Tまでしか解決できません. ここからさらに回転量Rを解決する必要があります. 基本的な戦略は相関行列を特異値分解してRを決定します. Rの推定には質問者様の方法で重心を合わせたXとX'に関して M = Σ Xi'*Xi^T なる3*3相関行列を計算し,M -> U*D*V^T と特異値分解します(^Tは転置記号). 最小二乗の意味で最適なRは R = U*V^T で計算できます. ただし,回転の向きは適宜調整してください. データ集合XとX'が相似の意味で同じである場合は 重心を会わせた後にスケール調整を行ってください. 質問者 お礼 2008/10/14 22:55 回答ありがとうございます。 やはり行列計算が必要になるのですね。 ちょっと難しいですが調べてみます。 大変参考になりました。 広告を見て全文表示する ログインすると、全ての回答が全文表示されます。 通報する ありがとう 0 カテゴリ 学問・教育数学・算数 関連するQ&A 最小二乗法? i 個の測定点 (x[i],y[i]) を,最小二乗法などを用いて下記の式にフィッティングさせようと考えています。Visual Basic で作成した測定プログラムの中で使用したいのですが,具体的にどのようなアルゴリズムでフィッティングを行えばいいのか分かりません。 Y = A * sin(X - C)^2 + B 実測する x[i] の範囲は狭く,例えば -15°~ +15°まで 0.2°毎の計 151 プロット,といった感じです。そして定数 A,B,C の内,最も高い精度で求めたい定数は C です。測定の段階で x の範囲を狭めているのは,正確な C (通常 1°未満)を求めるためです。 この測定は x[i] にはほとんど誤差が含まれませんが y[i] には誤差があります。y[i] の含まれている誤差は試料によってまちまちなので,一概には言えません。目視ではほとんど誤差が分からない綺麗なカーブの場合,逆に目視で辛うじて下に凸の曲線が分かる程度の場合,どちらもあり得ます。 考え方だけでも構いませんので,どうかご教授下さい。よろしくお願いいたします。 3次元の最小二乗法 A(x1,y1,z1)とB(x2,y2,z2)とC(x3,y3,z3)とD(x4,y4,z4)の点で 最小2乗法ほうを使い直線近似したいのですが、どのような式になりますかご存知の方教えていただけますか? 最小二乗法 行列 現在以下のページを参考に最小二乗法の勉強をしています。 誤差の二乗ノルムを求めるときに、 || e || ^2 = e*e = (y-Ax)*(y-Ax) = (y*-x*A*)(y-Ax) = y*y - y*Ax -x*A*y + x*A*Ax (1) この次に = y*y - 2y*Ax + x*A*Ax と変形できるのはなぜなんでしょうか? (1)の第3項目 x*A*y が第2項目と等しくなる過程が分かりません。 後、次の二乗ノルムを微分する過程も良くわかりません。 すみませんが、よろしくお願いします。 http://www.star.t.u-tokyo.ac.jp/~kaji/leastsquare/leastsquare_main.htm 天文学のお話。日本ではどのように考えられていた? OKWAVE コラム 最小2乗法などによる推定について 2次による推定(近似?)を行っているのですが、 (a1*x^2+a2*x+a3)(a4*y^2+a5*y+*a6)(a7*z^2+a8*z+a9) =c1*x^2*y^2*z^2+c2*x^2*y^2*z+・・・・・・+c27 上記の式の場合、最終的に係数cが1から27まででてくるとおもいます。この係数はどのようにして求めればよいのでしょうか? なお、x,y,zは既知の数です。 見にくく、わかりづらいかと思いますがよろしくお願いいたします。 最小二乗法による残差の和について 質問させていただきます。 最小二乗法による残差の和が0になることが保障されているのは以下のどれでしょうか? 1、Y=βX+ε 2、Y=α+βX+ε 3、Y=αX+βZ+γW+ε 4、Y=α+βX+γZ+δW+ε ただし、X,Y,Zは説明変数である。また、εは誤差項を表す よろしくお願い致します。 重みつき最小二乗法の誤差 まず、条件を書かせていただきます。 ln(DZ)=ax+B a=-1/T x:条件(x=1、x=5) Z:xを決めると決まる値。(例:x=1ならZ=20、x=5ならZ=68) B:定数 D:条件xの時に行なった測定の測定値 (x=1のときに行なった測定値をD1、x=5のときに行なった測定値をD5) ln(DZ)=yとすれば、y=ax+Bとなります。 一回の測定すると、x=1とx=5に対するD1とD5を測定できます。 一回の測定操作をηとします。 上記の条件で、下記に示す2種類の方法でTの平均値とTの誤差を求めます。 (1) ηを行なうことにより、aとTを求めることができます。 ηを10回行なうことにより、10個のTを求めるます。 10個のTからTの平均値とTの誤差を求めます。 (2) ηを10回行なうことにより、10個のD1と10個のD5を求めるます。 10個のD1と10個のD5を使い、重みつき最小二乗法によって Tの平均値とTの誤差を求めます。 どちらの方法でも平均値と誤差は出ますが、 どちらの方がより正確にTの平均値と誤差を求めることができるのでしょうか。 根拠を示した上で教えてください。 じっくり考えてみましたが、よくわかりません。 文章がおかしいために 、たぶん質問の内容自体が理解できない可能性が高いので分からないことがあれば教えてください。 もし、参考になるホームページや本などがあればご紹介ください。 よろしくお願いいたします。 球の最小二乗法について はじめまして. 工学部の学生です. 球の中心座標と半径を求める最小二乗法について教えてください.お願いします. 私も,エクセルを使って式を立てて計算したのですが,中心がどうしてもずれてしまいます. |Σx^2 Σxy Σzx Σx | |a| |-Σ(x^2+y^2+z^2)x| |Σxy Σy^2 Σzy Σy | |b| = |-Σ(x^2+y^2+z^2)y| |Σzx Σyz Σz^2 Σz | |c| |-Σ(x^2+y^2+z^2)z| |Σx Σy Σz n | |d| |-Σ(x^2+y^2+z^2)| この式をクラーメルの公式を使って解いて x=-a/2 y=-b/2 z=-c/2 r=√{(a^2+b^2+c^2)/4-d} で,計算したのですが,答えがうまく求まりません. どなたか教えていただけないでしょうか. gnuplotでの最小二乗法について。 他のカテで質問したのですが、 こちらの方が関係性が深いと思い移動しました。 y,x1,x2 を測定データとして、線形関数 y=a*x1-b*x2 におけるパラメータ a,b をgnuplotを使って最小二乗法で求めたいのですが、参列のデータ(x1,x2,y)を用意して、 f(x)=a*x1-b*x2 fit f(x) "data.dat" via a,b とうった時点で、undefined variable: x1 とエラーが出てしまいます。 どうすればよいでしょうか。よろしくお願いします。 最小二乗法の推定値の誤差 変数xを変化させたときの測定値yを最小二乗法で二次式y=a*x^2 + b*x +c にフィッティングさせ推定値a, b, cを求めるとき、 測定値yの誤差がδyであるときの推定値a, b, cの誤差を求めたいのです。 具体的には、(x,y)=(-1,2), (0,0), (1,1.5), (2,5) の4つのデータを 二次式にフィッティングさせたときのa,b,cはa=1.375, b=-0.325, c=0.225ですが、 測定値yの測定誤差が0.1のときのa,b,cの誤差を求めたいのです。 よろしくお願いします。 モデルの違いによる最小2乗解 ある観測値Yiをaix1+biz+eiというモデルを用いて連立方程式をたて、eの2乗を最小にする未知数 x1、zを特異値分解法を用いて(x1、z)=(0,10)と言う解を得たとします。 ここでiは観測数、ai,biは既知の係数、eiは正規分布に従う誤差とします。 つぎに、同じ観測値Yiをa1ix1_a2ix2+biz+eiというモデルを用いて同じように未知数x1、x2、zを求めたとき、つまりひとつ未知数を増やした場合、その解は(x1、x2、z)=(0,0,10)とはなりませんでした。ここで、a1i, a2i,biは既知の係数、iは3以上、biは前のモデルと同じ係数。 感覚的にそうならないだろうと思いますが、なぜそうならないのか、うまく説明できません。お力をお借りできれば幸いです。 よろしくお願いいたします。 最小二乗法に関する問題 『高校数学でわかる 統計学』という本を読んでいます。 ∑x_i e_i = 0 (※Σは、i=1からnまで) という性質があるそうですが、その証明がうまくいきません。 なお、 ∑e_i = 0 (※Σは、i=1からnまで) の証明はうまくいきましたので、下に書いておきます。 b = 1/n {∑y_i} - a/n {∑x_i} (※以下Σは、i=1からnまで)を途中で使います。 ∑ e_i =∑{y_i - f(x_i)} =∑{y_i - ax_i - b} =∑y_i - a ∑x_i - bn =∑y_i - a ∑x_i - n {1/n {∑y_i} - a/n {∑x_i} } =0 よろしくお願いします。 最小二乗法について困ってます。 Σa_i*y^p*x^q*1^r, p+q+r=3 とおいて、a_iを最小二乗になるように変化させるたいですが、、、 (3次の多項式で近似) よろしくお願いします。 日本史の転換点?:赤穂浪士、池田屋事件、禁門の変に見る武士の忠義と正義 OKWAVE コラム 最小二乗法の問題 (x、y)についてのん組のデータ(x1、y1).......(xn、yn)が直線y=ax+bの近似できるとき、aとbを最小二乗法により求めよ。 最小2乗 (1) (x,y)=(-3,4),(-2,1),(-1,0),(0,-1),(1,1),(2,2),(3,3)を 方程式 y = ax^2 + bx + c で最小2乗法に当てはめたときの a,b,cを求める (2) 要素(x,y,z)=(1,3,2),(2,1,1),(3,2,4),(4,5,3),(5,4,5)が z = ax + by + p とモデル化されるとき、残差の2乗Σp^2 が 最小になるように定式化して、最小となるa,bを求める という問題です。 これらを行列を用いて解きたいのですが、どのようにすればよいか分かりません。よろしくお願いします。 最小二乗法について いくつか教えてほしいです。 min f(x)=||Ax-b||2・・・・(I) (1)||Ax-b||2ならわかるんですが||Ax-b||の上と下に2がつくのはどういったことでしょうか?? (2)(I)式を行列表現で表すと (A^T)Ax=(A^T)bとなりますが過程は <Ax,b><Ax,b> =<x,(A^T)Ax>-2<(A^T)b,x>+||b|となり最小化するので偏微分をし=0とおくのですが <A,x>の微分はAというのを用いれば-2<(A^T)b,x>の微分が2(A^T)bとなるのはわかるんですが <x,(A^T)Ax>の微分が2(A^T)Axとなるのがわかりません。 内積の微分は講義ではやってないので独学になります。 教授に聞いたらx=(x1,x2) (A^T)Aを2×2{{a,b},{c,d}}とおいて実際に計算し微分すれば理解できるかもと言われ計算してみたのですがよくわかりませんでした。 どうかご教授お願いします。 円の最小二乗法の公式 いくつかのデータから最小二乗法で近似曲線を求めたいのですが、よくわかりません。そのデータ集の近似曲線は円になります。 最小二乗法を調べ、1次、2次関数についてはわかりました。ある点の座標を(x1,y1), (x2,y2)…、近似曲線上の座標を(x1,y’1),(x2,y’2)… とした時、 (y’1-y1)^2 + (y’2-y2)^2 … が最小となるような係数a,b などを偏微分 → 連立方程式で求めるという方法でした。 円についても、同様の方法で r^2 = (x-a)^2 + (y-b)^2 のような近似曲線の式が求められるのでしょうか?1次関数などのように、y’1-y1を求めようとすると、±√ が出てきてしまい、ややこしくなる気がしますが、これを解くしかないのでしょうか?もしくは別の解法があるのでしょうか?詳しく教えていただけたらと思います。よろしくお願いします。 最小二乗法を応用した微分 C言語についてです。 規則性のある離散データを局所的(たとえば3点ごと)に最小二乗法を使って微分したいのですがどうすればいいでしょうか。 以下、データ全体に最小二乗法を適用するプログラムです。 #include<stdio.h> #define n 60 main() { FILE *fin; int i; float x[n],y[n]; double a=0,b=0,sumx=0,sumy=0,sumxy=0,sumx2=0; fin=fopen("data1.txt","r"); if(fin==NULL){ fprintf(stderr,"Not found\n"); } for(i=0;!feof(fin);++i){ fscanf(fin,"%f %f",&x[i],&y[i]); } for(i=0;i<n;++i){ sumx+=x[i]; sumy+=y[i]; sumxy+=x[i]*y[i]; sumx2+=x[i]*x[i]; } a=(n*sumxy-sumx*sumy)/(n*sumx2-sumx*sumx); b=(sumx2*sumy-sumxy*sumx)/(n*sumx2-sumx*sumx); printf("a=%f b=%f\n",a,b); fclose(fin); } データは以下のようなものです。 0 0.5 0.1 0.8 0.2 1.4 ・・・・・ 回答お願いします。 最小二乗法に関する質問です。 f(a,b)=Σ[i=1~n]{y_i-(a+bx_i)}^2の最小値(極小値)を求めるために、まずfの停留点を求めると、一組だけ停留点(a_0,b_0)が得られました。 そして、fのaに関する2階偏導関数f_aaを計算すると2nだったので、 f_aa(a_0,b_0)=2n>0であることもわかりました。 これより、あとはfの((a_0,b_0)に関する)ヘッセ行列式 det(H_f(a_0,b_0))=(4nΣ[i=1~n](x_i)^2)-4(Σ[i=1~n]x_i)(Σ[i=1~n]x_i) が、正であることが示せれば、fが極小値をとることが示されると思ったのですが、 (4nΣ[i=1~n](x_i)^2)-4(Σ[i=1~n]x_i)(Σ[i=1~n]x_i)>0はどのように式変形すれば示されるのでしょうか? 回答よろしくお願い致しますm(_ _)m このプログラミングって正しい? 与えられた実行列X,Y,Z(配列名x、y、z)から、X-YZを計算して、行列W(配列名w)に格納するメソッドを完成する。 Public static void XminusXY( double[][] x,double[][] y,double[][] z, double[][] w){ double wij; int el=z[0].length, m=y.length, n=z.length; for(int i = 0; i<m; i++){ for(int j = 0; j<n-1; j++){ wij=xij for(int k=0; k<el; k++) wij += -y[i][k]*z[k][j]; w[i][j]=wij; } } } 東工大 物理問題 教えて 最小二乗法 y=ax xを変えながら測定を行い、N組の測定値xi,yiを得た 最小二乗法を用いてaの最確値を表す式を求めよ x、yの各測定における測定誤差は等しいとする 注目のQ&A 「You」や「I」が入った曲といえば? Part2 結婚について考えていない大学生の彼氏について 関東の方に聞きたいです 大阪万博について 駅の清涼飲料水自販機 不倫の慰謝料の請求について 新型コロナウイルスがもたらした功績について教えて 旧姓を使う理由。 回復メディアの保存方法 好きな人を諦める方法 小諸市(長野県)在住でスキーやスノボをする方の用具 カテゴリ 学問・教育 人文・社会科学 語学 自然科学 数学・算数 応用科学(農工医) 学校 受験・進学 留学 その他(学問・教育) カテゴリ一覧を見る OKWAVE コラム 突然のトラブル?プリンター・メール・LINE編 携帯料金を賢く見直す!格安SIMと端末選びのポイントは? 友達って必要?友情って何だろう 大震災時の現実とは?私たちができる備え 「結婚相談所は恥ずかしい」は時代遅れ!負け組の誤解と出会いの掴み方 あなたにピッタリな商品が見つかる! OKWAVE セレクト コスメ化粧品 化粧水・クレンジングなど 健康食品・サプリ コンブチャなど バス用品 入浴剤・アミノ酸シャンプーなど スマホアプリ マッチングアプリなど ヘアケア 白髪染めヘアカラーなど インターネット回線 プロバイダ、光回線など
お礼
回答ありがとうございます。 やはり行列計算が必要になるのですね。 ちょっと難しいですが調べてみます。 大変参考になりました。