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の定義をどのように書くのか分かりません。
ここに初めて投稿するとき、私が間違っていると私に知らせてください。あなたはもっと多くの情報が必要な場合は尋ねてください。
少なくとも、すべての変数のサイズを定義すると役に立ちます。これは[完全な例](https://stackoverflow.com/help/mcve)から非常に遠いです。 –
申し訳ありませんが、私は明らかに自分自身を十分に説明していません。 THzamp、stepuppos、bx、bt、THzstartz、THzstartxはすべてスカラーで、私が作成しようとしている関数(Ez0)を制御します。 dXとtも単なるスカラーです。 Ez0はサイズNgの正方形配列です。私が達成したいのは、kをループするforループを削除することです。つまり、ztempの値は、ループ内ではなく、ベクトル(すでにxtempsのように)で定義されています。 。しかし、私はその場合にEz0の定義をどのように書くのか分かりません。 (私はあなたに私のコード全体を与えることなく、これを完全な例にする方法はわかりません) –
完全な例についてのリンクを読んだところです。私はおそらくそのようなものを作ることができます。残念ながら、私は仕事でmatlabにアクセスできるだけなので、火曜日まで待たなければなりません。 :/ –