So erzeugen Sie eine Funktion von zwei Variablen ohne Verwendung von loop?
Angenommen ich habe eine Funktion y(t,x) = exp(-t)*sin(x)
In Matlab, definiere ich
t = [0: 0.5: 5];
x = [0: 0.1: 10*2*pi];
y = zeros(length(t), length(x)); % empty matrix init
Nun, wie definiere ich matrix y ohne Schleife, so dass jedes element y(i,j) enthält den Wert der gewünschten Funktion y an (t(i), x(j))
? Unten ist, wie ich es mit einer for-Schleife.
for i = 1:length(t)
y(i,:) = exp(-t(i)) .* sin(x);
end
- Nicht sicher kann man - ist die Schleife nehmen, um lange zu laufen, oder warum wollen Sie das?
- Die Schleife ist nicht ein problem hier in diesem einfachen Beispiel. Aber ich will lernen, die Art und Weise, es zu tun, ohne Schleife für sehr große Vektoren!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre Eingabe Vektoren
x
ist1xN
undt
ist1xM
-, output-matrixy
istMxN
. Zu Vektorisieren der code beidex
undt
müssen die gleiche dimension besitzen wiey
.Dein Beispiel ist ein einfaches 2D-Fall. Funktion
meshgrid()
funktioniert auch 3D. Manchmal kann man nicht umhin, die Schleife, in solchen Fällen, wenn die Schleife kann entweder gehen 1:N oder 1:M wählen Sie die kürzeste. Eine andere Funktion, die ich verwenden, um vorzubereiten Vektor für vektorisierte Gleichung (Vektor x matrix-Multiplikation) istdiag()
.gibt es keine Notwendigkeit für
meshgrid
; verwenden Sie einfach:Diejenigen, die hilfreich sein könnten:
http://www.mathworks.com/access/helpdesk/help/techdoc/ref/meshgrid.html
http://www.mathworks.com/company/newsletters/digest/sept00/meshgrid.html
Glück.