www.vorhilfe.de
Vorhilfe

Kostenlose Kommunikationsplattform für gegenseitige Hilfestellungen.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Vorhilfe
  Status Geisteswiss.
    Status Erdkunde
    Status Geschichte
    Status Jura
    Status Musik/Kunst
    Status Pädagogik
    Status Philosophie
    Status Politik/Wirtschaft
    Status Psychologie
    Status Religion
    Status Sozialwissenschaften
  Status Informatik
    Status Schule
    Status Hochschule
    Status Info-Training
    Status Wettbewerbe
    Status Praxis
    Status Internes IR
  Status Ingenieurwiss.
    Status Bauingenieurwesen
    Status Elektrotechnik
    Status Maschinenbau
    Status Materialwissenschaft
    Status Regelungstechnik
    Status Signaltheorie
    Status Sonstiges
    Status Technik
  Status Mathe
    Status Schulmathe
    Status Hochschulmathe
    Status Mathe-Vorkurse
    Status Mathe-Software
  Status Naturwiss.
    Status Astronomie
    Status Biologie
    Status Chemie
    Status Geowissenschaften
    Status Medizin
    Status Physik
    Status Sport
  Status Sonstiges / Diverses
  Status Sprachen
    Status Deutsch
    Status Englisch
    Status Französisch
    Status Griechisch
    Status Latein
    Status Russisch
    Status Spanisch
    Status Vorkurse
    Status Sonstiges (Sprachen)
  Status Neuerdings
  Status Internes VH
    Status Café VH
    Status Verbesserungen
    Status Benutzerbetreuung
    Status Plenum
    Status Datenbank-Forum
    Status Test-Forum
    Status Fragwürdige Inhalte
    Status VH e.V.

Gezeigt werden alle Foren bis zur Tiefe 2

Navigation
 Startseite...
 Neuerdings beta neu
 Forum...
 vorwissen...
 vorkurse...
 Werkzeuge...
 Nachhilfevermittlung beta...
 Online-Spiele beta
 Suchen
 Verein...
 Impressum
Das Projekt
Server und Internetanbindung werden durch Spenden finanziert.
Organisiert wird das Projekt von unserem Koordinatorenteam.
Hunderte Mitglieder helfen ehrenamtlich in unseren moderierten Foren.
Anbieter der Seite ist der gemeinnützige Verein "Vorhilfe.de e.V.".
Partnerseiten
Dt. Schulen im Ausland: Mathe-Seiten:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
Forum "Matlab" - Funktionsvariablen erweitern
Funktionsvariablen erweitern < Matlab < Mathe-Software < Mathe < Vorhilfe
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien

Funktionsvariablen erweitern: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 18:27 So 17.12.2006
Autor: axes

Hi,

Frage:
Kann ich bei einer Inline-Funtion nachträglich die Paramterliste ändern?

Bsp:
Die Inline Funktion f(x1) soll zusätzlich abhängig von x2 sein -> f(x1,x2)

Wofür?:
Ich habe eine Matrix von Funktionen, welche von den Variablen x1 bis xn abhängig sind. Wobei manche Funktionen zB nur von x1, andere von mehreren Variablen abhänig sind.
Bei einem Schleifendurchlauf zur Berechnung der einzelnen Felder kann ich nun nicht angeben f(x1,x2,x3,...,xn), da MatLab bemeckert, dass bei manchen Funktionen zuviel Input vorhanden ist.
Nun würde ich gerne alle Funktionen auf f(x1,x2,...,xn) abändern.

Oder gibt es einen anderen eleganteren Weg?


Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.

        
Bezug
Funktionsvariablen erweitern: Antwort
Status: (Antwort) fertig Status 
Datum: 20:31 So 17.12.2006
Autor: Martin243

Hallo,

ich weiß nicht genau, was hier "elegant" wäre, aber ich dir mal zwei Vorschläge unterbreiten:

1. Wir machen wirklich alle Funktionen von allen Variablen abhängig oder
2. Wir lassen einfach nur das auswerten, was für unsere Funktion nötig ist.

