|
|
beliebige Funktion über input eingeben und verarbeiten |
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.11.2014, 21:47
Titel:
|
 |
Hallo,
der Klammernfehler ist im geposteten Code noch nicht korrigiert.
Zudem suchst du genau im falschen Intervall weiter: wenn das Produkt größer 0 ist, heißt es ja, dass in diesem Intervall kein Vorzeichenwechsel ist. Demnach muss xEndNeu auf den Mittelpunkt des Intervalls angepasst werden, damit im anderen Intervall weitergesucht wird.
So funktioniert's:
Grüße,
Harald
|
|
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.11.2014, 22:03
Titel:
|
 |
war noch die alte Datei;)
aber es funktioniert einfach nicht. Mittwoch ist Abgabe und eigentlich sollte dieses dämliche Projekt was für den Nachmittag sein... auf jeden Fall werden die Werte nur mit extremen Rechenaufwand errechnet. Das sollte nicht sein. Zudem wiechen diese ab. Ein Schnittpunkt sollte z.B. den Wert X=-1,170935; y=-0,000043 haben. Der Quellcode von mir weicht davon immer ab
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.11.2014, 23:02
Titel:
|
 |
Hallo,
mit meinem Vorschlag von eben liefert
innerhalb von 0.003 Sekunden
Nullstellen =
-1.1709
y =
8.4092e-06
Das ist die Lösung, und den Rechenaufwand finde ich nun nicht gerade extrem.
Grüße,
Harald
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 16.11.2014, 23:30
Titel:
|
 |
das geht für einen Schnittpunkt gut. Bei z.B.
nicht mehr. Dann sind die Rechenfehler extrem.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 16.11.2014, 23:50
Titel:
|
 |
Hallo,
wenn du mehrere Schnittpunkte berechnen willst, dann musst du eine Schleife über die Vorzeichenwechsel machen. Wie soll das denn sonst gehen?
Grüße,
Harald
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.11.2014, 00:25
Titel:
|
 |
Hallo Harald,
dachte es wuerden alle Schnittpunkte berechnet werden. Wieso nur einer und wieso wird noch eine weitere Schleife benoetigt? Mir ist nicht so ganz klar wie Matlab die Anweisungen arbeitet.....
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 17.11.2014, 00:44
Titel:
|
 |
Hallo,
dann schau dir das doch mal Schritt für Schritt an.
Es ist nun nicht so, dass nur mit einem Schnittpunkt gerechnet wird. Probleme gibt es allerdings in der if-Verzweigung, wenn du bei einem Schnittpunkt das linke Intervall nehmen müsstest und beim anderen das rechte - die Aufspaltung kann nicht klappen. Siehst du auch, wenn du das mal im Debugger durchgehst.
Zitat: |
und wieso wird noch eine weitere Schleife benoetigt? |
Weil es ohne nicht klappt?
Zitat: |
Mir ist nicht so ganz klar wie Matlab die Anweisungen arbeitet..... |
Dann geh's mit dem Debugger durch. Wenn bei if-Bedingungen mit Vektoren gearbeitet wird, muss die Bedingung für alle Elemente erfüllt sein, damit der Zweig ausgeführt wird - und das wird bei den verschiedenen Schnittpunkten nunmal nicht der Fall sein.
Grüße,
Harald
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 17.11.2014, 07:40
Titel:
|
 |
verstehe ehrlich gesagt nichts von alldem, was du mir zu sagen versuchst. Debugger? Wie verwendet man diesen?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 17.11.2014, 10:39
Titel:
|
 |
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 21:20
Titel:
|
 |
die Matlab eigenen Hilfestellungen sind etwas Englisch zu viel.....
habs mal ganz simpel mit nem neuen Ansatz versucht. Aber was ist denn nun ein Vektor, eine Matritze, ein skalar und was es noch so alles gibt? Ich denke grundsätzlich in array, wo jede einzelne Zelle auch ansprechbar ist. Aber in Matlab ist das nicht wirklich ersichtlich.
Und wie immer das übliche Problem. Nur eine Nullstelle. Option Genauigkeit ist sinnlos; man muss schon die Schrittweite sehr fein einstellen, damit die Ergebnisse exakt werden. Dann jedoch wieder mit dem Nachteil des hohen Rechenaufwands
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 22:13
Titel:
|
 |
