0

行列を使用して一次方程式系を解いて、数百行のデータを計算しようとしています。行データに基づいてマトリックスを構築しています。結果の 3x3 の逆数を取り、x に対して 1 回、y に対して 1 回、2 回乗算します。これから 6 つの変数を取得します:a,b,c,d,ef. すべての行が解決されるように、例をコピーするにはどうすればよいですか? 私はデータを提供し、次に現在使用している式を提供しています。現在、下にコピーすると 3 行スキップするか、3 つの例で下にコピーすると 9 行スキップします。つまり、300 行すべてに余分な行を挿入してみて、最終的には 900 行になると思いますが、もっと簡単な方法が必要です。

ここにデータを正しく入力する方法がわからないので、ここにリンクがあります: http://codepad.org/qZwua3h9

注: マトリックスの行を分割して見やすくしましたが、私のシートでは分割されていません。

編集:誰かがここにサンプルデータを貼り付ける方法を理解できる場合は、この投稿が将来誰かに役立つように歓迎します。codepad がペーストを保持する期間はわかりません。

4

1 に答える 1

0

私はあきらめて、望ましい結果をもたらす合理的な量の努力はないという結論に達しました。例のケースは 1 つの変換だけであっただけでなく、意図したケースは 3 つの変換のためのものでした。約 15 分で Matlab のソリューションを思いつきました。ただし、誰もが Matlab にアクセスできるわけではないことは理解しています。そのため、誰かが合理的に機能する Excel ソリューションを思いついた場合は、その知識を歓迎し、その回答を受け入れられたものとしてマークします。いずれにせよ、Matlab スクリプトは次のとおりです。

  M = csvread('pointData.csv');

  T1result = zeros(215,6);
  T2result = zeros(215,6);
  T3result = zeros(215,6);

  for i=1:215,
      m = [M(i,1) M(i,2) 1; M(i,3) M(i,4) 1; M(i,5) M(i,6) 1];
      x = [M(i,7);M(i,9);M(i,11)];
      y = [M(i,8);M(i,10);M(i,12)];
      xresult = m\x;
      yresult = m\y;
      T1result(i,:) = [transpose(xresult),transpose(yresult)];

      m = [M(i,7) M(i,8) 1; M(i,9) M(i,10) 1; M(i,11) M(i,12) 1];
      x = [M(i,13);M(i,15);M(i,17)];
      y = [M(i,14);M(i,16);M(i,18)];
      xresult = m\x;
      yresult = m\y;
      T2result(i,:) = [transpose(xresult),transpose(yresult)];

      m = [M(i,13) M(i,14) 1; M(i,15) M(i,16) 1; M(i,17) M(i,18) 1];
      x = [M(i,19);M(i,21);M(i,23)];
      y = [M(i,20);M(i,22);M(i,24)];
      xresult = m\x;
      yresult = m\y;
      T3result(i,:) = [transpose(xresult),transpose(yresult)];
  end

  LeafId = csvread('extraColumnsForID.csv');
  Tresult = [LeafId, T1result, T2result, T3result];

  csvwrite('transforms.csv',Tresult);
于 2013-04-16T21:06:05.277 に答える