|
|
|
Riesengrosse Polynome als Funktionen übergeben |
|
| randig1985 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 21:40
Titel: Riesengrosse Polynome als Funktionen übergeben
|
 |
Guten Abend zusammen
Ich habe in Matlab eine Funktion geschrieben, die mir ein Interpolationspolynom berechnet. Ich konstruiere darin einen String, den ich nach hinten immer mehr erweitere, je nach Anzahl Stützstellen. Für wenige Stützstellen funktioniert das bestens, jedoch für eine grosse Anzahl Stützstellen kommen extreme Ungenauigkeiten hinzu. Ich übergebe die Funktion so:
function=@(x) eval(string);
Was empfiehlt ihr mir, wie vorzugehen ist, damit ich auch für Polynome grossen Grades (Riesengross, bis Grade höher als 1000) akzeptable Resultate bekomme? Wenn ich dies mit symbolischen Variablen (syms x) lösen würde, wären die Ungenauigkeiten dann weniger? Oder soll ich bei den anonymous oder gar inline functions bleiben?
Was meint ihr? Könnt ihr mir helfen?
Einen schönen Abend
Randig
|
|
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 22:03
Titel:
|
 |
Hallo,
die Frage wäre ja, was du mit diesen Riesenpolynomen sinnvoll machen willst. Numerische Berechnungen haben *immer* Ungenauigkeiten, symbolische Berechnungen nie. Inline ist veraltet und sollte nicht mehr verwendet werden.
Vor allem aber: Polynome hohen Grades schwingen zwischen den Stützstellen stark und sind für Interpolation, selbst wenn sie exakt ausgewertet werden können, generell denkbar ungeeignet. Üblicherweise macht man stückweise Interpolation, z.B. mit den Optionen 'cubic' oder 'spline' von INTERP1.
Grüße,
Harald
|
|
|
|
| randig1985 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 22:29
Titel:
|
 |
| |
 |
|
| Harald hat Folgendes geschrieben: |
Hallo,
die Frage wäre ja, was du mit diesen Riesenpolynomen sinnvoll machen willst. Numerische Berechnungen haben *immer* Ungenauigkeiten, symbolische Berechnungen nie. Inline ist veraltet und sollte nicht mehr verwendet werden.
Vor allem aber: Polynome hohen Grades schwingen zwischen den Stützstellen stark und sind für Interpolation, selbst wenn sie exakt ausgewertet werden können, generell denkbar ungeeignet. Üblicherweise macht man stückweise Interpolation, z.B. mit den Optionen 'cubic' oder 'spline' von INTERP1.
Grüße,
Harald |
Hallo Harald.
Danke für deine Antwort.
Um was gehts: Ich habe eine Funktion geschrieben, die mir den linearen Spline berechnet mit Eingabe Intervall, Anzahl Stützstellen und Funktion (als Inline)
Der Eingabeparameter kann inline bleiben, das ist kein langer Ausdruck.
Was ich nun machen muss: Den linearen Spline mit meiner Funktion auswerten für über 10'000 Stützstellen.
Wie würdest du das lösen?
Grüsse
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 22:34
Titel:
|
 |
Hallo,
warum so kompliziert und nicht INTERP1? Da ist auch die Anzahl der Stützstellen kein Problem.
Grüße,
Harald
|
|
|
|
| randig1985 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 22:42
Titel:
|
 |
| Harald hat Folgendes geschrieben: |
Hallo,
warum so kompliziert und nicht INTERP1? Da ist auch die Anzahl der Stützstellen kein Problem.
Grüße,
Harald |
Hallo Harald.
Danke für deine Antwort.
Wir haben als Übungsaufgabe bekommen, das Ganze selbst zu programmieren und unsere eigene Funktion für die Auswertung zu benutzen.
Nun also: Habe ich das Problem mit symbolischen Variablen auch? Ists der Versuch wert?
...wenn ich das jetzt umprogrammiere, wäre es toll, wenn ichs vorher wüsste...
Grüsse
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 23:01
Titel:
|
 |
Hallo,
die Frage ist, was ihr nun machen sollt. Ich kann mir jedenfalls nicht vorstellen, dass ihr ein Polynom vom Grad 1000 oder höher machen sollt.
Für händische lineare Interpolation: schauen, in welches Intervall die Stellen fallen, an denen interpoliert werden muss, (mit FIND / logischer Indizierung) und dann die Geradengleichung zwischen den beiden Punkten aufstellen und an dieser Stelle auswerten.
Grüße,
Harald
|
|
|
|
| randig1985 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 23:07
Titel:
|
 |
Hallo Harald
Danke für deine Antwort.
Was meinst du, habe ich das Problem mit symbolischen Variablen auch?
Weiss das vlt. sonst wer?
Grüsse
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 23:09
Titel:
|
 |
Hallo,
*welches* Problem? Bei einer stückweisen linearen Interpolation treten kaum Ungenauigkeiten auf.
Und wie bereits anfangs gesagt: mit symbolischen Variablen wird exakt gearbeitet, d.h. überhaupt keine Ungenauigkeiten, aber dafür tendentiell längere Rechenzeiten.
Grüße,
Harald
|
|
|
|
| randig1985 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.03.2012, 23:19
Titel:
|
 |
Danke dir. Sry, ja ich meine natürlich das Problem, dass mir meine Funktion keine genauen Werte liefert.
Das hat wohl auch etwas damit zu tun, dass der Ausdruck für meine anonymous-Funktion mehrere 100'000 Char-Stellen hat .
Danke nochmals.
Werde wohl nicht darum kommen, das einfach auszuprobieren.
Grüsse
Randig
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.03.2012, 08:55
Titel:
|
 |
Hallo,
für eine lineare Interpolation sollte deine Funktion keine 100000 char-Stellen haben. Für eine Beschreibung, wie man das meines Erachtens händisch angehen sollte, siehe gestern 23:01.
Vor allem aber: unter linearer Interpolation versteht man allgemein keine Polynome hohen Grades, sondern wie der Name schon sagt: (stückweise) lineare Polynome, d.h. Grad 1.
Grüße,
Harald
|
|
|
|
| Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 06.03.2012, 12:24
Titel: Re: Riesengrosse Polynome als Funktionen übergeben
|
 |
Hallo randig1985,
Noch eine Bemerkung zum Grund-Problem: Ein Polynom vom Grad 1000 enthält einen "x^1000" Term. Das ist selbstverständlich enorm sensitiv für minimale Variationen von x.
Die Methode einen String zu konstruieren und per EVAL zu berechnen halte ich für gewagt. Das klingt sehr indirekt.
Gruß, 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.
|
|