|
 |
|
Hallo,
wieso fängst du denn jetzt von vorne an? Das einzige, was du brauchtest, war eine for-Schleife.
Ich habe mal in den vorherigen Stand eine Schleife eingebaut, und es klappt wunderbar - siehe Anhang.
Zu deinem neuen Versuch:
Zitat: |
Aber was ist denn nun ein Vektor, eine Matritze, ein skalar und was es noch so alles gibt? Ich denke grundsätzlich in array, wo jede einzelne Zelle auch ansprechbar ist. Aber in Matlab ist das nicht wirklich ersichtlich. |
Ja, grundsätzlich ist alles ein Array. Im Workspace Browser siehst du die Dimensionen der Variablen und damit, was ein Skalar, was ein Vektor, und was eine Matrix ist.
Wenn ich deinen Code in den Editor kopiere, bekomme ich rechts 2 rote und 4 orange Balken, die auf Probleme im Code hinweisen. Das solltest du beheben.
Was ist bla?
Du überschreibst nullstelle ständig. Wenn du einen Vektor daraus machen möchtest, musst du hineinindizieren:
Grüße,
Harald
Beschreibung: |
|
 Download |
Dateiname: |
F_SCHNITTPUNKTE.m |
Dateigröße: |
800 Bytes |
Heruntergeladen: |
410 mal |
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 22:38
Titel:
|
 |
Bei mir funktionierts nicht. Bekomme überhaupt keine Werte. bla ist die Funktion y(x). Die Nullstellen werden ständig überschrieben, da mit jeder Iteration neue Nährungswerte entstehen, die für die nächste Iteration verwendet werden sollen. Eine andere Lösung kenne ich halt nicht.
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 22:48
Titel:
|
 |
Hallo,
ich habe dir gerade eine Lösung geschickt!
Wenn ich das aufrufe, bekomme ich folgende Ergebnisse:
>> [ f, Nullstellen, y] = F_SCHNITTPUNKTE(-50:50, 1e-6)
f =
@(x)0.5*x.^3-5*x.^2+2*x+10
Nullstellen =
-1.1709 1.8282 9.3427
y =
1.0e-05 *
0.8409 -0.1913 0.9897
Wenn du diese Ergebnisse nicht bekommst, dann wirst du das anders aufgerufen haben oder vielleicht auch eine deiner veralteten Dateien. Ohne weitere Informationen werde ich dir da jedenfalls nicht weiterhelfen können.
Zitat: |
Die Nullstellen werden ständig überschrieben |
... und ich habe dir geschrieben warum dies so ist und wie du Abhilfe schaffen kannst.
Grüße,
Harald
|
|
|
willi_vintage |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 28
|
 |
|
 |
Anmeldedatum: 01.11.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 23:03
Titel:
|
 |
so sehen die 2 Files aus. Aufruf über F5 (run). Aber was spricht dagegen, ständig die Nullstellen zu überschreiben? Ist von mir so gewollt.
Skript.m
function.m
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.11.2014, 23:19
Titel:
|
 |
Hallo,
...und woher soll ich jetzt wissen, welche Eingaben du zur Laufzeit machst? Das ist doch der entscheidende Punkt. Ich habe dir schließlich einen funktionierenden Beispielaufruf geliefert.
Zitat: |
Aber was spricht dagegen, ständig die Nullstellen zu überschreiben? |
Dass du dann nur eine Nullstelle bekommst, weil die vorher gefundene von der neuen überschrieben wird.
Grüße,
Harald
|
|
|
|
Gehe zu Seite Zurück 1, 2, 3, 4 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.
|
|