0

こんにちは私は次を持っています:

for j = 1:N
    for i = 1:N
        vecdir(i,:) = pos(i,:) - pos(j,:);
        dist(i,:) = pdist2(pos(i,:),pos(j,:));
        norm(i,:) = vecdir(i,:)./(dist(i,:)).^2;
    end
    r{j} = norm;

end

u = {or};

ここで、2つのオブジェクトuとrがあります。

>> u

u = 

    [9x3 double]

>> r

r = 

  Columns 1 through 8

    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]

  Column 9

    [9x3 double]

そして、rの各セルを取得し、そのセルの各要素とセルuの各要素の外積を取得し、結果を1つのベクトルサイズに合計します[13]。これまでのところ、次を使用して一度に1つのセル(rの)を実行できます。

b_func = @(u)nansum(cell2mat(cellfun(@(v)cross(u,v)', {r{1}}, 'Un', 0))', 1);
b = cellfun(b_func, u, 'UniformOutput', 0)

どこ

b = [1x3 double]

ただし、私がやりたいのは、rのすべてのセルに対してこれを実行して、最終的にオブジェクトを作成することです。

b = 

  Columns 1 through 8

    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]

  Column 9

    [1x3 double]

ここで、各セルは上記の計算ですが、rの各セルを繰り返し処理しています。これを行う方法はありますか?

4

2 に答える 2

1

どうですか:

b= cellfun(@(x) nansum(cross(u{1},x)),r,'UniformOutput',false);

テスト:

>> u = {randi(5,[9 3])}
u = 
    [9x3 double]
>> r = arrayfun(@(x) randi(5,[9 3]),1:8,'UniformOutput',false)
r = 
  Columns 1 through 6
    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]    [9x3 double]
  Columns 7 through 8
    [9x3 double]    [9x3 double]
>> b = cellfun(@(x) nansum(cross(u{1},x)),r,'UniformOutput',false)
b  = 
  Columns 1 through 6
    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]
  Columns 7 through 8
    [1x3 double]    [1x3 double]
于 2012-08-07T00:09:39.650 に答える
0

セルが3次元に沿って進むように形状を変更し、配列に変換して合計することができます。

b = nansum(cell2mat(reshape(cellfun(@(v)cross(u,v), r, 'Un', 0),1,1,[])),1);

次に、セルに戻って寸法を修正します。

bfinal = shiftdim(mat2cell(b,[1],[3],ones(1,size(b,3))),1);

結果:

>> bfinal

bfinal = 

  Columns 1 through 6

    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]    [1x3 double]

  Columns 7 through 9

    [1x3 double]    [1x3 double]    [1x3 double]
于 2012-08-06T15:20:01.617 に答える