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

Funktionen in for-Schleife mit Eingabewerten auswerten

 

Kleiner7

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2013, 21:30     Titel: Funktionen in for-Schleife mit Eingabewerten auswerten
  Antworten mit Zitat      
Guten Tag,
ich bin ein ziemlicher Neuling in der Programmierung mit Matlab und habe zur Zeit Probleme Funktionen innerhalb einer Schleife nacheinander auszuwerten.

Ich habe verschiedene Funktionen definiert, z.B. N_1_1.m, N_1_2.m, N_2_1.m , N_2_2.m usw, die ich nacheinander in einer For Schleife abrufen und dabei direkt Werte einsetzen möchte. Leider scheint der Laufparameter i der Schleife nicht zu funktionieren, da Matlab die einzelnen N_X_X Funktionen nicht findet. Sie sind aber im Hauptordner vorhanden, ich gehe mal davon aus, dass dafür die for schleife nicht geeignet ist?
K wurde definiert und ist eine Matrix. Gauss(i,X) sind verschiedene Funktionswerte, abgerufen aus der vorher definierten Matrix mit Namen Gauss.

Code:

for j = 1 : 4
   
    for k = 1 : 4
       
    K(j, k) = 0;
       
            for i = 1 : 4

            K(j, k) = K(j, k) + N_j_1(Gauss(i,2)) * N_j_2(Gauss(i,1)) *   N_k_1(Gauss(i,2)) * N_k_2(Gauss(i,1)) ;
        end
    end
end
 


Vielen Dank und Grüße


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.10.2013, 23:13     Titel:
  Antworten mit Zitat      
Hallo,

Funktionen können auch in for-Schleifen aufgerufen werden - das sollte nicht das Problem sein.

Was passiert, wenn du den Code so ausführst?
Bekommst du eine Fehlermeldung? Welche?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2013, 23:29     Titel:
  Antworten mit Zitat      
Hallo Harald,
danke für deine Antwort.

Code:

for i = 1 : 2
X_i = N_i_1(1.5)
end
 


resultiert in:

Undefined function 'N_i_1' for input
arguments of type 'double'.


Auch zur Überprüfung ob er sie überhaupt findet:

Code:

>> for i = 1:2
which N_i_1
end
 


ergibt:
'N_i_1' not found.
'N_i_1' not found.

Die sind aber vorhanden im Hauptmatlab Ordner, ich kann sie außerhalb der Schleife auch ansprechen.
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.10.2013, 10:42     Titel:
  Antworten mit Zitat      
Hallo

man kann keinen Index in Namen verwenden.
Du siehst doch dass das i im Namen nicht iteriert wird?

Schaue dir die Funktion
STR2FUNC

so was in die Richtung
Code:


for j = 1 : 4
   
    for k = 1 : 4
       
    K(j, k) = 0;
       
            for i = 1 : 4

             N_i_1 = str2func(sprintf('N_%d_1',j));
             N_i_2 = str2func(sprintf('N_%d_2',j));
             N_k_1 = str2func(sprintf('N_%d_1',k));
             N_k_2 = str2func(sprintf('N_%d_2',k));

            K(j, k) = K(j, k) + N_j_1(Gauss(i,2)) * N_j_2(Gauss(i,1)) *   N_k_1(Gauss(i,2)) * N_k_2(Gauss(i,1)) ;
        end
    end
end

 
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: 15.10.2013, 11:35     Titel:
  Antworten mit Zitat      
Hallo Kleiner7,
Stell Dir vor, was geschehen würde, wenn alle "i"s ersetzt werden würden. Der Befehl "sin" wäre dann auch nicht mehr benutzbar!

Statt eine Menge verschiedener Finktionen zu erstellen, ist es im Allgemeinen sinnvoller eine Funktion zu verwenden und die unterschiedlichen Berechnungen durch ein Input-Argument zu steuern.
Code:
X = cell(1, 2);
for i = 1 : 2
  X{i} = N(1.5, i);
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.10.2013, 18:47     Titel:
  Antworten mit Zitat      
Hallo,

jetzt verstehe ich das Vorhaben, muss aber Jan vollkommen zustimmen: das kann nicht gehen!

Was ich mir als Alternative noch vorstellen kann, wäre ein Cell-Array von Function Handles:

Code:
N = {@N_1_1, @N_1_2; @N_2_1, @N_2_2};

Der Zugriff auf die einzelnen Funktionen würde dann mit
Code:

erfolgen.

Das würde ich aber nur dann machen, wenn die Funktionen intern wirklich komplett verschieden sind. Wenn sie sich ähneln, ist Jans Weg zu bevorzugen.

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.