1
A11 = cos(x)*cos(y)                           (1)
A12 = cos(x)*sin(y)                           (2)
A13 = -sin(y)                                 (3)
A21 = sin(z)*sin(x)*cos(y) - cos(z)*sin(y)    (4)
A22 = sin(z)*sin(y)*sin(x) + cos(z)*cos(y)    (5)
A23 = cos(x)*sin(z)                           (6)
A31 = cos(z)*sin(x)*cos(z) + sin(z)*sin(x)    (7)
A32 = cos(z)*sin(x)*sin(y) - sin(z)*cos(y)    (8)
A33 = cos(x)*cos(z)                           (9)

方程式は 9 つあり、未知数は 3 つしかありません。未知数は x、y、z です。A11、A12、A13 ....... A33 の値を知っています。ただし、これらの値にはノイズが含まれている可能性があるため、最適化アルゴリズムを使用して x、y、および z の最適な値を見つける必要があります。

Matlabで上記の過剰決定方程式を解くにはどうすればよいですか?

私はオンラインで検索してきましたが、いくつかの機能に出くわしまし

しかし、問題に取り組むための最良の方法は何かについて、私は非常に混乱しています。少し方向性が必要です....

4

1 に答える 1

1

私のお気に入りはlsqcurvefit、最適化ツールボックスからのものです。

ドキュメントから、次のものが必要であることがわかります。

  • 関数ハンドル (楽しい)
  • パラメータの開始値 (x0)
  • あなたの場合には存在しない追加の非適合パラメータ(xdata)
  • データ値 (ydata)

optimset十分にテストされたいくつかのアルゴリズムのいずれかを指定できるオプションを設定できます。また、反復の最大数、関数の許容範囲またはパラメーター値の許容範囲の最小しきい値も設定できます。


たまたま最適化ツールボックスを持っていない場合は、いつでも直接fminsearch最小二乗法を使用して最小化できますsum((ydata-fun(x)).^2)


そして、funここのケースで関数を記述し(ドキュメントも参照)、質問のコードを使用する例は次のとおりです。

function r = fun(p, xdata)
x = p(1);
y = p(2);
z = p(3);

% code from here
A11 = cos(x)*cos(y)
A12 = cos(x)*sin(y)
A13 = -sin(y)
A21 = sin(z)*sin(x)*cos(y) - cos(z)*sin(y)
A22 = sin(z)*sin(y)*sin(x) + cos(z)*cos(y)
A23 = cos(x)*sin(z)
A31 = cos(z)*sin(x)*cos(z) + sin(z)*sin(x)
A32 = cos(z)*sin(x)*sin(y) - sin(z)*cos(y)
A33 = cos(x)*cos(z)

% everything in one matrix
r = [A11, A12, A13, A21, A22, A23, A31, A32, A33];
end

スカラー関数とベクトル値関数の間に実際の違いはないことがわかります。Matlab は自動的にデータとの差を計算し、それを合計します。

于 2014-06-24T09:59:53.113 に答える