matheraum.de
Raum für Mathematik
Offene Informations- und Nachhilfegemeinschaft

Für Schüler, Studenten, Lehrer, Mathematik-Interessierte.
Hallo Gast!einloggen | registrieren ]
Startseite · Forum · Wissen · Kurse · Mitglieder · Team · Impressum
Forenbaum
^ Forenbaum
Status Hochschulmathe
  Status Uni-Analysis
    Status Reelle Analysis
    Status UKomplx
    Status Uni-Kompl. Analysis
    Status Differentialgl.
    Status Maß/Integrat-Theorie
    Status Funktionalanalysis
    Status Transformationen
    Status UAnaSon
  Status Uni-Lin. Algebra
    Status Abbildungen
    Status ULinAGS
    Status Matrizen
    Status Determinanten
    Status Eigenwerte
    Status Skalarprodukte
    Status Moduln/Vektorraum
    Status Sonstiges
  Status Algebra+Zahlentheo.
    Status Algebra
    Status Zahlentheorie
  Status Diskrete Mathematik
    Status Diskrete Optimierung
    Status Graphentheorie
    Status Operations Research
    Status Relationen
  Status Fachdidaktik
  Status Finanz+Versicherung
    Status Uni-Finanzmathematik
    Status Uni-Versicherungsmat
  Status Logik+Mengenlehre
    Status Logik
    Status Mengenlehre
  Status Numerik
    Status Lin. Gleich.-systeme
    Status Nichtlineare Gleich.
    Status Interpol.+Approx.
    Status Integr.+Differenz.
    Status Eigenwertprobleme
    Status DGL
  Status Uni-Stochastik
    Status Kombinatorik
    Status math. Statistik
    Status Statistik (Anwend.)
    Status stoch. Analysis
    Status stoch. Prozesse
    Status Wahrscheinlichkeitstheorie
  Status Topologie+Geometrie
  Status Uni-Sonstiges

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
Weitere Fächer:

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabFunktionsvariablen erweitern
Foren für weitere Studienfächer findest Du auf www.vorhilfe.de z.B. Astronomie • Medizin • Elektrotechnik • Maschinenbau • Bauingenieurwesen • Jura • Psychologie • Geowissenschaften
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.unimatheforum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]