|
|
FUnktion liefert falsches Ergebnis |
|
whitecrane19 |

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2013, 10:04
Titel: FUnktion liefert falsches Ergebnis
|
 |
Hallo Zusammen,
habe zwei Fragen zu Mathlab.
1. Warum liefert folgende Funktion den Wert 2:
Der Wert sollte eigentlich genau 1 sein. Gibt es da eventuell Befehle/Funktionen, die man bei bestimmten Rechnungen berücksichten muss?
2. Wie kann man eine Funktionen wie beispielsweise y=(x-2)^4 ausmultiplizieren und nach fallenden Exponenten ordnen? Eventuell als zweite Möglichkeit noch mit dem Hornerschema.
Letzteres kann man bestimmt durch entsprechende Klammerung realisieren.
Den Befehl für 1.9995 <= x <= 2.0005
0.00005 , Schrittweite kenne ich bereits.
Vielen Dank vorab!
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 25.10.2013, 11:04
Titel:
|
 |
Hallo,
MATLAB arbeitet mit Gleitkommaarithmetik. Doubles haben dabei rund 16 Stellen Genauigkeit, alles andere wird abgeschnitten:
Man spricht dabei von Auslöschung.
Falls du nur Integer-Daten hast, kannst du mit Integer-Datentypen rechnen:
Dabei musst du allerdings aufpassen, dass du dich im von diesem Datentyp abgedeckten Bereich bewegst, ansonsten kommt Unsinn heraus.
Alternativ kannst du symbolisch rechnen:
Auch das Auflösen der Klammern ist so möglich:
Grüße,
Harald
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2013, 11:18
Titel:
|
 |
Vielen Dank für den Hinweis. Auf den Datentyp habe ich anfangs auch getipp. Aber im Taschenrechner rechne ich doch auch mit maximal 6 Stellen nach dem Komma. Als Ergebnis erhalte ich trotzdem 1. Zumal es teilweise Rechnungen gibt, die sowohl int als auch double Werte enthalten können. Bei einer selbstgeschriebene Funktion müsste die Eingabe des Anwenders also immer erst geprüft werden oder?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 25.10.2013, 11:25
Titel:
|
 |
Hallo,
ich würde vermuten, dass dein Taschenrechner vielleicht zwar nur 6 Stellen anzeigt, aber intern doch mit deutlich mehr Stellen rechnet. Wenn ich MATLAB nämlich mit single (ca. 7 Stellen Genauigkeit) rechnen lasse, kommt nämlich noch etwas ganz anderes heraus.
Ich möchte es nochmal betonen: die Ergebnisse sind nicht falsch, sie sind nur nicht genau genug. Bei der Genauigkeit muss man auch die Zwischenergebnisse berücksichtigen. Es käme ja niemand auf die Idee zu unterscheiden, ob zwei Punkte auf dem Mond jetzt 1m mehr oder weniger von der Erde entfernt sind, und so etwas machst du hier letztlich.
Wenn du exakte Ergebnisse haben willst, musst du (wie gezeigt) symbolisch rechnen.
Grüße,
Harald
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.10.2013, 13:53
Titel:
|
 |
Besten Dank, versuche mich jetzt an das Hornerschema, dürfte nicht all zu schwer sein. Danke erst einmal!
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 08:42
Titel:
|
 |
Ich hätte eine Frage zu den Vektoren. Ich kann ja die Schrittweise direkt bei der Definition eines Vektors angeben oder aber mit Schleiofen wie for.
Ich habe nun eine Funktion y=(x-2)^4 und möchte diese Zeichnen. Dazu muss ich ja einen Vektor x mit genügend feiner Stufung wie 100 in einem Intervall, das gegeben ist, definieren. Wie stelle ich das an?
mit x=n:x:m ? Hierbei kann ich aber nur das Intervall mit der Schrittweise angeben, nicht aber die Feinstufung von 100 ...
Und das zweite Problem, wie bekomme ich dann meine Werte, also y1 bis y20 für verschiedene x-Werte?
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 09:45
Titel:
|
 |
