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

Hilfe..... Newton verfahren

 

kg270
Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.12.2015, 13:34     Titel: Hilfe..... Newton verfahren
  Antworten mit Zitat      
Ich brauche bitte ganz dringend Hilfe, denn ich muss in meinen Seminar eine Aufgabe zum Newton Verfahren programmieren und habe wirklich null Ahnung, wie man sowas macht.

Aufgabe ist:
Verwenden Sie das Newtonverfahren, um den Umkreis eines gegebenen Dreiecks sowie die möglichen Schnittpunkte zweier gegebener Kreise näherungsweise zu bestimmen. Diskutieren Sie außerdem das lokale Konvergenzverhalten für verschiedene Dreiecke und Kreise.

Für jede Hilfe bin ich sehr dankbar.
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: 21.12.2015, 17:12     Titel: Re: Hilfe..... Newton verfahren
  Antworten mit Zitat      
Hallo kg270,

Wie können wir Dir helfen?
Hast Du schon mal in Matlab programmiert? Fehlt Dir ein bestimmter Schritt oder eine mathematische Definition? Was hast Du bisher versucht?

Auf "ganz dringend" und "wikrlich null Ahnung" kann man nichts sinnvolles antworten. Wir können die Aufgabe nicht einfach für Dich lösen, denn Du könntest das ja nicht abgeben ohne zu täuschen.

Viele Grüße, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
kg270
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2015, 12:06     Titel:
  Antworten mit Zitat      
Naja, ich glaube ich weiß was ich machen soll, aber ich weiß halt nicht, wie man das bei Matlab schreiben soll.

Meine Vorgehensweise wäre jetzt zum Umkreis von Dreiecken:

Ich nehme mir ein beliebiges Dreieck, was ich auch schon hinbekommen habe:

function f = dreieck( x1,y1,x2,y2,x3,y3 )

xInt=[x1,x2,x3,x1];
yInt=[y1,y2,y3,y1];


f=plot(xInt,yInt);
end

Dann muss ich ja jetzt um den Umkreis zu bestimmen "nur" den Schnittpunkt der Mittelsenkrechten finden, was bedeutet ich muss irgendwie diese Mittelsenkrechten programmieren.
Wenn ich das denn habe, wird dann der Schnittpunkt der Mittelsenkrechten auf die x-Achse verschoben und ich kann dann das Newton Verfahren anwenden.

