|
|
komplizierteres Multiplizieren von Vektoren |
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 19:08
Titel: komplizierteres Multiplizieren von Vektoren
|
 |
Hallo Leute,
ich schreibe gerade an einer Funktion der 2 Parameter übergeben werden:
x : Vektor der Länge n
m: Skalar
Nun möchte ich folgende Schleife gerne vektorisieren:
for k=1:m
y = y + (1/m)*cos(x/T0*m) +(-1)^m*sin(x/T0*m);
end
y hat die gleiche Länge wie x. Leider habe ich bisher keine Möglichkeit gefunden, das vektoriell auszudrücken. Vielleicht hat jemand einen guten Hinweis.
Danke Jan88.
|
|
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 19:14
Titel:
|
 |
Hallo
was ist mit T0? Vektor? Skalar?
|
|
|
Verschoben: 05.04.2011, 19:14 Uhr von denny Von Matlab intern nach Programmierung |
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 19:16
Titel:
|
 |
Hallo,
sorry, T0 ist ein Skalar.
Grüße Jan.
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 20:00
Titel:
|
 |
Hallo
was ist die Startwert von y?
bin mir noch nicht ganz sicher, vermutlich so:
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 20:02
Titel:
|
 |
Hallo,
bist du denn sicher, dass die Schleife momentan das richtige macht? Die Schleifenvariable k wird nämlich nicht verwendet; du addierst also immer dasselbe auf. Und das ist wohl kaum Sinn der Sache? Ich vermute also, dass manche m durch k zu ersetzen sind. Welche das sind, kann ich allerdings logischerweise nicht sagen, das musst du schon wissen
Grüße,
Harald
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 20:13
Titel:
|
 |
Ich habe mich das gleiche wie Harald gefragt, stimmt deine Schleife überhaupt?
|
|
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 20:36
Titel:
|
 |
Ach Mist,
habs beim posten etwas angpasst, das es nicht so riesig wird. Gleich ein Fehler eingeschlichen:
y = 0;
for k=1:m
y = y + (1/k)*cos(x/T0*k) +(-1)^k*sin(x/T0*k);
end
ist natürlich richtig.
Grüße.
|
|
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.04.2011, 20:56
Titel:
|
 |
denny hat Folgendes geschrieben: |
Hallo
was ist die Startwert von y?
bin mir noch nicht ganz sicher, vermutlich so:
|
Leider erhalte ich folgende Fehlermeldung:
??? Error using ==> mldivide
Matrix dimensions must agree.
Error in ==> Fouriertest at 10
y=(1/m)*cos(x/T0*m) +(-1)^m*sin(x/T0*m);
|
|
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 15:33
Titel:
|
 |
Hey,
irgendwie komme ich nicht weiter.
Ich schreibe mal was passieren soll:
Eine Funktion Test hat 2 Übergabeparameter:
Einen Vektor x und einen Skalar m.
Nun soll die Funktion einen Vektor zurückliefern, der zu jedem x-Wert den y-Wert liefert.
Dabei werden zu jedem x m Berechnungen durchgeführt. Dies führt zu folgender Funktion:
y = a0; % a0 = Gleichanteil (Skalar)
for k=1:m
arg = 2*pi*x/k;
y = y + 1 / (m^2)*cos(angle) + (-1)^m*sin(angle);
end
Da das für große m recht lahm ist wollte ich das ganze durch Vektorisierung ersetzen.
Grüße Jan.
|
|
|
Idefix_1024 |

Forum-Century
|
 |
Beiträge: 230
|
 |
|
 |
Anmeldedatum: 16.10.08
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 16:48
Titel:
|
 |
also in einem ersten Schritt kannst Du auch versuch den y-Vektor einmal ordentlich zu initialisieren!
quasi
das mag etwas überflüssig anmuten, aber bei grpßen Vektoren ist das durchaus SEHR empfehlenswert!
Da in gewisser Weise eine Rekursion in Deiner Berechnungsvorschrift steckt sehe ich da im Moment auf Anhieb keine Berechnungsmöglichkeit ohne eine Schleife...
versuch es mal mit der Initialisierung von y!
Grüße,
Idefix_1024
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 16:54
Titel:
|
 |
Hallo Jan
Also jetzt hast du wieder andere Formel gepostet, die wahrscheinlich auch nicht ganz richtig ist
Also dann werden ich mal von letztem Beitrag ausgehend, folgendes vorschlagen
|
|
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 18:26
Titel:
|
 |
denny hat Folgendes geschrieben: |
Hallo Jan
Also jetzt hast du wieder andere Formel gepostet, die wahrscheinlich auch nicht ganz richtig ist
Also dann werden ich mal von letztem Beitrag ausgehend, folgendes vorschlagen
|
In der Zeile
hast du m verwendet, aber eigentlich muss er hier alle Werte von 1 bis m durchlaufen, so wie oben in der Schleife. Und ja Sorry, arg sollte angle heißen.
Hier die Originalfunktion:
Aber wie einer oben schon schrieb, ist die Vektorisierung in diesem Fall wohl nicht möglich.
Grüße.
|
|
|
denny |

Supporter
|
 |
Beiträge: 3.853
|
 |
|
 |
Anmeldedatum: 14.02.08
|
 |
|
 |
Wohnort: Ulm
|
 |
|
 |
Version: R2012b
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 18:54
Titel:
|
 |
Da hast du mich mit dem letztem Post durcheinander gebracht.
dann so:
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 18:54
Titel:
|
 |
Hallo Jan88,
Ich durchblicke diesen Thread nicht ganz. Ich beginne mal ganz unten:
Das soll vektorisiert werden, oder?
Das Potenzieren ist teuer, also sollte dies schneller sein:
Hilft das?
Gruß, Jan
|
|
|
Jan88 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 06.04.2011, 19:18
Titel:
|
 |
Hey,
ich habe mal einen Laufzeittest gemacht:
Die Geschwindigkeitsunterschiede sind deutlich weniger als 10%, so dass eine Vektorisierung hier wohl nix bringt. Wahrscheinlich ist die Berechnung der Sinus/Cosinusterme zu aufwendig, so dass die Schleife da nicht ins Gewicht fällt.
Trotzdem vielen Dank,
Jan.
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2025
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|