|
|
Nullstellen eines Vektors |
|
Traumt@nzer |

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 14.08.2012, 15:51
Titel: Nullstellen eines Vektors
|
 |
Hallo Helfer,
ich brauche wieder einmal eure Hilfe. Das Problem ist im Prinzip sehr simpel, aber ich finde nirgendwo eine passende Lösung.
Ich löse ein DGL-System und erhalte einen Beschleunigungs-, Geschwindigkeits- und Auslenkungsvektor mit mehrfachen Nullstellen.
Nun möchte ich mir die reellen Nullstellen ausgeben lassen.
Aber mit "roots" finde ich nur komplexe Nullstellen (außerdem eignet sich roots nur für Polynome) und mit "fzero" erhalte ich immer die Fehlermeldung, dass ich keine gültige Funktion vorgegeben habe.
Vielleicht mache ich auch etwas falsch!?:
Habe ich einen Denkfehler? Gibt es eine konkrete Möglichkeit der Nullstellensuche bei Vektoren? Ich habe auch erfolglos versucht den Vektor zu interpolieren und dann die Nullstellensuche durchzuführen.
Vielen Dank für Eure Hilfe/Tipps.
Viele Grüße
Robert
|
|
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2012, 20:11
Titel:
|
 |
Habe ich das Problem schlecht erläutert, ist die Lösung zu simpel oder hat wirklich niemand eine Idee?!
Viele Grüße
Robert
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.08.2012, 21:25
Titel:
|
 |
Hallo,
- in einem Dateinamen ist eine schlechte Idee, da das als Rechenoperator "minus" aufgefasst wird. Die "dgl-system.m" also unter neuem Namen ohne Sonderzeichen (nur "_" ist okay) speichern und es nochmal probieren.
Wenn es dadurch nicht klar wird, vielleicht mal eines der Beispiele in
ansehen.
Grüße,
Harald
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2012, 21:50
Titel:
|
 |
Hallo Harald,
der Name "DGL-System" war nur beispielhaft gewählt. Die Function heißt anders und ist natürlich ohne ein Minus geschrieben.
Hier die bekannte Fehlermeldung. Vielleicht wirst du ja aus dieser schlau:
??? Error using ==> fzero at 307
FZERO cannot continue because user supplied
function_handle ==> Einmassenschwinger
failed with the error below.
Input argument "y" is undefined.
Error in ==> Testdatei_Einmassenschwinger at 47
z=fzero(@Einmassenschwinger,0)
Muss ich vielleicht die Nullstellenberechnung in eine andere Funktion/Datei auslagern (input y is undefined)?
VG
Robert
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 22.08.2012, 23:28
Titel:
|
 |
Hallo,
"natürlich" ist hier relativ wenig
Zitat: |
Hier die bekannte Fehlermeldung. Vielleicht wirst du ja aus dieser schlau: |
Bekannt ist gut... war sie ja bis jetzt nun nicht. Daraus wirklich schlau werden ist schwierig, ohne deinen Code zu haben.
Zitat: |
Input argument "y" is undefined. |
Heißt: du verwendest y, ohne es vorher (in diesem Workspace) zu definieren.
Wie du das genau beheben kannst, kann ich dir höchstens an deinem Code sagen.
Grüße,
Harald
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 22.08.2012, 23:56
Titel:
|
 |
Du hast "natürlich" "bekannterweiser" recht.
Ich habe einen ganz simplen Einmassenschwinger simuliert um die Nullstellenproblematik anzugehen:
Gesucht sind die Nullstellen der Vektoren s, v und a.
Beim Auflisten fällt mir auf, dass der Input "@Einmassenschwinger" 3 Variablen enthält (t,y(1),y(2)) und wahrscheinlich nicht gelöst werden kann. Wenn ich aber nur einen Vektor vorgebe
bekomme ich die Fehlermeldung, dass ich eine Funktion verwenden muss.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.08.2012, 10:54
Titel:
|
 |
Hallo,
du willst vermutlich wissen, wann die Lösung der Differentialgleichung gleich 0 ist, nicht wann die rechte Seite 0 ist.
ist also nicht sinnvoll.
Ich sehe zwei Möglichkeiten:
a) ungefähre, schnelle Variante:
in s, v, a nach Vorzeichenwechseln suchen, z.B.
b) genaue, etwas aufwändigere Variante:
Über Events sagen, dass die Nullstellen beim Lösen der DGL mit aufgelöst werden soll. Dazu:
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 23.08.2012, 11:42
Titel:
|
 |