Zu 1.:
f = inline('sin(x)');
g = inline('cos(y)');
h = inline('tan(x+y)');
%Wir machen alle Funktionen von x und y abhängig:
f2 = inline(formula(f),'x','y')
g2 = inline(formula(g),'x','y')
h2 = inline(formula(h),'x','y')
%Wir können alle Funktionen auf gleiche Weise auswerten:
x = rand(2,1);
ff = f2(x(1),x(2)); 
gg = g2(x(1),x(2)); 
hh = h2(x(1),x(2)); 


Zu 2.:
Wir können einfach den Aufruf anders gestalten, indem wir allen Parametervariablen (hier müssen wir genau auf die Namen achten!) Werte zuweisen und jede Funktion einfach ausgewertet wird:
f = inline('sin(x)');
g = inline('cos(y)');
h = inline('tan(x+y)');
x = rand;
y = rand;
%Auswerten:
ff = eval(formula(f));
gg = eval(formula(g));
hh = eval(formula(h));


Beides nicht wirklich elegant, aber wenn es viele Funktionen sind, dann frisst der Teufel Fliegen...


Gruß
Martin

Bezug
                
Bezug
Funktionsvariablen erweitern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 23:09 So 17.12.2006
Autor: axes

f2 = inline(formula(f),'x','y')

Genau diesen Befehl hab ich gesucht :) Danke für die schnelle Antwort

Bezug
                
Bezug
Funktionsvariablen erweitern: Frage (beantwortet)
Status: (Frage) beantwortet Status 
Datum: 17:53 Mo 18.12.2006
Autor: axes


f = inline(formula(f),'x','y')

Frage:
Kann ich die Variablen 'x' und 'y' in diesem Fall auch als Vektor übergeben. Ich muss diese erst aus der Ausgangsfunktion auslesen und bekomme sie über

var=argnames(f_orig)

als Spaltenvektor:

      'x1'
      'x2'
      'x3'

übergeben.

Leider mag es Matlab nicht, wenn ich diesen Vektor (transponiert) als Argumente für inline übergebe.








Bezug
                        
Bezug
Funktionsvariablen erweitern: Antwort
Status: (Antwort) fertig Status 
Datum: 23:01 Mo 18.12.2006
Autor: Martin243

Hallo,

ja, mit formula und argnames sind die Möglichkeiten in Matlab schon erschöpft. Jetzt muss man basteln:

Sagen wir mal, f_orig ist eine inline-Funktion, die von x, y und z abhängig ist. Dann kriegen wir, wie du geschrieben hast, die Argumente in einem Cell-Array serviert per:
var=argnames(f_orig);

Nun können wir uns erstmal den nötigen Befehl als String zusammenbasteln und ihn am Ende ausführen.
Seien f und g die Funktionen, die wir an die Abhängigkeiten der Funktion f_orig anpassen wollen. Dann legen wir zuerst ihre Namen in einem Cell-Array ab:
functions_todo = {'f', 'g'};
%Nun können wir in einer for-Schleife alle Funktionsnamen abklappern:
for findex=1:length(functions_todo),
  curr_funcname = char(functions_todo(findex));
  eval_string = [curr_funcname ' = inline('];
  eval_string = [eval_string sprintf('''%s''', formula(eval(curr_funcname)))];
  for i=1:length(var),
    eval_string = [eval_string sprintf(', ''%s''', char(var(i)))];
  end;
  eval_string = [eval_string ');'];
  eval(eval_string);
end;

Hier wird für jeden Funktionsnamen der Befehl als String aufgebaut und dann per eval ausgeführt. Etwas Simpleres ist mir leider nicht eingefallen...


Gruß
Martin

Bezug
                                
Bezug
Funktionsvariablen erweitern: Mitteilung
Status: (Mitteilung) Reaktion unnötig Status 
Datum: 11:16 Di 19.12.2006
Autor: axes

Danke dir :)
Habe schon geahnt, dass ich dann mit den Strings/C-Arrays tricksen müsste und gehofft es gäbe einen einfacheren Weg.



Bezug
Ansicht: [ geschachtelt ] | ^ Forum "Matlab"  | ^^ Alle Foren  | ^ Forenbaum  | Materialien


^ Seitenanfang ^
www.vorhilfe.de