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

Abstand Punkt-Fläche als Extremwertaufgabe

 

arser
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.05.08
Wohnort: Nürnberg
Version: 7.5
     Beitrag Verfasst am: 06.06.2008, 11:24     Titel: Abstand Punkt-Fläche als Extremwertaufgabe
  Antworten mit Zitat      
Hallo,
Wie kann ich in Matlab den Abstand eines Punktes im Raum zu einer Fläche als Extremwertaufgabe formulieren?
Punkt: P0(X0,Y0,Z0)
Ebene: ax+by+cz=d
In etwa so: Abstandquadrat d(x,y,z)=(x-X0)^2+(y-Y0)^2+(z-Z0)^2 unter Nebenbedingung ax+by+cz=d.
Aber wie bringe ich das Matlab bei? Und mit welcher Funktion?
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 06.06.2008, 14:44     Titel:
  Antworten mit Zitat      
Hallo arser,

da Du eine nichtlineare Funktion hast und eine Nebenbedingung kommt wohl nur fmincon aus der Optimization Toolbox infrage (wenn man nicht das Minimum einfach ausrechnen will).

Dann hast Du eigentlich schon alles geliefert: die Funktion, die Konstanten und die Nebenbidingung. Du musst nur die Variablen x, y und z zu einem Vektor v zusammenfassen. Insgesamt etwa so:

Code:
function FindeMinimalenAbstand

P = [1;2;3];
a=1;b=-1;c=2;d=17;

Startvektor = [1;1;1];

options = optimset('Display','Iter');
[v_opt, Abstand_opt] = fmincon(@Abstand,Startvektor,[],[],[a b c],d,[],[],[],options);

Abstand_opt

function d = Abstand(v)

d = sum((v-P).^2);

end
end


Speichern und laufen lassen!

Viel Spaß und herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
arser
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.05.08
Wohnort: Nürnberg
Version: 7.5
     Beitrag Verfasst am: 06.06.2008, 23:48     Titel:
  Antworten mit Zitat      
Läuft bei mir so nicht. Auch wenn ich
Code:

function d = Abstand(v)

d = sum((v-P).^2);

end
 

als .m anlege. "Abstand_opt" wird rot unterstrichen.

Mache ich etwas falsch? muss die Nebenbedingung nicht auch als .m vorliegen?
Private Nachricht senden Benutzer-Profile anzeigen
 
arser
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.05.08
Wohnort: Nürnberg
Version: 7.5
     Beitrag Verfasst am: 07.06.2008, 22:50     Titel:
  Antworten mit Zitat      
OK! Vielen Dank!

sum((v-P).^2) muss ja noch "gewurzelt" werden.

Das Ergebnis ist aber nicht immer richtig. Heisst fast richtig. Es ist entweder auf 4 Nachkommastellen genau oder liegt bis zu 0.5 daneben.
Gibt es Möglichkeiten das Ergebnis genauer zu bekommen?
Habe es mit 'TolFun',1e-8 wie in der Matlab-Hilfe versucht-bringt nichts.
Private Nachricht senden Benutzer-Profile anzeigen
 
arser
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 29.05.08
Wohnort: Nürnberg
Version: 7.5
     Beitrag Verfasst am: 09.06.2008, 15:15     Titel:
  Antworten mit Zitat      
Mein (Vorzeichen-)Fehler!
Läuft einwandfrei. Danke nochmals und hier ein Beispiel zu nicht Linearer Nebenbedingung auf Basis des von Bijick gemachten Vorschlags:
Code:
function Minabst_Kgl

P = [0;0;0];        % Punkt, dessen kürzester Abstand zur Kugeloberfläche gesucht wird
Q = [0;0;6];        % Verschiebung der Kugel im Raum
R=1;                % Radius der Kugel
Startvektor = [1;1;1];
options = optimset('Display','Iter');
[x_opt, Abstand_opt] = fmincon(@abst_kgl,Startvektor,[],[],[],[],[],[],@nb,options);

Abstand_opt

function d = abst_kgl(x)
d = sqrt(sum((x-P).^2));
end

function [c, ceq]=nb(x)
c=[];
ceq=(x(1)-Q(1,1))^2+(x(2)-Q(2,1))^2+(x(3)-Q(3,1))^2-R^2;
end

end


Berechnet den kürzesten Abstand eines Punktes im Raum zur Oberfläche einer Kugel.
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 10.06.2008, 12:33     Titel:
  Antworten mit Zitat      
Hallo arser,

sorry, dass Du hier so ein Selbstgespräch führen musstest. Anscheindend klappt aber jetzt alles?

Noch zwei Bemerkungen:
1.
Code:
options = optimset('Display','Iter');


ist nicht nötig, wenn man nur am Ergebnis und nicht am Verfahren interessiert ist.

2. "Abstand_opt" wird rot unterstrichen, weil das Ergebnis am Bildschirm ausgegeben werden soll. Der Matlab-Editor vermutet ein vergessenes Semikolon, das aber mit Bedacht nicht gesetzt wurde.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
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.