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

Kegelschnitt - Fit

 

zyx
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2018, 15:24     Titel: Kegelschnitt - Fit
  Antworten mit Zitat      
Hallo an alle,

es geht um folgendes:

Der Funktion [s,err2] = kegelfit(xd,yd) werden y und x Daten übergeben.

Berechnen Sie den besten Fit für die Koeffizienten

z(x,y) = s_1*x^2 + s_2*2*x*y + s_3*y^2 + s_4*x + s_5*y + s_6

Mit einer for Schleife über k=[1..6] können Sie jeweils abwechseld den
kten Koeffizient sk auf 1 setzen, auf die rechte Seite bringen und das jeweilige Gleichungssystem lösen.

Mein Code ist bis jetzt:

Code:

function [s] = kegelfit(xd,yd)
s = ones(size(1,6));
for k = 1:6
s(k) = -1;
z = [s(1).*xd.^2,s(2).*2.*xd.*yd,s(3).*yd.^2,s(4).*xd,s(5).*yd,s(6).*ones(size(xd))];
s = z(~k) \ z(k);
end
end
 


die Fehlermeldung ist Index exceeds Matrix dimensions. Liegt es an der Indizierung von s? Habe auch schon s(k==1) ,... versucht. Ist dieser Ansatz überhaupt richtig?

Vielen Dank für eure Hilfe! Smile
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.06.2018, 23:38     Titel: Re: Kegelschnitt - Fit
  Antworten mit Zitat      
Hallo zyx,

Smile

Code:
s = ones(size(1,6));
% Nein, nicht size()!
s = ones(1, 6);

"size(1,6)" gibt die Länge der 6. Dimension des Skalars 1 zurück. Laut Definition habe alle Arrays in Matlab beliebig viele Dimensionen der Länge 1, also ergibt "ones(size(1, 6))" einen Skalar, nämlich 1, und keinen Vektor.

Der Debugger ist das perfekte Tool um solche Fehler zu finden:
Code:

Nachdem der Debugger aktiviert ist, stoppt er Matlab bei einem Fehler. Dann kannst Du die Werte der Variablen z.B. im Commandwindow untersuchen. Es ist auch hilfreich Zeile für Zeile durch den Code zu gehen und zu beobachten, was genau geschieht.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2018, 07:46     Titel:
  Antworten mit Zitat      
Hallo Jan!

Vielen Dank für deine schnelle Antwort! Danke auch für den Tipp, das ist mir wohl in der Hitze des Gefechts passiert.

Auf den Debugger hat mich auch Harald schon aufmerksam gemacht. Ich habe damit schon herumprobiert, allerdings müsste ich bei meiner Browserversion von Matlab soweit ich weiß vor und nach jeder Zeile diese Befehle eingeben und danach wieder löschen... also sehr umständlich für das, dass ich keine ordentliche Ausgabe bekomme (meist nur einzelne Buchstaben, Zeichen).

Vielen Dank auf jeden Fall für deine Hilfe! Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
zyx
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.06.2018, 15:19     Titel:
  Antworten mit Zitat      
Hallo,

also ich habe nun folgenden Code:

Code:

function [s] = kegelfit(xd,yd)
for k = 1:6
s = ones(1,6);
s(k) = -1;
z = [s(1).*xd.^2, 2*s(2).*xd.*yd, s(3).*yd.^2, s(4).*xd, s(5).*yd, s(6).*ones(size(xd))];
sk = z;
sk(:,k) = [];
s = sk \ z(:,k);
end
end


Es funktioniert soweit, allerdings werden nur 5 Gleichungssysteme berechnet, weshalb auch die Ergebnisse nicht ganz richtig sind.
Eigentlich müsste die Schleife doch alle 6 Koeffizienten durchgehen oder?

Vielen Dank im Voraus für eure Hilfe!

Grüße
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: 19.06.2018, 12:22     Titel:
  Antworten mit Zitat      
Hallo zyx,

Bitte erkläre, wieso du meinst, dass nur 5 Systeme berechnet werden.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 80
Anmeldedatum: 10.04.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.06.2018, 13:26     Titel:
  Antworten mit Zitat      
Hallo Jan,

ich habe sechs Unbekannte, die abwechseln aus der Koeffizientenmatrix
[m x n] herausgenommen werden. Somit ist mein Ergebnis kein [n x 1] Vektor mehr sondern ein [n-1 x 1] Vektor.

Ich habe auch schon versucht, die Unbekannte nicht auszuschneiden, sondern durch 0 oder 1 zu ersetzen.
Code:
sk(:,k) = 0;


Verstehe ich hier was falsch?

Danke für deine Hilfe! Smile
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.