2017-12-08 7 views
0

MATLAB R2017aで作業しています。私は作業しているコードを最適化しようとしています。配列を使用してグリッドにフィールド値を格納します。 フィールド配列に特定の関数を作成するために、私はもともと2つのforループをすべての配列要素に対して繰り返し処理する単純な方法を使用しました。しかし、私はループが遅いので、私は戻って来て、それらを削除するために最善を尽くしたので、知っている。しかし、私はループの1つを削除することしかできませんでした。配列を定義するときに第2層のループを削除する

for n = 1:1:K 

%%% define initial pertubation 

t=n*dt; 

% create array for source Ez field. 

xtemps = (1:Ng)*dX; 

for k = 1:Ng 

    ztemp = k*dX; 

    Ez0(k,:) = THzamp * (1/(1+exp(-(t-stepuppos)))) * exp(-((xtemps-... 
    THzstartx).^2)./(bx^2)) .* (t-((ztemp-THzstartz)/vg))*exp(-((t-((ztemp-... 
    THzstartz)/vg))^2)/(bt^2)); 

end 

ここで重要なビットは最後の5行ですが、前のものは文脈にとって重要かもしれないと思いました。私は、x座標上のforループのループを削除しました。私はz/k forループをベクトル化したいが、配列間の差異をどのように区別するのか分からない。

編集:THzamp、stepuppos、bx、bt、THzstartz、THzstartxはすべてスカラーで、作成しようとしている関数(Ez0)を制御します。 dXとtも単なるスカラーです。 Ez0はサイズNgの正方形の配列です。

私が達成したいのは、ループ上のループではなくむしろztempの値がベクトル(すでにxtempsのように)で定義されているように、ループを繰り返すforループを削除することです。しかし、私はその場合にEz0の定義をどのように書くのか分かりません。

ここに初めて投稿するとき、私が間違っていると私に知らせてください。あなたはもっと多くの情報が必要な場合は尋ねてください。

+0

少なくとも、すべての変数のサイズを定義すると役に立ちます。これは[完全な例](https://stackoverflow.com/help/mcve)から非常に遠いです。 –

+0

申し訳ありませんが、私は明らかに自分自身を十分に説明していません。 THzamp、stepuppos、bx、bt、THzstartz、THzstartxはすべてスカラーで、私が作成しようとしている関数(Ez0)を制御します。 dXとtも単なるスカラーです。 Ez0はサイズNgの正方形配列です。私が達成したいのは、kをループするforループを削除することです。つまり、ztempの値は、ループ内ではなく、ベクトル(すでにxtempsのように)で定義されています。 。しかし、私はその場合にEz0の定義をどのように書くのか分かりません。 (私はあなたに私のコード全体を与えることなく、これを完全な例にする方法はわかりません) –

+0

完全な例についてのリンクを読んだところです。私はおそらくそのようなものを作ることができます。残念ながら、私は仕事でmatlabにアクセスできるだけなので、火曜日まで待たなければなりません。 :/ –

答えて

0

nが他のヘッダーで使用されているかどうかは不明です。コメントに記載されているとおり、サイズが正しく定義されていないため、サイズが正しいことを確認する必要があります。

ただし、このベクトル化コードを試すことができます。

n = 1:K 

%%% define initial pertubation 

t=n*dt; 

% create array for source Ez field. 

xtemps = (1:Ng)*dX; 

for k = 1:Ng 

    ztemp = k*dX; 

    Ez0(k,:) = THzamp .* (1./(1+exp(-(t-stepuppos)))) .* exp(-((xtemps-... 
    THzstartx).^2)./(bx^2)) .* (t-((ztemp-THzstartz)/vg)).*exp(-((t-((ztemp-... 
    THzstartz)/vg)).^2)/(bt.^2)); 

end 

だから今tは、あなたがstepuppos(ztemp-THzstartz)/vg)が同じサイズKを持っていることを確認する必要がありますK大きさを有しています。また、ベクトル対配列演算子hereを見てみることもできます。

+0

申し訳ありませんが、私は明らかに自分自身を十分に説明していません。 THzamp、stepuppos、bx、bt、THzstartz、THzstartxはすべてスカラーで、作成しようとしている関数(Ez0)を制御します。 dXとtも単なるスカラーです。 Ez0はサイズNgの正方形配列です 私が達成したいのは、ztempの値が(xtempsのように)既に定義されているように、kをループするforループを削除することです。ループ内で個別にしかし、私はtatの場合、Ez0の定義をどのように書くのか分かりません。 –

関連する問題