WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Riesengrosse Polynome als Funktionen übergeben

 

randig1985

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 21:40     Titel: Riesengrosse Polynome als Funktionen übergeben
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2012, 22:03     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
randig1985

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 22:29     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2012, 22:34     Titel:
  Antworten mit Zitat      
Hallo,

warum so kompliziert und nicht INTERP1? Da ist auch die Anzahl der Stützstellen kein Problem.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
randig1985

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 22:42     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2012, 23:01     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
randig1985

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 23:07     Titel:
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.03.2012, 23:09     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
randig1985

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.03.2012, 23:19     Titel:
  Antworten mit Zitat      
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 Smile .

Danke nochmals.

Werde wohl nicht darum kommen, das einfach auszuprobieren.

Grüsse
Randig
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 06.03.2012, 08:55     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 06.03.2012, 12:24     Titel: Re: Riesengrosse Polynome als Funktionen übergeben
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.