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

Quadratische 3D Regressionsfäche erzeugen

 

Henry
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.04.12
Wohnort: Hamburg
Version: 7.10.0 (R2010a)
     Beitrag Verfasst am: 24.04.2012, 11:30     Titel: Quadratische 3D Regressionsfäche erzeugen
  Antworten mit Zitat      
Hallo liebe Matlab Freunde,

ich arbeite seit zwei Wochen an einem Datenauswerteprogramm zur Leistungsoptimierung eines Dampfmotors. Die Daten werden aus einer SPS ausgelesen und in eine CSV Datei gespeichert. Mein Programm importiert diese Daten in Matlab und filtert die unsinnigen Werte (Motorstillstand, Anfahrzustände und sonstige abweichende Betriebspunkte) heraus. Im Anschluss möchte ich die überbleibenden Daten, zur Übersicht der Leistungsbereiche in den verschiedenen Betriebspunkten, in einem 3D Plot darstellen.

In den dazugehörigen 2D Plots habe ich mit polynomischen Regressionskurven vom Grad 2 gearbeitet um Maximalpunkte (max. Leistung) zu erfassen. Hierbei habe ich für jede mögliche Dampfmenge ein Plot erstellt (quasi das 3D Plot in Scheiben geschnitten).

Nun habe ich versucht die Messdaten dreidimensional zu plotten, wobei in den meisten Funktionen wie z.B. gridfit immer nur zwischen den Daten interpoliert wird. Da es sich in meinem Beispiel aber um Messdaten handelt, bei denen trotz der Filterung immer noch Ausweicher auftreten können, würde ich diese jetzt gern so plotten, dass ich eine Ausgleichsfläche vom Grad 2 in x sowie in y Richtung zwischen den Messpunkten habe.
Für lineare 3D Regression habe ich unter folgendem Link

http://www.mathworks.com/matlabcentral/fileexchange/12395

ein Programm gefunden, dass dies schon einmal linear kann.

Im Anhang habe ich hierzu drei Plots hochgeladen. In den ersten zwei zeigt es die interpolierten Flächen, wobei deutlich zu erkennen ist, dass das Tal bei ca. 100% Drehmoment nicht sein kann. Im dritten Plot ist dann die lineare Variante zu sehen, die mir nichts nützt, da ich einen quadratischen Verlauf erwarte.

Hier mal mein Programm für das interpolierte Plot mit der Funktion gridfit (ist mit angehangen).

Code:

%% Messwerte x_3D, y_3D und z_3D aus txt Datei importieren
xi=min(x_3D):0.1:max(x_3D);
yi=min(y_3D):0.1:max(y_3D);

[zg,xg,yg] = gridfit(x_3D,y_3D,z_3D,xi,yi,'tilesize',...
120,'overlap',0.25);
surf(xg,yg,zg)
shading interp
colormap(jet(256))
camlight right
lighting phong
title '3D Plot Leistungskurve über Dampfmenge und Drehmoment';
xlabel('Dampfmenge[t/h]');
ylabel('Drehmoment[%]');
zlabel('Leistung[KW]');
 


Messwerte.txt
 Beschreibung:
Messwerte x y z untereinander in einer Spalte

Download
 Dateiname:  Messwerte.txt
 Dateigröße:  269.71 KB
 Heruntergeladen:  1355 mal
Lineare_3D_Regression.jpg
 Beschreibung:
plot mit fit_3D_data (Funktion von Mathworks)

Download
 Dateiname:  Lineare_3D_Regression.jpg
 Dateigröße:  129.77 KB
 Heruntergeladen:  1111 mal
gridfit.m
 Beschreibung:
Funktin gridfit zum erzeugen von 3d Flächen

Download
 Dateiname:  gridfit.m
 Dateigröße:  34.17 KB
 Heruntergeladen:  662 mal
Interpolierte_Flaeche2.jpg
 Beschreibung:
gedrehte interpolierte Fläche

Download
 Dateiname:  Interpolierte_Flaeche2.jpg
 Dateigröße:  103.32 KB
 Heruntergeladen:  1064 mal
Interpolierte_Flaeche.jpg
 Beschreibung:
interpolierte Fläche

Download
 Dateiname:  Interpolierte_Flaeche.jpg
 Dateigröße:  110.22 KB
 Heruntergeladen:  1034 mal
Private Nachricht senden Benutzer-Profile anzeigen


Henry
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 24.04.12
Wohnort: Hamburg
Version: 7.10.0 (R2010a)
     Beitrag Verfasst am: 25.04.2012, 11:06     Titel: Problem gelöst
  Antworten mit Zitat      
So hab jetzt noch einmal etwas rumgesucht und eine ganz brauchbare Lösung gefunden.

1. Alle die im Besitz des Surface Fitting Tool's sind können über
Code:

[fitresult, gof]=sftool(x_3D,y_3D,z_3D);
 

die Daten direkt in die Toolbox laden und dann fröhlich interpolieren oder approximieren, je nachdem wie die Problemstellung ist.

2. Allen die diesen Luxus nicht haben, hilft die folgende Funktion weiter:

Code:

function [fitresult, gof] = square_3D_regression(x_3D, y_3D, z_3D)
% erstellt eine quadratische Regressionsfläche durch Messpunkte

% Fitten der Daten für: 'Leistungsdiagramm über Dampfmenge und Drehmoment'.
ft = fittype( 'poly22' );
opts = fitoptions( ft );
opts.Lower = [-Inf -Inf -Inf -Inf -Inf -Inf];
opts.Upper = [Inf Inf Inf Inf Inf Inf];
opts.Weights = zeros(1,0);
[fitresult, gof] = fit( [x_3D, y_3D], z_3D, ft, opts );

% Plotten der gefitteten Daten
figure( 'Name', 'Leistungsdiagramm über Dampfmenge und Drehmoment' );
plot( fitresult, [x_3D, y_3D], z_3D, 'Style', 'PredObs', 'Level', 0.990000 );

xlabel( 'Dampfmenge[t/h]' );
ylabel( 'Drehmoment[%]' );
zlabel( 'Leistung[KW]' );
grid on;
 


Vielleicht hilft es ja mal jemanden weiter Wink .

Regessionsflaeche.fig
 Beschreibung:
So schaut das dann am Ende bei mir aus.

Download
 Dateiname:  Regessionsflaeche.fig
 Dateigröße:  131.7 KB
 Heruntergeladen:  819 mal
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 - 2024 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.