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

Auflösen und speichern

 

Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2011, 15:43     Titel:
  Antworten mit Zitat      
x0 = [-100; -100];
f = @(x) [norm(x(1)-satpos)-c*(differenz+x(2))];
fsolve(f, x0);

so besser?

Habe gerade deinen Rat befolgt doch leider ist die Antwort

1. x(1) = x0
2. Kein Vektor

zu Punkt 1. habe ich verschiedene Werte ausprobiert, leider nimmt der erste Wert, der Lösung, immer den Startwert an.

der 2. Wert pendelt sich bei ca. 0.0989 ein, variiert jedoch leicht.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich denke, du hast nicht berücksichtigt, dass das x aus der Angabe ein 3D-Vektor sein soll? Sprich, mit delta suchst du nach 4 Unbekannten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2011, 18:41     Titel:
  Antworten mit Zitat      
dachte, dass erkennt Matlab automatisch.....

Habe jetzt diese Variante probiert:

x0 = [1 ; 1 ; 1; 1 ];

f = @(x)[(norm(x(1),x(2),x(3)-satpos1)-c*(differenz1+x(4)));
(norm(x(1),x(2),x(3)-satpos2)-c*(differenz2+x(4)));
(norm(x(1),x(2),x(3)-satpos3)-c*(differenz3+x(4)));
(norm(x(1),x(2),x(3)-satpos4)-c*(differenz4+x(4)))];
fsolve(f, x0);


ERGEBNIS:

??? Error using ==> norm
Too many input arguments.

Error in ==>
@(x)[(norm(x(1),x(2),x(3)-satpos1)-c*(differenz1+x(4)));(norm(x(1),x(2),x(3)-satpos2)-c*(differenz2+x(4)));(norm(x(1),x(2),x(3)-satpos3)-c*(differenz3+x(4)));(norm(x(1),x(2),x(3)-satpos4)-c*(differenz4+x(4)))]


Error in ==> fsolve at 254
fuser = feval(funfcn{3},x,varargin{:});

Error in ==> Aufgabe25 at 7
fsolve(f, x0);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.


Ist die Schreibweise denn in Ordnung, wenn man einen Vektor herausbekommen möchte?
Habe dazu leider nichts gefunden....


Habe das gleiche auch mit dem alten Editoreintrag ausprobiert:

x0 = [0;0;0];
f = @(x) norm(x(1),x(2),x(3)-satpos)-c*(differenz+x(4));
fsolve(f, x0);


Das Ergebnis bleibt dasselbe.




Noch ein Ansatz:
Wie man im Error erkennen kann habe ich anstatt x(1),x(2).... x(1,2,3) geschrieben, damit kommt dieser Fehler:


??? Index exceeds matrix dimensions.

Error in ==>
@(x)[(norm(x(1,2,3)-satpos1)-c*(differenz1+x(4)));(norm(x(1,2,3)-satpos2)-c*(differenz2+x(4)));(norm(x(1,2,3)-satpos3)-c*(differenz3+x(4)));(norm(x(1,2,3)-satpos4)-c*(differenz4+x(4)))]


Error in ==> fsolve at 254
fuser = feval(funfcn{3},x,varargin{:});

Error in ==> Aufgabe25 at 7
fsolve(f, x0);
Caused by:
Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.



Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad Crying or Very sad
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

MATLAB kann vieles, aber nicht hellsehen.

Du solltest mal versuchen, ob dein Function Handle überhaupt mit dem Startwert umgehen kann. Wenn das nicht geht, kann FSOLVE nicht klappen.#

Du müsstest x([1, 2, 3]) bzw. x(1:3) schreiben. x(1,2,3) wird also 3D-Index aufgefasst.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2011, 15:35     Titel:
  Antworten mit Zitat      
Very Happy Very Happy Very Happy Very Happy Very Happy Very Happy

x0 = [0 ; 0 ; 0 ; 0 ];

f = @(x)[(norm(x(1:3)-satpos1)-c*(differenz1+x(4)));
(norm(x(1:3)-satpos2)-c*(differenz2+x(4)));
(norm(x(1:3)-satpos3)-c*(differenz3+x(4)));
(norm(x(1:3)-satpos4)-c*(differenz4+x(4)))];
fsolve(f, x0);


So funktioniert es, doch wenn ich die Werte umrechne auf Längen und breitengerade, komme ich nicht zum gewünschten Ergebnis.

Kann es sein, dass ich etwas falsch gemacht habe?

muss bei norm vllt. noch eine ,1 hin?

aber auch wenn ich es damit mache ist das Ergebnis nicht korrekt.

