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

Cell-Arrays in MEX-Code ?

 

Andy386
Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 29.08.2009, 20:15     Titel: Cell-Arrays in MEX-Code ?
  Antworten mit Zitat      
Hallo, Liebe goMatlab-Gemeinde,

ich wollte mal fragen, ob jemand von euch Erfahrung hat, wie und ob man Cell-Arrays (2D-Zellen mit unterschiedlicher Länge) in MEX-Files verarbeiten kann.

Oder ob jemand (auch gegen kleine Bezahlung) meinen m-Code (sind nur 20 Zeilen) in MEX umformen kann...


Viele Grüsse
Andy
Private Nachricht senden Benutzer-Profile anzeigen


luiscantero
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 07.03.09
Wohnort: München
Version: ---
     Beitrag Verfasst am: 04.09.2009, 13:27     Titel:
  Antworten mit Zitat      
Hi,
hier ist ein Beispiel:
Passing Structures and Cell Arrays
http://www.mathworks.com/access/hel.....ternal/f12977.html#f11333

Gruß Luis
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 07.09.2009, 23:39     Titel:
  Antworten mit Zitat      
Danke !
Zumindest hab ich jetzt nen Einstieg...

... für neue Probleme Laughing
Also, ich geb in meine mex-Funktion ein Cell-Array der Dimension 113x113 rein, jede Zelle hat verschiedene Längen. Ich wollte vorsichtig vorgehen, und mir anzeigen lassen, ob das mit den versch. Längen geht, s.Code.

Okay, ich muss noch (tmp == NULL) abfangen, dann gehts erstmal

Code:

    nfields = mxGetNumberOfFields(prhs[0]);
    NStructElems = mxGetNumberOfElements(prhs[0]);
    leng=mxGetM(prhs[0]);
    width=mxGetN(prhs[0]);
   
    mexPrintf("%s%d\t%s%d\n", "nfields: ", nfields, "nElems",NStructElems);
    mexPrintf("%s%d\t%s%d\n", "leng: ", leng, "width",width);
   
    for(jstruct = 1; jstruct < NStructElems-1; jstruct++)
        {
           tmp = mxGetCell(prhs[0], jstruct);
         % hier fehlte:
           if (tmp == NULL)
                      mexPrintf("\tEmpty Cell\n");
           else
          % dann geht auch:
                     mexPrintf("%d%\n",mxGetN(tmp));


       
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 08.09.2009, 00:27     Titel:
  Antworten mit Zitat      
Okay, das reinfizzeln ging schneller als gedacht...

Könnte mir jemand noch für
Code:
VektorA(IndexVektor)

einen Tipp geben, wie das im MEX geht ?

so wird das irgendwie nix:
Code:

                tmp = mxGetCell(prhs[0], jstruct);
                leng=mxGetM(tmp);
                curr = (double *)mxGetPr( tmp );
           
                for (cnt=0; cnt<leng; cnt++)
                {
                    Z=curr[cnt];
                    helper=intensity[Z];
                   ...
                }  
 


dabei ist
Code:


    double     Z, helper;
    mxArray     *tmp, *error;
    double      *curr;
    int         NStructElems, nfields, jstruct;
    int           cnt, leng;
 


und es kommt der Fehler:

Error caalc.c: 58 operands of + have illegal types `pointer to double' and `double'
Error caalc.c: 58 type error: pointer expected

(das ist die Zeile helper =...)
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 08.09.2009, 11:11     Titel:
  Antworten mit Zitat      
so, ich hab jetzt mitbekommen, dass
Z=curr[cnt]
schon zum Abstuzr verdammt ist, weil curr ja ein (Skalar)-Pointer ist.

Mit ausgeklammerter helper=... - Zeile und
Z=*curr;
kommt es zum Absturz während der Laufzeit... Rolling Eyes
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 08.09.2009, 15:25     Titel:
  Antworten mit Zitat      
Warum kann ich meine Postings nicht mehr ändern ?

Naja, hab mich wieder in Array-Pointer reingelesen,
der zugriff sollte über Z=*(curr+cnt/* *sizeof(cnt) ?*/) schon stimmen...
Private Nachricht senden Benutzer-Profile anzeigen
 
Andy386
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 485
Anmeldedatum: 24.06.09
Wohnort: ---
Version: 7.1/8
     Beitrag Verfasst am: 09.09.2009, 09:17     Titel:
  Antworten mit Zitat      
RAAAAAHHHH....

Der Fehler lag nicht in meinem Speicherzugriff, sondern beim printf !
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 - 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.