私は(かなり複雑です-とにかく私にとっては)cellfun操作を行っており、意図したことを実際に行っているかどうかを判断するために、賢明な頭が必要です。
b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);
size(mag)
ans =
81 3
size(u{1})
ans =
81 3
size(r)
ans =
1 81
u と r は cell 配列です。私が必要とするアルゴリズム:
-> u{1} の各要素を取り、それらを r{1} の各要素とクロス積します。-> 結果の 81 x 3 セルに mag (サイズ 81 x 3) を掛けます。-> u{1} の各要素を取り、それらを r{2} の各要素とクロス積します。-> 結果の 81 x 3 セルに mag (サイズ 81 x 3) を掛けます。
等々.....
次のエラーが表示されます。
??? Error using ==> bsxfun
Non-singleton dimensions of the two input arrays must match each other.
Error in ==> cellcross>@(x)nansum(bsxfun(@times,mag(:),cross(u{1},x))) at 2
b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);
Error in ==> cellcross at 2
b = cellfun(@(x) nansum(bsxfun(@times, mag(:),cross(u{1},x))),r,'UniformOutput',false);
私の論理はどこで私を失敗させますか? mag を u のようなセル配列に変更し、cellfun を使用して乗算を行う方が簡単でしょうか?
magを削除することも指摘します:
b = cellfun(@(x) nansum(cross(u{1},x)),r,'UniformOutput',false);
期待どおりに動作するので、結果に u を掛ける問題です。
ガンターズコメントの編集:
u と r の 2 つのオブジェクトがあるとしましょう - どちらもセルです
u =
1 1 0 1st element
2 2 0 2nd element
3 3 0 3rd element
r =
3 3 0
2 2 0
1 1 0
私がやりたいことは次のとおりです。
cross(u{1},r{1})
= cross([1 1 0],[3,3,0]) + cross([2 2 0],[2,2,0]) + cross([3 3 0],[1,1,0] )
次に繰り返します:
sum(cross(u{1},r{2}))
sum(cross(u{1},r{3}))
.
.
.
.