Hallo Traumt@nzer,
Ich möchte mal wieder darauf hinweisen, dass "clear all" zu Beginn einer Funktion vollkommen nutzlos ist, da der lokale Workspace sowieso noch keine Variablen enthält. Als Nebeneffekt werden aber alle bereits geladenen Funktionen aus dem Speicher gelöscht und das Nachladen und Parsen verschwendet eine Menge Zeit. "clear all" ist dann sinnvoll, wenn Du alle(!) M-Files während des Programmablaufs geändert hast und die neuen Versionen benutzt werden sollen - ein eher unegwöhnlicher Vorgang.
Demgegenüber sind "clc" und "close all" nur unpraktisch, wenn man mehrere Probleme gleichzeitig bearbeitet. Trotzdem empfehle ich die Unsitte des brutalen Säuberns nicht weiter zu verfolgen.
ODE45 kann übrigens Nullstellen finden, indem man Event-Funktionen benutzt, siehe "doc odeset" und "doc ode45".
Gruß, Jan
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 23.08.2012, 15:02
Titel:
|
 |
Danke euch beiden.
@Harald:
a) Genau so eine schnelle Variante habe ich zunächst gesucht. Könntest du mir noch sagen, wozu das Zeichen "~" notwendig ist!?
b) Diese Möglichkeit war mir bekannt. Da in meinem komplexen Programm schon viel Events enthalten sind, hoffte ich auf eine schnellere Variante.
@Jan:
Das war mir bisher unbekannt. Vielen Dank für den Hinweis!
Nochmals Danke
VG Robert
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 23.08.2012, 16:59
Titel:
|
 |
Hallo,
~= bedeutet
Achtung: die Variante a) hat zwar geringeren Aufwand, aber du bekommst immer den aufgenommenen Zeitpunkt vor dem eigentlichen Vorzeichenwechsel. Je nachdem wie grob deine Rasterung ist, kann das ziemlich weit weg sein.
Die elegantere und, wenn du ohnehin schon mit Events vertraut bist, auch nicht sooo schwer umzusetzende Variante ist definitiv b).
Grüße,
Harald
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.08.2012, 09:08
Titel:
|
 |
Hallo Harald,
die schnelle Variante funktioniert leider nur bei dem Einmassenschwinger. Deshalb wollte ich kurz die Bedeutung des Cdes nachfragen.
Das bedeutet: Gebe den Zeitwert an, bei dem die Differenz von Signum an der Stelle des Vektors ungleich null ist; d.h. ein Vorzeichenwechsel vorhanden ist. Richtig!?
Grüße
Robert
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 24.08.2012, 09:42
Titel:
|
 |
Hallo,
richtig. Was funktioniert denn bei anderen Fällen nicht?
Grüße,
Harald
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.08.2012, 10:01
Titel:
|
 |
Hallo,
ich schalte durch eine Event-Funktion den Dämpfer des Einmassenschwingers zu (b sehr groß), sodass die Bewegung schlagartig fast völlig zum Stillstand kommt (v->0). Als Nullstelle gibt Matlab mir nun genau den Zeitpunkt des Events aus, obwohl an dieser Stelle s>0 ist und s auch niemals eine Nullstelle hat. Die Nullstellen der Geschwindigkeit und der Beschleunigung sind [], obwohl zum Eventzeitpunkt ein Vorzeichenwechsel vorhanden ist (Abbruch der Bewegung). Ich habe die Vektoren überprüft. Man kann eindeutig zum Event-Zeitpunkt keinen Vorzeichenwechsel bei s, dafür aber bei v und a erkennen. Leider gibt mir die Funktion diese aber nicht aus.
Ich denke ich werde wohl auf die Nullstellensuche per Event umsteigen.
Grüße
Robert
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.499
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 24.08.2012, 11:25
Titel:
|
 |
Hallo,
ich bitte um ein Beispiel für Vektoren t und s, wo ein Vorzeichenwechsel mit dem Befehl nicht korrekt erkannt wird.
Grüße,
Harald
|
|
|
Traumt@nzer |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 26
|
 |
|
 |
Anmeldedatum: 04.07.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.08.2012, 14:21
Titel:
|
 |
Hallo Harald,
ich kann dir leider kein Beispiel für Vektoren t und s geben, wo ein Vorzeichenwechsel mit dem Befehl nicht korrekt erkannt wird. Es gibt nämlich keins Habe mein simplen Fehler gefunden (falsche Variablenbezeichnung). Da MATLAB immer das macht, was man ihm sagt, konnte der Fehler ja nur bei mir liegen...
Danke Dir.
Grüße,
Robert
|
|
|
|
Gehe zu Seite 1, 2 Weiter
|
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.
|
|