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

fsolve Problem

 

Marco_gast
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 15:47     Titel: fsolve Problem
  Antworten mit Zitat      
hallo,

bei ausführen dieses codes:

Code:
function F = funktion(x)


  cy= 630; ps_y = 29.5; ho_y = 4650; ke = 8.3e-5; ps0 = 8.8540e-11;
  dT = 0.01;   P = 2.6;    t = 1;   UV = 99;
 
  V = (((100-UV)/100) * P * t)/(ho_y * cy * dT);
 
 F = [0.5 * (ke * x(1)*x(2) * dT)^2 / ((ps0 * ps_y * x(3)*x(2))/x(1))-((UV/100) * P * t);
      x(1) * x(2) * x(3) * ho_y * cy * dT -(((100-UV)/100) * P * t)];
 
end

 

bekomme ich folgende fehlermeldung:

Error using vertcat
Dimensions of matrices being concatenated are not consistent.


aufgerufe wird die funktion über x = fsolve(@funktion,x0). Egal welche x0 werte ich eingebe, erhalte ich immer den gleichen Fehler.

kann mir jemand helfen, ich bin echt am verzweifeln

danke
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.04.2014, 16:05     Titel:
  Antworten mit Zitat      
Hallo

bei F noch zusätzliche Runde Klammern verwenden, ich fürchte hier läuft etwas schief in der Rangabfolge, vielleicht ist das sogar ein Bug in Matlab


so:
Code:

function F = funktion(x)


  cy= 630; ps_y = 29.5; ho_y = 4650; ke = 8.3e-5; ps0 = 8.8540e-11;
  dT = 0.01;   P = 2.6;    t = 1;   UV = 99;
 
  V = (((100-UV)/100) * P * t)/(ho_y * cy * dT);
 
 F = [(0.5 * (ke * x(1)*x(2) * dT)^2 / ((ps0 * ps_y * x(3)*x(2))/x(1))-((UV/100) * P * t));
      (x(1) * x(2) * x(3) * ho_y * cy * dT -(((100-UV)/100) * P * t))];
 
end

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco_gast
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 16:15     Titel:
  Antworten mit Zitat      
Hallo,

Runde Klammern ? Wo genau bitte?
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.04.2014, 16:21     Titel:
  Antworten mit Zitat      
Marco_gast hat Folgendes geschrieben:
Hallo,

Runde Klammern ? Wo genau bitte?


Habe doch schon in der Code oben gemacht, dann nochmal siehe rote Klammern:

F = [( 0.5 * (ke * x(1)*x(2) * dT)^2 / ((ps0 * ps_y * x(3)*x(2))/x(1))-((UV/100) * P * t) );
( x(1) * x(2) * x(3) * ho_y * cy * dT -(((100-UV)/100) * P * t) )];
Private Nachricht senden Benutzer-Profile anzeigen
 
Marco_gast
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 16:25     Titel:
  Antworten mit Zitat      
Very Happy Danke , das wars.

Da muss man erstmal drauf kommen
Ich dachte die Trennung mittels Semikolon ist eindeutig

Ich danke dir
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich würde der Übersichtlichkeit halber empfehlen, solche Bandwurmbefehle grundsätzlich zu vermeiden.

Wenn bei Anwendung von fsolve ein Fehler in der Funktion auftritt, dann würde ich zunächst mal einen Aufruf mit dem Startwert versuchen:
Code:
funktion(x0)
Das funktioniert dann wahrscheinlich auch noch nicht, das Debuggen ist so aber deutlich einfacher.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 18:43     Titel:
  Antworten mit Zitat      
Hallo,

ich bin nochmal und ich muss den Thread nochmal öffnen.

Ich habe gerade festgestellt, dass die Lösungen x1 x2 x3 die ich erhalte, immer nur bei der ersten Funktion stimmen.

Bei der 2. Funktion stimmen die nicht

kann das jemand bestätigen ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was meinst du mit der 1. oder 2. Funktion?

V wird, wie der Code Analyzer auch anzeigt, nicht verwendet. Wo ist also der Sinn dieser Berechnung? Oder soll V etwa auf 0 gesetzt werden?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2014, 20:20     Titel:
  Antworten mit Zitat      
ach schei**** ich hätte mir den code nochmal anschauen müssen. Embarassed

