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

Surface fitting Matrix

 

Cappo.c
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 14.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2020, 11:50     Titel: Surface fitting Matrix
  Antworten mit Zitat      
Hallo,
ich habe einen Surface fit den ich mir nun als Matrix darstellen lassen möchte.
Fittype ist `poly22`, ich kann mir die Funktion auch ausgeben lassen und lautet wie folgt: ans = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2 .
Wie schaffe ich es jetzt mir mit dieser Funktion und den zugehörigen Koeffizienten eine Matrix mit den Z-Werten zu erstellen? (x und Y Werte sollen die gleichen bleiben wie im Fit) Ich möchte im Prinzip nur aus meiner gefitteten Oberfläche die Werte herauslesen können.
Probiert habe ich folgendes:
Code:
%
 
 %% Fit: 'FitFun'.
[xData, yData, zData] = prepareSurfaceData( x, y, Fitmatrix );

% Set up fittype and options.
ft = fittype( 'poly22' );

% Fit model to data.
[fitresult, gof] = fit( [xData, yData], zData, ft );
            coeff=coeffvalues(fitresult)
            p00=coeff(1);
            p10=coeff(2);
            p01=coeff(3);
            p20=coeff(4);
            p11=coeff(5);
            p02=coeff(6);
            sf([x,y]) = p00 + p10*x + p01*y + p20*x^2 + p11*x*y + p02*y^2;
           
% Plot fit with data.
figure( 'Name', 'FitFun' );
h = plot( fitresult, [xData, yData], zData );

formula(fitresult)
coeff=coeffnames(fitresult)
coeff=coeffvalues(fitresult)

 


Vielen Dank für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.06.2020, 14:03     Titel:
  Antworten mit Zitat      
Hallo,

man kann deinen Code mangels Daten / benötigter Funktionen nicht ausführen. Welche Probleme treten also bei der Ausführung auf?

Die Antwort auf die Frage scheint mir feval zu sein:
https://www.mathworks.com/help/curvefit/sfit.feval.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cappo.c
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 14.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2020, 17:00     Titel:
  Antworten mit Zitat      
Er zeigt mir an Matrix dimensions must agreed. Bei einem Curvefit funktioniert diese Variante, sodass ich dann einfach in einer Schleife x Durchlaufen lasse und die Funktion mir den y Wert ausrechnet. Aber in der 3 Dimensionalen als Oberfläche funktioniert dies leider nicht. Leider kann ich den kompletten Code nicht hochladen, da ich für die Fittingmatrix eine CSV. Datei einlese und verwende. Auf die feval Funktion bin ich auch schon gestoßen nur weiß ich nicht so Recht was für Argumente ich da einsetzten soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.06.2020, 17:29     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Er zeigt mir an Matrix dimensions must agreed.

In welcher Zeile?

Zitat:
Aber in der 3 Dimensionalen als Oberfläche funktioniert dies leider nicht.

Was genau funktioniert nicht? feval? Es gibt ein feval speziell für surface fits, also sollte es auch funktionieren.

Zitat:
Leider kann ich den kompletten Code nicht hochladen, da ich für die Fittingmatrix eine CSV. Datei einlese und verwende.

.csv zippen und anhängen?

Zitat:
Auf die feval Funktion bin ich auch schon gestoßen nur weiß ich nicht so Recht was für Argumente ich da einsetzten soll.

Ich würde die Syntax z = feval(sfun,[x,y]) mit den x-y - Werten, die du einsetzen willst, versuchen. Wenn das nicht klappt, hilft am ehesten ein reproduzierbares Beispiel.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Cappo.c
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 14.04.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2020, 18:07     Titel:
  Antworten mit Zitat      
Hallo, ersteinmal vielen vielen dank für die schnelle Hilfe und zahlreichen Tipps. Ich denke ohne ein Beispiel komme ich hier nicht weiter, deshalb habe ich den Code nochmals komplett eingefügt und zudem noch eine CSV. die eingelesen wird. Feval erwartet im Argument den fittype oder sfit? Die unterscheidung der beiden funktionen sind mir leider nicht ganz klar.


Code:
%Mein Programm
filename = 'test.csv';
T = readmatrix(filename, 'NumHeaderLines', 52); % Einlesen der csv. Datei ab Zeile 53.


length_y=length(T(:,1)); % Laenge y_Richtung
length_x=length(T(1,:)); % Laenge x_Richtung
x=zeros(1,length_x);
y=zeros(1,length_y);
z_real=zeros(1,length_x); % Array fuer das Realprofil
z_fit=NaN(1,length_x); % Array fuer das Referenzprofil an das gefittet werden soll


%% Schleife für die Bestimmung der Fittingmatrix

for n=1:1:length_y
   
    y(n)=n;

   
    for i=1:1:length_x
       
        x(i)=i;
        z_real(i)=T(n,i); % Fuellen der z-Werte des Realprofils fuer die Zeile n
    end
   
    for i=1:1:600
       
        Fitmatrix(n,i)=z_real(i); % Fuellen der Referenzwerte des FitArrays an der linken Seite
       
    end
   
   
    for i=length_x-600:1:length_x
       
        Fitmatrix(n,i)=z_real(i); % Fuellen der Referenzwerte des FitArrays an der rechten Seite
       
    end

end  
 %% Fit: 'FitFun'.
[xData, yData, zData] = prepareSurfaceData( x, y, Fitmatrix );

% Set up fittype and options.
ft = fittype( 'poly22' );

% Fit model to data.
[fitresult, gof] = fit( [xData, yData], zData, ft );
            z = feval(ft,[x,y])


test.rar
 Beschreibung:

Download
 Dateiname:  test.rar
 Dateigröße:  29.99 MB
 Heruntergeladen:  278 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.06.2020, 10:35     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Feval erwartet im Argument den fittype oder sfit?

Die Doku sagt sehr eindeutig letzteres. Vor allem: wie soll denn ersteres gehen, wenn der Fit noch gar nicht angepasst ist? Du brauchst also:
Code:
z = feval(fitresult,XY)

wobei XY eine Matrix mit 2 Spalten ist, 1. Spalte x-, 2. Spalte y-Werte.

[x,y] ist ein langer Zeilenvektor. Wenn x und y die gleiche Länge hatten (was aber nicht der Fall ist), dann könntest du mit [x', y'] die benötigte Matrix erstellen.

Beispielsweise geht
Code:
z = feval(fitresult,[xData, yData]);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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.