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

Polyift numerical properties and symbolic polynom

 

Irenaius
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2015, 10:51     Titel: Polyift numerical properties and symbolic polynom
  Antworten mit Zitat      
Hola,

wenn ich die Funktion "polyfit" verwende erhalte ich oft einen Fehler über "[...] badly conditionend [...]".
Während ich den Fehler mathematisch nicht voll verstehe, gibt die Hilfe den Lösungsvorschlag centering and scaling zu verwenden. Das Verwenden der mu(1) und mu(2) verringert die Größe der Faktoren, der Fehler bleibt aus. Warum eigentlich?
Wenn ich aber nun mit Hilfe der Polynomfaktoren eine symbolische Funktion baue und diese dazu plotte kommt was ziemlich schräges raus. Weiß jemand was ich falsch mache?

Anbei ein Beispiel, angelehnt an das polyfit Beispiel aus Mathworks, mit case 1 mit mu und case 2 ohne mu.

Meine Annahme ist, dass ich mu irgendwie in das symbolische Polynom einfließen lassen muss.

Code:

clear all;close all;clc;
year = (1750:25:2000)';
pop = 1e6*[791 856 978 1050 1262 1544 1650 2532 6122 8170 11560]';
T = table(year, pop);
order =5;

n = input('Enter 1 or 2: ');
switch n
    case 1
        [p,~,mu] = polyfit(T.year, T.pop, 5)
        f = polyval(p,year,[],mu);
    case 2
        [p] = polyfit(T.year, T.pop, order)
        f = polyval(p,year);
end

hold on
plot(year,f,'b','LineWidth',3)
plot(year,pop,'o')

syms x
f_symb = p(end);
for i = 1:order
    f_symb = f_symb + p(end-i) .* x.^i;
end

fsymb_eval = double(subs(f_symb,x,year));
plot(year,fsymb_eval,'--r','LineWidth',4)
 


Danke.
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: 17.12.2015, 14:13     Titel: Re: Polyift numerical properties and symbolic polynom
  Antworten mit Zitat      
Hallo Irenaius,

In polyfit wird ein lineares Gleichungssystem gelöst. Wenn die X-Werte groß sind, tritt dabei wegen der numerischen Auslöschung ein schlöecht konditioniertes System auf. Z.B. bei x = 1e6:1e6+10;
Für das berechnete Polynom kann man die X-Werte aber auch zentrieren und normalisieren:
Code:
xx = (x - mean(x)) ./ std(x);

Jetzt hat man X-Werte, die recht symmetrisch und dicht um 0 herum liegen und das Gleichungssystem ist stabil lösbar. Allerdings bekommt man nun andere Koeffizienten. Das kann man aber später berücksichtigen, wenn man z.B. per polyval wieder Werte des Polynoms berechnen möchte. Entweder mu als Input anfügen (siehe Dokumentation) oder die gewünschten X-Werte manuell anpassen:
Code:
x = (xx + std(x)) + mean(x);


Zitat:
Wenn ich aber nun mit Hilfe der Polynomfaktoren eine symbolische Funktion baue und diese dazu plotte kommt was ziemlich schräges raus. Weiß jemand was ich falsch mache?

Bist Du sicher, dass Du etwas falsch machst? Wieso glaubst du das und was genau ist "schräg"?
Zitat:
Meine Annahme ist, dass ich mu irgendwie in das symbolische Polynom einfließen lassen muss.

Korrekt. Siehe oben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Irenaius
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 15.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.12.2015, 17:40     Titel:
  Antworten mit Zitat      
Moin Jan,

Code:
f_symb = f_symb + p(end-i) .* ((x-mu(1)) ./ mu(2)).^i;
führt dazu, dass die Ergebnisse wieder konsistent sind. Das funktioniert also und es sieht auch nichts mehr "schräg" aus.

Was mir jetzt nicht klar ist, ist die physikalische Bedeutung der Zentrierung und Normalisierung. Die Koeffizienten, die sich durch Letzeres ändern, haben ja auch eine Bedeutung (zum Beispiel Gewichtung des quadratischen oder kubischen Anteils in einer Ansteuerungskurve). Ändere ich damit nicht diesen Zusammenhang?

Vielen Dank für die schnelle und aufschlussreiche Antwort,
Ireniaus
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.