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

M-File bearbeiten unbedingt nötig?

 

Tio
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2008, 15:38     Titel: M-File bearbeiten unbedingt nötig?
  Antworten mit Zitat      
Hallo zusammen,

Ich habe folgende Funktion in einem M-File:
Code:

function F = funcforT1(x,xdata)
T_r = ...;
F = ...;
 


und folgenden Aufruf:
Code:

    x0 = [10; 1000];
    [x,resnorm] = lsqcurvefit(@funcforT1,x0,Ti,m);
 

In x sind 2 Parameter, die ich annähern lassen will. Ti und m sind meine Wertepaare. Also Ti ist xdata und m ydata.
Jetzt hat die Funktion noch einen Parameter T_r, der vom Benutzer eingegeben wird und somit fest ist. Gibt es einen Weg T_r der Funktion mit zu übergeben? x beinhaltet nur die unbekannten Parameter die angenähert werden. Ti und m sind die Wertepaare und müssen die gleiche Länge haben, da kann ich auch nichts ändern.
Die einzige Möglichkeit die ich bis jetzt rausgefunden habe ist die M-File mit der Funktion einzulesen und in die 2. Zeile den Wert für T_r zu schreiben und dann die Berechnung zu machen. Das erscheint mir aber nicht grad sehr glücklich.

Ich habe auch probiert es als anonyme Funktion direkt in mein Programm einzubauen. Aber da habe ich gar kein Weg gefunden das T_r in die Funktion einzubauen, so das es flexibel ist aber nicht mit angenähert wird.

Ich habe die Hilfe schon durchforstet, aber nichts für mein Problem gefunden. Aber vllt. ist meine Unkenntnis einfach zu groß. Ich hoffe es ist verständlich wo mein Problem liegt ^^
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: 15.10.2008, 15:49     Titel:
  Antworten mit Zitat      
Hallo Tio,

für Dein Problem gibt es zwei mögliche Lösungen:

1. Definiere in funcforT1 und der aufrufenden Funktion T_r als globale Variable.

Code:


2. (meine bevorzugte Methode) Schreibe funcforT1 als "nested function" in die aufrufende Funktion hinein. Das geht nur, wenn funcforT1 nicht aus einem Skript oder dem Command Window aufgerufen wird.

Code:
function start  % oder wie sie eben heißt
...
T_r = ...
x0 = [10; 1000];
[x,resnorm] = lsqcurvefit(@funcforT1,x0,Ti,m);

    function F = funcforT1(x,xdata)
        F = ...;
    end

end


Herzliche Grüße
Bijick
_________________

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2008, 16:08     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort. Das mit der "nested function" ist genau perfekt für mich. Doof wenn man die Stichworte nicht kennt nach denen man suchen muss Embarassed Vielen Dank für deine Hilfe!
Private Nachricht senden Benutzer-Profile anzeigen
 
Tio
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2008, 16:17     Titel:
  Antworten mit Zitat      
Da ich jetzt alles als Funktion hab, sehe ich keine Variablen im Workspace mehr. kann man das irgendwie ändern?
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: 15.10.2008, 16:26     Titel:
  Antworten mit Zitat      
Hallo Tio,

da gibt es wieder mehrere Möglichkeiten. Ich schlage mal vor, die für dich interessanten Variablen am Ende in eine Datei Ergebnisse.mat zu speichern.

Code:
save Ergebnisse x x0 resnorm ...


Dann kann man die Variablen mit load später vom Command Window aus in den Workspace laden.

Prinzipiell gibt es auch noch assignin. Und die Möglichkeit, alle interessanten Variablen als Rückgabeparameter der äußeren Funktion zu setzen.

Herzliche Grüße
Bijick
_________________

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 11.10.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2008, 18:16     Titel:
  Antworten mit Zitat      
Bijick hat Folgendes geschrieben:
Hallo Tio,

da gibt es wieder mehrere Möglichkeiten. Ich schlage mal vor, die für dich interessanten Variablen am Ende in eine Datei Ergebnisse.mat zu speichern.

Code:
save Ergebnisse x x0 resnorm ...


Dann kann man die Variablen mit load später vom Command Window aus in den Workspace laden.

Prinzipiell gibt es auch noch assignin. Und die Möglichkeit, alle interessanten Variablen als Rückgabeparameter der äußeren Funktion zu setzen.

Herzliche Grüße
Bijick

Ah danke, gut die Möglichkeiten zu kennen. Aber ich hab mich wohl nicht genau ausgedrückt. Ich will die variablen ja nur während des programmierens sehen können um zu schauen ob alles richtig gemacht wird und wo Fehler auftreten.
aber ich werd dann während des schreibens das Ganze einfach als normale M-File lassen und wenn es fertig ist, mache ich es zur Funktion und haue dort noch die andere Funktion rein.
Vielen Dank nochmal für deine Hilfe Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.022
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2023b
     Beitrag Verfasst am: 15.10.2008, 18:31     Titel:
  Antworten mit Zitat      
Moin,

du kannst auch es auch im Debug-Modus kontrollieren.
Dazu einfach an die Stelle im Programm an der Seite neben den Zeilennummern auf den Strich klicken. Anschließend kannst du dich Schritt für Schritt durch den Code hangeln und hast vollen Zugriff auf den Workspace der Funktion.

Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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 - 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.