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

Variabel in mehreren Unterfunktionen

 

Thomas_74
Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 14:51     Titel: Variabel in mehreren Unterfunktionen
  Antworten mit Zitat      
Ich suche eine Möglichkeit eine Variabele in mehreren Unterfunktionen zu benutzen. mit global und persist hat das leider nicht funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 15:21     Titel:
  Antworten mit Zitat      
Als Parameter übergeben?

Wie hast Du das mit global denn gemacht? Eigentlich funktioniert das nämlich schon.
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.02.2009, 17:09     Titel:
  Antworten mit Zitat      
Wenn es mehrere (vom Typ her unterschiedliche) Variablen sind, kannst Du die auch in einer Struct oder Cell verpackt übergeben.
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 09.02.2009, 17:46     Titel:
  Antworten mit Zitat      
Hallo Thomas,

praktisch sind auch die "nested functions", also geschachtelte Funktionen. Die verwende ich immer, wenn ich Funktionen an einen Löser wie ode45 oder fminserach übergeben muss. Aber schildere doch mal Dein Problem genauer, am besten mit einem lauffähigen Beispiel, das den Fehler erzeugt.

Herzliche Grüße
Bijick
_________________

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

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 18:04     Titel:
  Antworten mit Zitat      
Ich fitte Funktionene mit lsqcurvefit und will da Zahlen (double) als Konstanten drin haben die ich nicht jedesmal in die Funktionen Tippen will.
Bis jetzt mach ich das mit save/load das geht ist aber langsam.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.02.2009, 18:11     Titel:
  Antworten mit Zitat      
Poste doch einfach mal die interessanten Teile deines Codes, das dürfte die Sache wesentlich erleichtern, das ist alles sehr schwammig, was Du da beschreibst...
Private Nachricht senden Benutzer-Profile anzeigen
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 11:14     Titel:
  Antworten mit Zitat      
Hi,
ich versteh gerade nicht welcher Teil der "interessante" sein soll.

Ich denke das mein Problem allgemein auftaucht wenn man in einer Formel die man mit lsqcurvefit anfitten will einen Wert einfügen will der sich nicht ändern soll.
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 11:36     Titel:
  Antworten mit Zitat      
Meinst Du etwa sowas?

Code:

zeit = 1:0.01:10; %unveränderliche Zeit, für alle Aufrufe von plot gleich

ausgabe1 = sin(0.23.*zeit);
plot(zeit, ausgabe1);

ausgabe2 = 5*cos(0.91.*zeit);
plot(zeit, ausgabe2)
 


Der interessante Teil ist, wie Dein Programm strukturiert ist. Welche Funktion wird mit welchem Inhalt aufgerufen? Wenn Du gar keine Funktionen verwendest, dann pack deine unveränderlichen in Variablen (siehe oben). Wenn Du Funktionen verwendest, dann übergib die Variablen mit den konstanten Werten als Parameter an die Funktion. Wenn Du keine Funktionsparameter willst, dann mach die Variablen global. Wenn das nicht klappt, dann poste den Code, wie Du das mit dem global machen anstellst (sowohl im Hauptprogramm als auch in Deiner Funktion). So ins blaue hinein raten ist meistens ziemlich schwer.

EDIT: Code-tags richtig gesetzt

Zuletzt bearbeitet von Epfi am 11.02.2009, 11:55, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.02.2009, 11:50     Titel:
  Antworten mit Zitat      
Hm, ist das Problem, dass Du auf Deine Werte nicht über die Grenzen einer Funktion hinweg zugreifen kannst, oder willst Du irgendwie einen Parameter 'festhalten'.
Gib doch bitte mal endlich ein Beispiel...
 
Thomas_74
Themenstarter

Forum-Century

Forum-Century


Beiträge: 241
Anmeldedatum: 06.02.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.02.2009, 16:29     Titel:
  Antworten mit Zitat      
Hi,

die Formel die ich mit lsqcurvefit(@steigung,Startwert,Xwer,Ywert) fitten will ist so was wie ax+b wobei ich b konstant haben will.
Dabei will ich b nicht in jeder Formel von Hand eingeben.
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: 24.02.2009, 17:19     Titel:
  Antworten mit Zitat      
Hallo Thomas,

ja, das geht mit den nested functions. Hier ein Beispiel:

Code:
function output = OptFun(A,StartVector)

[yOpt,fvalOpt] = fmincon(@ObjectiveFunction,StartVector);

output.y = yOpt;
output.fval = fvalOpt;

function [ObjectiveValue,Grad] = ObjectiveFunction(y)
    ObjectiveValue = transpose(y)*A*y;
    if nargout > 1
        Grad = 2*A*y;
    end
end

end


Hierbei ist die Matrix A die besondere Variable. Sie wird nicht an ObjectiveFunction übergeben, ist dort aber trotzdem bekannt, weil die Funktionen ineinander geschachtelt sind. Sie dürfte auch gar nicht übergeben werden, weil sie ja nicht optimiert werden soll, ebenso wie bei Deinem b. Das Beispiel ist auch lauffähig und kann mit einer nxn-Matrix A und einem nx1-Spaltenvektor StartVector aufgerufen werden. (Keine Garantie für sinnvolle Ergebnisse Smile )

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.