kann die carth2phere funcrion falsch sein?

blub, was soll ich bloß tun
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2011, 16:07     Titel:
  Antworten mit Zitat      
Hallo,

du solltest dir zwei, oder besser drei Rückgabeargumente von FSOLVE zurückholen.
Anhand des zweiten kannst du sehen, ob die Gleichungen erfüllt werden oder nicht. Ob eine Lösung gefunden wurde, kannst du auch am dritten Rückgabeparameter ablesen. Siehe
Code:
für mehr Informationen dazu.

Wenn keine Lösung gefunden wurde, kann es sein, dass der Startwert zu schlecht war. Wenn du einen besseren Anfangswert als [0; 0; 0; 0] zur Verfügung stellen kannst, solltest du das tun.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.08.2011, 19:38     Titel:
  Antworten mit Zitat      
Ich glaube ich habe mich schlecht ausgedrückt.

Also ich bekomme Werte für F (x,delta) heraus und zwar


1538,40458378470

707,828539664761

802,921794178895

0,0358967670867792


Diese Werte bei carth2sphere eingegeben bringen als Ergebnis
die Werte:

B= 25.367452363905134

L= 24.707423033196555

Herauskommen soll aber ca.

B= 49.9915
L= 8.23897

Also muss ich irgendwo einen Fehler gemacht haben, die Frage ist nur wo.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.08.2011, 21:32     Titel:
  Antworten mit Zitat      
Hallo,

ich meine schon, das verstanden zu haben.
Wenn du aber keinen Fehler in den Gleichungen gemacht hast, ist das wahrscheinlichste, dass FSOLVE Probleme hat, die Lösung zu finden - siehe oben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2011, 09:58     Titel:
  Antworten mit Zitat      
Weiter im Text ich habe...

Ich habe die Startwerte geändert, doch das Ergebnis bleibt sich gleich.

Ich habe doc solve gelesen, bin jetzt aber auch nicht schlauer.



Die Antwort die ich beim lösen erhalte ist folgende:

Equation solved, inaccuracy possible.

The vector of function values is near zero, as measured by the default value
of the function tolerance. However, the last step was ineffective.

<stopping criteria details>


fsolve stopped because the sum of squared function values, r, changed by 1.328387e-017
relative to its initial value; this is less than max(options.TolFun^2,eps) = 1.000000e-012.
r = 9.264423e-023, is less than sqrt(options.TolFun) = 1.000000e-003.

Optimization Metric Options
relative change r = 1.33e-017 max(TolFun^2,eps) = 1e-012 (default)
r = 9.26e-023 sqrt(TolFun) = 1.0e-003 (default)


Aufgrund dessen habe ich in "optimtool" rumgespielt und die Werte kleiner gemacht, dabei ergeben sich keine neuen Ergebnisse.
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.08.2011, 10:13     Titel:
  Antworten mit Zitat      
exitflag = 3

Change in the residual was smaller than the specified tolerance.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.08.2011, 12:02     Titel:
  Antworten mit Zitat      
Hallo,

es scheint, dass FSOLVE richtig gearbeitet hat.
In den Gleichungen sehe ich auch keine Probleme.
Ich würde also noch überprüfen, ob die Parameter (Sat-Positionen) richtig übernommen wurden.

Im Zweifelsfall schadet vielleicht auch ein Gespräch mit dem Professor oder seinem Assistenten nicht?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Rock
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 14.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.08.2011, 15:40     Titel:
  Antworten mit Zitat      
Hi,

habe jetzt nochmal was anderes probiert uns zwar mit den signallaufzeiten.

Dann bekomme ich folgendes Ergebnis:

Warning: Trust-region-dogleg algorithm of FSOLVE cannot handle
non-square systems; using Levenberg-Marquardt algorithm instead.
> In fsolve at 324
In Aufgabe2final1 at 8

No solution found.

fsolve stopped because the last step was ineffective. However, the vector of function
values is not near zero, as measured by the default value of the function tolerance.

<stopping criteria details>


dann habe ich das Spiel mit dem Levenberg-Marquardt algorithm probiert.
Da bekomme ich


Optimization running.
Objective function value: 379.9146930695315
No solution found.

fsolve stopped because the problem appears to be locally singular.


was bedeutet das und was kann ich noch ändern?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 08.08.2011, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

das heißt, dass keine Lösung gefunden wurde.
Du kannst den Startwert oder natürlich auch andere Einstellungen von FSOLVE ändern.
Die Rückmeldung, die du zuvor (3.8., 11:5Cool bekommen hattest, hat aber eher auf eine korrekte Lösung hingewiesen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2

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.