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

function mit Vektor als Rückgabewert wie sqrt()

 

lötauge
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 09:56     Titel: function mit Vektor als Rückgabewert wie sqrt()
  Antworten mit Zitat      
Hallo,

ich möchte gerne eine Funktion wie die sqrt() schreiben.
D.h. ich habe einen vektor
Code:
x =[0 2 4 6 8 10 12]

und kann diesen an die funktion sqrt übergeben und erhalte wieder einen Vektor mit dem Ergebnis
Code:
.

Wenn ich jetzt selbst eine Funktion schreibe
Code:
function i = func_iswitch (vin)
    global Vout;
    global IoutRippelAbsolut;
    global Wirkungsgrad;
    global IoutMax;  
    i =((Vout*IoutMax/vin)+IoutRippelAbsolut/2)*1/(Wirkungsgrad/100);
 

der ich als vin z.b. den x Vektor übergebe erhalte ich nur Fehlermeldungen.
Irgendwie auch logisch.
Muss ich hier eine For-Schleife einbauen und jedes Ergebnis im Vektor i ablegen oder geht es effizienter/automatisierter? Ich wieß ja nicht wie sqrt() das macht?!

Vielen Dank für die Infos
Private Nachricht senden Benutzer-Profile anzeigen


blub

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 10:58     Titel:
  Antworten mit Zitat      
moin,

du musst uns schon verklickern in welchen dimensionen deine global definierten variablen vorlegen.
Sollten die nur als Skalare vorliegen, gibt es nämlich keinen Grund warum das nicht laufen sollte.
 
lötauge
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 11:23     Titel:
  Antworten mit Zitat      
Es sind alles skalare. Habe die Funktion mal abgeändert um Fehlerquellen auszuschließen. Fehler ist identisch siehe unten.

Code:
function i = func_iswitch (vin)
 %  global Vout;
 %  global IoutRippelAbsolut;
 %  global Wirkungsgrad;
 %  global IoutMax;  
    Vout = 50;
    IoutRippelAbsolut = 0.4;
    Wirkungsgrad = 95;
    IoutMax = 1;  
    i =((Vout*IoutMax/vin)+IoutRippelAbsolut/2)*1/(Wirkungsgrad/100);
 


Code:
func_iswitch(x)
??? Error using ==> mrdivide
Matrix dimensions must agree.

Error in ==> func_iswitch at 10
    i =((Vout*IoutMax/vin)+IoutRippelAbsolut/2)*1/(Wirkungsgrad/100);
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 11:43     Titel:
  Antworten mit Zitat      
Zitat:
IoutMax/vin


Division eines Skalars durch einen Vektor ist nicht definiert.

Suchst du eventuell die elementweise Division und Multiplikation?
Code:
i =((Vout.*IoutMax./vin)+IoutRippelAbsolut./2)*1./(Wirkungsgrad./100);
Private Nachricht senden Benutzer-Profile anzeigen
 
lötauge
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 05.12.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 11:49     Titel:
  Antworten mit Zitat      
Ja, das habe ich gesucht. Es funktioniert. Das war das was ich sonst mit der for Schleife realisiert hätte.

Ist diese methode "Elementweise" effizienter? Oder verbirgt sich dahinter quasi auch eine for Schleife?

Vielen Dank soweit.
Bin erst seit gestern mit dem Programm dabei!
Private Nachricht senden Benutzer-Profile anzeigen
 
dmjr
Forum-Century

Forum-Century


Beiträge: 199
Anmeldedatum: 02.10.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2012, 12:01     Titel:
  Antworten mit Zitat      
Das nennt sich Vektorisierung und ist oftmals deutlich schneller als die einzelnen Operationen auszuführen.

Falls du weiteres Interesse an dem Thema hast:
Allgemein zu Performance und Matlab: http://www.mathworks.de/de/help/mat.....mproving-performance.html
Grundlagen Vektorisierung: http://www.mathworks.de/de/help/mat.....b_prog/vectorization.html

Und mittels tic / toc kannst du die Ausführungszeit messen.
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.