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

Funktion auf jeden Wert eines X-dimensionalen Vektors anwend

 

Hoffmann

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2008, 14:49     Titel: Funktion auf jeden Wert eines X-dimensionalen Vektors anwend
  Antworten mit Zitat      
Servus!

Ich habe eine sehr einfach Funktion geschrieben die mein Phasenbild in ein Multiplikatorbild umwandeln soll. Die praktische Anwendung ist aber uninteressant, meine Frage lautet also:

Ich habe eine allgemeine Funktion f(x) = y {x,y € R}. Wie kann ich, ohne die Funktion umzuschreiben diese auf einen Vektor v {v € R^n} anwenden damit auf jeden Wert innerhalb des Vektors diese Funktion angewendet wird.

Die Funktion lässt sich nicht ausformulieren. Hoffe meine Frage war nicht zu kompliziert. Ich freue mich über Anregungen,

Gruß Hoffmann


dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.07.2008, 15:14     Titel:
  Antworten mit Zitat      
Hallo,

vielleicht hilft dir ja
Code:
.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 17.07.2008, 20:18     Titel: Re: Funktion auf jeden Wert eines X-dimensionalen Vektors an
  Antworten mit Zitat      
Hoffmann hat Folgendes geschrieben:
Servus!

Hoffe meine Frage war nicht zu kompliziert. Ich freue mich über Anregungen,

Gruß Hoffmann


Hi,
ich versteh die Frage nicht so ganz, gib doch mal ein Beispiel.
Denn eigentlich sind ja gerade in Matlab so ziemlich alle Funktionen darauf ausgelegt, Vektoren zu verarbeiten.
Z.B.
Code:
function hoffmann
x=-5:0.1:5;
y=hoffi(x);
plot(x,y);

function ret=hoffi(x)
ret=sin(cos(sqrt(x)).^2);

Die Funktion hoffi wird auf jedes Element von x angewendet.
Oder hast Du eine Funktion, die sich nicht wie gewünscht verhält und die Du nicht ändern kannst/willst?
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2008, 13:06     Titel:
  Antworten mit Zitat      
ok, im Detail:

Code:

function multiplier = filter_negative(phase)

if (phase > 0)
  multiplier = 1;
elseif (phase < -pi)
  multiplier = 0;
else
  multiplier = phase/pi +1;
end

return;
 


Wenn ich das jetzt auf den Vektor
Code:

test =
     1     4
    -4     1
 


anwende passiert folgendes:
Code:

filter_negative(test)
ans =
    1.3183    2.2732
   -0.2732    0.6817
 


Rauskommen sollte aber:
Code:

filter_negative(test)
ans =
    1    1
   0     0.6817
 

[/code]
 
dib0r
Forum-Guru

Forum-Guru


Beiträge: 413
Anmeldedatum: 09.05.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.07.2008, 13:28     Titel:
  Antworten mit Zitat      
Hallo,

Code:
ergebnis = arrayfun(@(x),filter_negative(x),test);
sollte funktionieren. Allerdings muss das letzte Element in test -1 sein, damit dann auch das von dir angegebene Ergebnis rauskommt.

Du kannst allerdings auch deine Funktion umschreiben, bspw. so:
Code:
function multiplier = filter_negative(phase)

multiplier = phase/pi + 1;
multiplier(phase>0) = 1;
multiplier(phase<-pi) = 0;

return;

Was nun sinnvoller ist, hängt von deiner Anwendung ab.

MfG
Private Nachricht senden Benutzer-Profile anzeigen
 
nschlange
Ehrenmitglied

Ehrenmitglied



Beiträge: 1.320
Anmeldedatum: 06.09.07
Wohnort: NRW
Version: R2007b
     Beitrag Verfasst am: 18.07.2008, 13:31     Titel:
  Antworten mit Zitat      
Mist, zu langsam,
ich dachte aber, es sollte [1 1;0 1] rauskommen.
_________________

Viele Grüße
nschlange

"Chuck Norris ejakuliert fluessigen Stahl!"
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Hoffmann_

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.07.2008, 17:08     Titel: Erledigt
  Antworten mit Zitat      
Tatsächlich lag der Fehler wohl an den "if"s die ich jetzt mit der internen Abfrage versehen habe, nur für nachfolgende Generationen zum merken und drauf achten:

multiplier($Bedingung) = $formel($Bedingung) <- Darauf achten bitte!

Sieht dann im freien Feld so aus:
Code:

mutltiplier(phase > 0) = 1 + phase(phase > 0)/pi;
 


Vergesst mir bloß die Bedingung bei der zuweisenden Matrix nicht sonst gibt es Sodom und Gomorrha (oder zumindest eine Fehlermeldung)
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.08.2008, 11:36     Titel:
  Antworten mit Zitat      
Ok, also
Code:

ist einfach die beste Antwort auf die Frage
 
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.