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

Abschnittsweise interpolieren!

 

BunterKunt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2011, 08:08     Titel: Abschnittsweise interpolieren!
  Antworten mit Zitat      
Moin,
ich stehe vor einem kleinem Problem! Ich habe mir einen Matlab Code kreiert, mit dem ich mir einen Graphen erzeuge.Mit dem polyfit und dem interp1 Befehlen habe ich mir nun eine interpolierte Gerade aus den Messpunkten erzeugt.
Was ich nun zusätzlich machen will ist, dass ich in einem bestimmten X-Abschnitt nicht gerade (also Polynom 1. Grades) interpolieren möchte,. sondern auch z.B. eine Steigungskurve mit Polynom 2.Grades darstellen möchte.

Kann man das irgendwie mit einer Befehlskette in einem Plot realisieren??

Ich bitte darum in meinem Code die Eval-Befehle zu missachten^^
Code:
       eval(['poly.nmot',num2str(temp_nmot), '= polyfit(ps_struct,rl_struct,degree)']);
        temp_m= eval(['poly.nmot',num2str(temp_nmot),'(1)']);
        temp_b= eval(['poly.nmot',num2str(temp_nmot),'(2)']);

        f_p=@(x)temp_m*x+temp_b;
        eval(['f = temp_m*ps_struct+temp_b']);
        %2D-Plot aller Graphen=> damit extrapoliert wird muss die Methode
        %und der Befehl 'extrap' mit 2 " ' " ausgeführt werden
        xi=[0; max_ps];
        eval(['yi=interp1(ps_struct,f,xi,''spline'',''extrap'')']);
        figure(6);
        eval('plot(xi,yi)');


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2011, 11:00     Titel: Re: Abschnittsweise interpolieren!
  Antworten mit Zitat      
Hallo BunterKunt,

Bei den EVALs zieht's mir die Schuhe aus. Brrr.
Ich kann die EVALs deshalb nicht ignorieren, weil das Lesen des Codes so stark behindern, dass ich nichts mehr erkennen kann, was das Programm überhaupt macht. Ich räume deshalb erstmal auf:
Code:
name = ['nmot', num2str(temp_nmot)];
poly.(name) = polyfit(ps_struct, rl_struct, degree);
temp_m =  poly.(name)(1);
temp_b = poly.(name)(2);

f_p = @(x)temp_m * x + temp_b;
f = temp_m * ps_struct + temp_b;
xi = [0; max_ps];
yi = interp1(ps_struct, f, xi, 'spline', 'extrap');
figure(6);
plot(xi,yi);

So. Darüber kann ich jetzt diskutieren, vielleicht fällt es anderen ja auch leichter so.

Was ist nun genau Deine Frage? Du möchtest eine gefittete Parabel als Kurve anzeigen lassen? Das ginge am besten mit POLYVAL:
Code:
y = rand(1, 10);
x = 1:10;
p = polyfit(x, y, 2);
x2 = linspace(x(1), x(end), 100);  % 100 points are smoother
y2 = polyval(p, x2);

plot(x, y, 'b');
hold('on');
plot(x2, y2, 'r')

Ich kann wirklich nur von den EVALs abraten. Sie machen die Programme so unübersichtlich, dass man keine einfachen Lösungen mehr hinbekommt. Auch Matlab selbst muss bei der Bearbeitung härter arbeiten als bei richtigem Code.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
BunterKunt

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.10.2011, 11:52     Titel:
  Antworten mit Zitat      
Hey Jan, also erstmal danke habe den Code mal ausprobiert und funktioniert.

Das Laster mit dem Eval Wirr Warr stammt noch aus ersten Programmierzeiten...Wink nicht übel nehmen. Habs jetzt auch rausgenommen^^

Also was ich konkret machen möchte.

Ich habe eine interpolierte Gerade (1.Grades); sagen wir x hat Werte von 1-10 (y-werte von 0.023-2.1==> deshalb interpolieren). Nun möchte ich, dass bis x=5 die Gerade (1.Grades) dargestellt wird und aber danach von x=5-10 quadratisch (oder höher) interpoliert wird.

Was problematisch wird es bei den y-Werten! Bei der Interpolation werden ja auch die y-Werte interpoliert. D.h ich habe bei x=5 einen Sprung in meinem Plot weil die y-Werte der ersten Interpolierten mit der zweiten Interpolierten nicht mehr übereinstimmen.
Kann ich da irgendwie einen Übergang schaffen?? oder anpassen??


Grüße BunterKunt
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 26.10.2011, 13:46     Titel:
  Antworten mit Zitat      
Hallo BunterKunt,

Du möchtest also zwei unterschiedliche Kurven so fitten, dass sie bei einem bestimmten X-Wert stetig und stetig differenzierbar aneinanderhängen. Oder auch mehrfach stetig differenzierbar?

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.