Jetzt ist aber die Frage, wie soll ich das denn Matlab beibringen =(
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 22.12.2015, 12:21     Titel:
  Antworten mit Zitat      
Ich beziehe mich jetzt erstmal auf die erste Aufgabe Smile

Zitat:
Verwenden Sie das Newtonverfahren, um den Umkreis eines gegebenen Dreiecks zu bestimmen


Die analytische Lösung kannst du hier https://de.wikipedia.org/wiki/Umkreis unter dem Punkt Radius einsehen (dient später zur Überprüfung).

Soweit so gut, ich schätze du solltest folgendes machen. Du hast drei gegebene Punkte (die des Dreiecks). Drei Punkte definieren einen Kreis eindeutig! Such dir am besten mal die Kreisgleichung raus. Mit den drei Punkten und der Kreisgleichung kannst du dann ein Gleichungssystem aufstellen, welches du mit dem Newton-Verfahren löst.

Stell erst mal das Gleichungssystem mit Zettel und Stift auf, dann reden wir über das Newton-Verfahren Wink
Private Nachricht senden Benutzer-Profile anzeigen
 
kg270
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2015, 12:51     Titel:
  Antworten mit Zitat      
Na gut, dass bekomme ich hin Wink :

I: (x1 - m1)^2 + (y1 - m2)^2 = r^2

II: (x2 - m1)^2 + (y2 - m2)^2 = r^2

III: (x3 - m1)^2 + (y3 - m2)^2 = r^2

mit den Punkten: A = (x1;y1) B = (x2;y2) C = (x3;y3)



Und wie löst man das jetzt???
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 22.12.2015, 13:06     Titel:
  Antworten mit Zitat      
Das sieht ja schonmal gut aus. Du hast jetzt also ein Gleichungssystem mit 3 Gleichungen und 3 Unbekannten. Bring es noch in die Form:

F(m1,m2,r)=0 <- Nullvektor

Jetzt kannst du es mit Newton lösen. Sollst du das Verfahren selber programmieren oder kannst du Matlab-Befehle verwerden? Das Newton-Verfahren ist in Matlab unter dem Befehl fsolve http://de.mathworks.com/help/optim/ug/fsolve.html realisiert.


EDIT: Falls du es selber programmieren sollst, unter Das Newton-Verfahren im Mehrdimensionalen auf https://de.wikipedia.org/wiki/Newton-Verfahren findest du alles was du brauchst.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
kg270
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.12.2015, 13:39     Titel:
  Antworten mit Zitat      
Ich weiß, dass ich mich gerade super dumm anstelle Embarassed , aber ich weiß gerade nicht, wie ich das in diese Form mit dem Nullvektor bekomme.
Klar ich muss das r^2 rüberholen, aber dann habe ich doch immer noch kein schönes Gleichungssytem.

Ich bin verzweifelt.... Sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 22.12.2015, 14:01     Titel:
  Antworten mit Zitat      
Mit "Schönem Gleichungssystem" meinst du wahrs den linearen Fall,

A*x=b , wobei A eine quadratische Matrix ist und x der Vektor mit den Unbekannten.

Die Lösung davon kann man easy mit x=A\b berechnen in Matlab. Leider hast du hier aber ein nichtlineares Gleichungssystem, welches man in der Form F(x)=0 schreibt. Nichtlineare GS löst man mit dem Newton-Verfahren.

Wenn du r² rübergeholt hast, hast du alles richtig gemacht und die Form passt schonmal. Gib mal in die Matlab Konsole "ver" ein und schau ob du die optimization toolbox hast.

kg270solution.m
 Beschreibung:

Download
 Dateiname:  kg270solution.m
 Dateigröße:  659 Bytes
 Heruntergeladen:  454 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
huhu0815
Forum-Century

Forum-Century


Beiträge: 141
Anmeldedatum: 20.02.14
Wohnort: Dresden
Version: R2013b, R2014b, R2016b, R2018a
     Beitrag Verfasst am: 22.12.2015, 15:23     Titel:
  Antworten mit Zitat      
Hi

ich hatte mal einen ähnlichen Fall. Ich habe mir den NewtonRaphson Algo selbst fix zusammen programmiert, ohne den beliebten und sehr mächtigen Solver der optimiziation Toolbox. Aber für das kleine Problem brauchst du den eig nicht.
GLS zu 0 setzen, Jacobi Matrix bilden, alles in den folgenden Code werfen bzw ersetzen und anschmeißen

Code:
function [x,indx] = NewtonRaphson()
% Das Programm stellt den Newton Raphson Algorithmus dar
% Gegeben sind drei nichtlineare Gleichungen
%
%  g1 = x1^2 - x2^2 + x3^2 - 11 = 0
%  g2 = x1*x2 + x2^2 - 3*x3 - 3 = 0
%  g3 = x1 - x1*x3 + x2*x3 - 6 = 0
%
% Annahme wird sein, dass wir den Algo mit der Bedingung x1=x2=x3 = 1
% starten
%
% Die Jacobi Matrix lautet hier:
%
% J=[2x1  -2x2     2x3
%    x2   x1+2x2   -3
%    1-x3   x3    -x1+x2];  


% AB
x=[1; 1; 1];

% Algo

del = 1;
indx = 0;
tol = 1e-6;    % Abbruchkriterium
while del>tol

   g = [x(1)^2 - x(2)^2 + x(3)^2 - 11; ...
        x(1)*x(2) + x(2)^2 - 3*x(3) - 3  ; ...
        x(1) - x(1)*x(3) + x(2)*x(3) - 6];
   J = [2*x(1) -2*x(2) 2*x(3); ...
        x(2) x(1)+2*x(2) -3; ...
        1-x(3) x(3) -x(1)+x(2)];
   
   delx = -inv(J)*g;
   x = x + delx;

   del = max(abs(g));
   indx = indx + 1;

end


P.S.: google einfach mal nach NonLinear Equation with matlab...da kommen schon einige pdf's raus Wink
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: 22.12.2015, 16:45     Titel:
  Antworten mit Zitat      
Hallo kg270,

Wieso meinst Du, dass Du dann "kein schönes Gleichungssystem" hast?
Poste doch mal den Matlab Code, den Du damit hinbekommst.

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

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.12.2015, 12:10     Titel:
  Antworten mit Zitat      
Okay, irgendwas stimmt bei meinem Code nicht.

Code:
function nlGLS
N=20;
xi=[1 0 0]    % Drei Eckpunkte des Dreiecks
yi=[0 1 0]
p=[a,b]       % Mittelpunkt des Kreises/ Schnittpunkt der Mittelsenkrechten
for i=1:N
    F(a,b,r)=0
    F=[(xi(1)-a)^2+(yi(1)-b)^2-r^2;(xi(2)-a)^2+(yi(2)-b)^2-r^2;(xi(3)-a)^2+(yi(3)-b)^2-r^2]
end
end


wie kann ich denn die Koordinaten des Mittelpunktes definieren. Da zeigt er mir ständig Error an...

[EDITED, Jan, Bitte Code-Umgebung verwenden - Danke!]
Private Nachricht senden Benutzer-Profile anzeigen
 
kg270
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 6
Anmeldedatum: 21.12.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.12.2015, 12:12     Titel:
  Antworten mit Zitat      
das Newton verfahren mit der Jacobi Matrix muss da ja auch noch irgendwie rein... ich bin wieder mal ratlos..... Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Friidayy
Forum-Century

Forum-Century


Beiträge: 225
Anmeldedatum: 17.12.13
Wohnort: ---
Version: R2012b
     Beitrag Verfasst am: 24.12.2015, 12:42     Titel:
  Antworten mit Zitat      
Hallo kg270,

dem Code nach, würde ich sagen du bist noch ein Matlab-Einsteiger und hast noch wenig mit Funktionen gearbeitet.

Schau dir mal das Video hier auf Youtube an, ab ca. min. 24.
https://www.youtube.com/watch?v=zlpAhB_uiSs

Nach dem Video solltest du wissen, wie man Funktionen erstellt und mit diesen arbeitet. Danach brauchst du dann folgende FUnktionen:

1) Main: hier rufst du das Newton-Verfahren und lässt dir das Ergebnis ausgeben
2) Newton-Verfahren: hiermit löst du das nichtlineare Gleichungssystem
2+) Jacobi: numerische Berechnung der Jacobi-Matrix
3) NLGS: hier definierst du das nichtlineare Gleichungssystem

