2

三次元ドメインで次の関数を構築しようとしています。

ここに画像の説明を入力

ここここに画像の説明を入力で、 は定数ベクトル、ここに画像の説明を入力は位置ベクトル、ここに画像の説明を入力は定数、ここに画像の説明を入力は時間です。

ここに画像の説明を入力は size のベクトル、[1 3]は3 次元領域の点を表すここに画像の説明を入力size の配列、は定数、は size の配列です。[NX*NY*NZ 3]ここに画像の説明を入力ここに画像の説明を入力[1 NT]

以下が問題の設定です。

dx = 0.1;
dy = 0.5;
dz = 0.1;

[x, y, z] = meshgrid( (1:100)*dx, (1:100)*dy, (1:100)*dz );
X = [x(:) y(:) z(:)];

k = [1 2 3];
c = 0.5;    
t = 0:0.1:1;

実際、次のループは機能しますが、非常に遅いです (~200秒)。

f = zeros(numel(X)/3, numel(t));
for n = 1:numel(t)
    for i = 1:numel(X)/3
        f(i, n) = tan(dot(k, X(i,:)+c*t(n)));
    end
end

2 番目の次元で使用してベクトルを使用arrayfunして繰り返すことを考えましたが、との乗算のために何をすべきかわかりません。krepmatXct

すべてのポイントとすべての時間に対して関数を定義する効率的な方法は何でしょうか? たとえば、この関数の出力は size の配列のように見えます[NX*NY*NZ NT]

4

2 に答える 2