Ja richtig V wird nicht benutz

Nein ich meine die ergebnisse x1 x2 x3. Wenn ich die Gleichung 1:

0.5 * (ke * x(1)*x(2) * dT)^2 / ((ps0 * ps_y * x(3)*x(2))/x(1))-((UV/100) * P * t)

wieder umgestellt nach:

(UV/100) * P * t = 0.5 * (ke * x(1)*x(2) * dT)^2 / ((ps0 * ps_y * x(3)*x(2))/x(1))

einsetze, dann stimmt das Ergebniss. In der zweiten eingesetzt, eben nicht.

Das exitflag ist -2, und sagt aus, wenn ich das richtig verstehe, dass die Lösung nicht an einer Nullstelle konvergiert.
Ist das die Ursache ?

Ich habe auch schon in der hilfe gelesen und Tolfun und TolX geändert. leider nur mit mäßigen Erfolg
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Ja richtig V wird nicht benutz

D.h. es kann weggelassen werden?

Zitat:
Das exitflag ist -2, und sagt aus, wenn ich das richtig verstehe, dass die Lösung nicht an einer Nullstelle konvergiert.
Ist das die Ursache ?

Genau.

Die Problemstellung ist insofern ungewöhnlich, dass du zwei Gleichungen in drei Unbekannten hast - d.h. es gibt i.d.R. entweder keine Lösung oder unendlich viele. Ist das bewusst so?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2014, 08:27     Titel:
  Antworten mit Zitat      
Guten Morgen Harald

ja V kann weggelassen werden, (typischer copy-paste Fehler meinerseits)

ja leider habe ich nur 2 Gleichungen. Es wäre natürlich schön wenn es unendlich viele Lösungen gäbe, dann könnte ich mir eine passende aussuchen.


Gibt es einen anderen Algorithmus, mit dem ich weiterkomme ?

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn es überhaupt eine Lösung gibt, dann musst du ausreichend gute Startwerte angeben.
Deine Parameter haben sehr unterschiedliche Größenordnungen, d.h. es kann durchaus sein, dass ein Teil der Gleichung keine numerisch sichtbare Rolle mehr spielt, wenn die Startwerte ungünstig gewählt sind.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 53
Anmeldedatum: 19.12.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.04.2014, 09:51     Titel:
  Antworten mit Zitat      
Ok vielen Dank.

Als Startwerte meinst Du die x0 die ich beim aufruf der Funktion fsolve mit übergebe, richtig?

Ich habe beide Funktion mal einzel getestet. die Lösuingen die sich ergaben, waren immer abhängig von den Startwerten.

m.a.w. Egal welche Startwerte ich angebe es kommen immer andere Lösungen bei raus. Ebenfalls ist das exitflag immer 1 und mit dem immer sehr geringen Fval Wert, heißt das doch das es unendlich viele Lösungen gibt, richtig ?

Die Lösungen liegen immer sehr nah an den Startwerten, wird eine Lösung gefunden wird die Funktion beendet.

Besteht die Möglichkeit einen Bereich anzugeben in dem Lösungen gesucht werden soll ?

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Als Startwerte meinst Du die x0 die ich beim aufruf der Funktion fsolve mit übergebe, richtig?

Ja.

Zitat:
Ich habe beide Funktion mal einzel getestet. die Lösuingen die sich ergaben, waren immer abhängig von den Startwerten.

Es bringt wenig, die Funktionen separat zu testen. Klar ist die Lösung von den Startwerten abhängig, es wird ja die nächstgelegene Lösung gesucht. Dass es bei einer Gleichung mit 3 Unbekannten viele Lösungen gibt, sollte nicht verwundern.

Zitat:
m.a.w. Egal welche Startwerte ich angebe es kommen immer andere Lösungen bei raus. Ebenfalls ist das exitflag immer 1 und mit dem immer sehr geringen Fval Wert, heißt das doch das es unendlich viele Lösungen gibt, richtig ?

Ja. Aber eben nur für jede Gleichung für sich genommen.

Zitat:
Besteht die Möglichkeit einen Bereich anzugeben in dem Lösungen gesucht werden soll ?

Nicht direkt. Du kannst höchstens norm(f(x)) minimieren und dann fmincon nutzen.

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