7

関数 y(t,x) = exp(-t)*sin(x) があるとします

Matlabでは、定義します

t = [0: 0.5: 5];
x = [0: 0.1: 10*2*pi];
y = zeros(length(t), length(x)); % empty matrix init

では、各要素 y(i,j) に必要な関数 y の値が含まれるように、loop を使用せずに行列 y を定義するにはどうすればよい(t(i), x(j))でしょうか? 以下は、forループを使用して行った方法です。

for i = 1:length(t)
    y(i,:) =  exp(-t(i)) .* sin(x);
end
4

3 に答える 3

12

入力ベクトルx1xNtあり1xM、出力行列yMxNです。コードをベクトル化するには、 と の両方がxt同じ次元である必要がありますy

[x_,t_] = meshgrid(x,t);
y_ =  exp(-t_) .* sin(x_);

あなたの例は単純な 2D ケースです。関数meshgrid()は 3D も動作します。ループを回避できない場合があります。そのような場合、ループが 1:N または 1:M のいずれかになる場合は、最短のものを選択します。ベクトル化された方程式 (ベクトル x 行列の乗算) のベクトルを準備するために使用する別の関数は ですdiag()

于 2009-12-25T22:23:10.993 に答える
6

の必要はありませんmeshgrid。単に使用します:

y = exp(-t(:)) * sin(x(:)');    %multiplies a column vector times a row vector.
于 2009-12-28T20:10:34.267 に答える
2

それらは役立つかもしれません:http:
//www.mathworks.com/access/helpdesk/help/techdoc/ref/meshgrid.html

http://www.mathworks.com/company/newsletters/digest/sept00/meshgrid.html

幸運を。

于 2009-12-26T09:40:04.517 に答える