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 Mathe
  Status Schulmathe
    Status Primarstufe
    Status Mathe Klassen 5-7
    Status Mathe Klassen 8-10
    Status Oberstufenmathe
    Status Mathe-Wettbewerbe
    Status Sonstiges
  Status Hochschulmathe
    Status Uni-Analysis
    Status Uni-Lin. Algebra
    Status Algebra+Zahlentheo.
    Status Diskrete Mathematik
    Status Fachdidaktik
    Status Finanz+Versicherung
    Status Logik+Mengenlehre
    Status Numerik
    Status Uni-Stochastik
    Status Topologie+Geometrie
    Status Uni-Sonstiges
  Status Mathe-Vorkurse
    Status Organisatorisches
    Status Schule
    Status Universität
  Status Mathe-Software
    Status Derive
    Status DynaGeo
    Status FunkyPlot
    Status GeoGebra
    Status LaTeX
    Status Maple
    Status MathCad
    Status Mathematica
    Status Matlab
    Status Maxima
    Status MuPad
    Status Taschenrechner

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

Open Source FunktionenplotterFunkyPlot: Kostenloser und quelloffener Funktionenplotter für Linux und andere Betriebssysteme
StartseiteMatheForenMatlabFunktionsvariablen erweitern
Foren für weitere Schulfächer findest Du auf www.vorhilfe.de z.B. Geschichte • Erdkunde • Sozialwissenschaften • Politik/Wirtschaft
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.matheraum.de
[ Startseite | Forum | Wissen | Kurse | Mitglieder | Team | Impressum ]