meld dich bei Problemen
Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
huhu0815
Forum-Century

Forum-Century


Beiträge: 141
Anmeldedatum: 20.02.14
Wohnort: Dresden
Version: R2013b, R2014b, R2016b, R2018a
     Beitrag Verfasst am: 25.12.2015, 00:39     Titel:
  Antworten mit Zitat      
Hallo,

das NLGS sind einfach schon deine nach 0 umgestellten Gleichungen. Wie im obigen Beispiel ersetzt du einfach die Gleichungen (das habe ich schonmal gemacht) und bildest weiterhin die Jacobi Matrix abgeleitet nach den Unbekannten m1, m2 und r.

Hier die modifizierte Version:
Code:
function lsg = jacobiProblem(x,y)
% x hält den x-vektor aller x-werte der punkte A,B,C
% y hält den y-vektor aller y-werte der punkte A,B,C
%
% lsg wird einen vektor mit den Unbekannten Variablen haben --> lsg = [m1;m2;r]
%
% aus deinen Vorüberlegungen einfach und OHNE Kontrolle übernommen
% I: (x1 - m1)^2 + (y1 - m2)^2 - r^2 = 0
%
% II: (x2 - m1)^2 + (y2 - m2)^2 - r^2 = 0
%
% III: (x3 - m1)^2 + (y3 - m2)^2 - r^2 = 0
%
% mit den Punkten: A = (x1;y1) B = (x2;y2) C = (x3;y3)
%
% NLGS (entweder hier oder als eigene Funktion)
%
% g = [(x(1) - lsg(1))^2 (y(1) - lsg(2))^2 -r^2; ...
%      (x(2) - lsg(1))^2 (y(2) - lsg(2))^2 -r^2; ...
%      (x(3) - lsg(1))^2 (y(3) - lsg(2))^2 -r^2];
% Jacobi-Matrix
%
% J(m1,m2,r) bilden
%


% Annahme m1 = m2 = r = 1
lsg=[1; 1; 1];
x = x(:);
y = y(:);
% Algo

del = 1;
indx = 0;
tol = 1e-6;    % Abbruchkriterium
while del>tol

   g = [(x(1)-lsg(1))^2+(y(1)-lsg(2))^2-lsg(3)^2; ...
        (x(2)-lsg(1))^2+(y(2)-lsg(2))^2-lsg(3)^2; ...
        (x(3)-lsg(1))^2+(y(3)-lsg(2))^2-lsg(3)^2];
   % hier kommt die Jacobi Matrix rein
   % J = ...
   
   % Newton-Raphson Algorithmus
   delx = -inv(J)*g;
   lsg = lsg + delx;

   del = max(abs(g));
   indx = indx + 1;
end

 


Da hier nur geholfen werden soll, musst du nur die Jacobi-Matrix bilden und an den Orten einsetzen. Man kann die Jacobi-Matrix selbstverständlich auch numerisch lösen, aber das scheint als Einstieg doch etwas zu schwierig. Von daher solltest du diese hier einsetzen. Diese ändert sich ja für das Problem nicht.

Wenn du damit fertig bist, bildet du deine x und y vektoren, die deine Punkte repräsentieren.
Code:
x = [1 0 0];
y = [0 1 0];
ergebnis = jacobiProblem(x,y)


Viele Grüße
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.