Hallo,
was meinst du mit Feinstufung? Die Anzahl der Unterteilungsschritte? Dann kannst du linspace nehmen.
Wenn du einen Vektor an die Funktion fütterst, bekommst du auch einen Vektor heraus.
Grüße,
Harald
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 09:50
Titel:
|
 |
Das habe ich bereits versucht. Aber ich bekomme für y nur 1 Ergebnis. Aber ich habe doch 100 Werte für x, also benoetige ich auch 10ß0 Werte für y.
Dann möchte ich natürlich ausmultiplizieren und nach fallenden Exponenten auflösen. Geht das alles mit der Trapez-Formel?
Als drittes mit Hornerschmema ...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 10:01
Titel:
|
 |
Hallo,
Zitat: |
Das habe ich bereits versucht. Aber ich bekomme für y nur 1 Ergebnis. Aber ich habe doch 100 Werte für x, also benoetige ich auch 100 Werte für y. |
Dann ist bei deinem Versuch etwas schiefgegangen. Um dir da weiterhelfen zu können, müsstest du deinen Versuch posten.
Zitat: |
Dann möchte ich natürlich ausmultiplizieren und nach fallenden Exponenten auflösen. Geht das alles mit der Trapez-Formel? |
Die Trapez-Formel ist ein Integrationsverfahren. Die Formeln werden da so ausgewertet wie sie sind. Wenn du ausmultiplizieren möchtest, musst du das selbst mit expand machen, siehe 25.10.2013, 10:04.
Grüße,
Harald
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 11:59
Titel:
|
 |
Mit dem sort-Befehl lässt sich das Ergebnis aber nicht nach fallenden oder aufsteigenden Exponenten ordnen. Das ist mein Problem ... Darüber hinaus kann ich das nicht mehr ploten, nachdem ich es ausmultipliziert habe, da syms x ist und nicht double ...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 12:32
Titel:
|
 |
Hallo,
zumindest im vorliegenden Fall sind die Exponenten automatisch fallend geordnet. Ich verstehe allerdings nicht, welchen Einfluss die Sortierung der Terme überhaupt auf das weitere Vorgehen haben soll.
Du kannst z.B. mit subs wieder Werte einsetzen und dann plotten, oder ezplot verwenden.
Grüße,
Harald
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 12:49
Titel:
|
 |
Also direkt ploten geht dann nicfht mehr mit plot (x,y) und das Konvertieren mit x=double(x) z.B. auch nicht ...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 12:59
Titel:
|
 |
Hallo,
nein, das geht nicht mehr. Abhilfe siehe zweiter Teil meines vorherigen Beitrags.
Grüße,
Harald
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 13:08
Titel:
|
 |
Hallo whitecrane19,
Zitat: |
Mit dem sort-Befehl lässt sich das Ergebnis aber nicht nach fallenden oder aufsteigenden Exponenten ordnen. |
Das ist für Dich sicherlich ganz klar, ich verstehe das aber nicht, weil die Details fehlen. Für eine Diskussion im Forum ist es besser, Du postest den Code, und zeigst das gewünschte Ergebnis.
Man kann per SORT natürlich auch die Exponenten sortieren, es kommt nur darauf an, wie man die Exponenten gespeichert hat.
Zitat: |
Darüber hinaus kann ich das nicht mehr ploten, nachdem ich es ausmultipliziert habe, da syms x ist und nicht double ... |
Das hieße dann, dass Deine eigentlich Frage ist, wie man symbolische Ausdrücke wieder in numerische umwandelt? Wie wäre es mit dem DOUBLE() Befehl?
Gruß, Jan
|
|
|
whitecrane19 |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 27
|
 |
|
 |
Anmeldedatum: 25.10.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 27.10.2013, 15:46
Titel:
|
 |
Double geht ja nicht double (x) führt zu einem Fehler ...
|
|
|
|
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.
|
|