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

tand in mex-File übertragen

 

Benniben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 18:15     Titel: tand in mex-File übertragen
  Antworten mit Zitat      
Hi,

ich möchte tand so wie es in Matlab implementiert ist auch in meinem C-mex-File benutzen. Für cosd und sind hab ich das gemacht. Aber hier weiss ich nicht wie ich es schreiben soll. Vorallem:
Code:


Kann das jemand implementieren? In C?
Code:

n = round(x/90);
x = x - n*90;
z = (x == 0);
m = mod(n,2);
x(m==0) = tan(pi/180*x(m==0));
x(m==1 & ~z) = -1./tan(pi/180*x(m==1 & ~z));
x(m==1 & z & n>=0) = Inf;
x(m==1 & z & n<0) = -Inf;
 


Vielen Dank


Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 18:21     Titel:
  Antworten mit Zitat      
Das hab ich bis jetzt, es gibt aber noch Fehler:


Code:
double tand (double Theta){

                        int nn=floor((Theta/90)+0.5);
                        int mm=fmod(nn,2);
                        Theta=Theta-nn*90;        
                        int zz=(Theta==0);
                       
                        if(mm==0)
                         Theta=tan(pi/180*Theta);
                        else if(mm==1 && mm!=zz)
                         Theta=-1/(pi/180*Theta);
                        else if(mm==1 && mm==z && nn>0)
                         Theta=Inf;
                        else if(mm==1 && mm==z && nn<0)
                         Theta=-Inf;
                         return (Theta);
                          }                          
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.12.2010, 18:28     Titel:
  Antworten mit Zitat      
Code:

double tand (double Theta){

                        int nn=floor((Theta/90)+0.5);
                        int mm=fmod(nn,2);
                        Theta=Theta-nn*90;        
                        int zz=Theta;
                       
                        if(mm==0)
                         Theta=tan(pi/180*Theta);
                        else if(mm==1 && mm!=zz)
                         Theta=-1/(pi/180*Theta);
                        else if(mm==1 && mm==zz && nn>0)
                         Theta=Inf;
                        else if(mm==1 && mm==zz && nn<0)
                         Theta=-Inf;
                         return (Theta);
                          }                      

Fehlermeldung dazu:
Error brech.c: 67 illegal statement termination
Error brech.c: 67 skipping `int'
Error brech.c: 67 undeclared identifier `zz'
Error brech.c: 74 undeclared identifier `Inf'

Zeile 67 ist diese: int zz=Theta;
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 10:54     Titel:
  Antworten mit Zitat      
Ich würde mich freuen, wenn mir jemand sagen könnte, ob das so richtig ist:

Code:
double tand (double Theta){
                        int zz;
                        int nn=floor((Theta/90)+0.5);
                        int mm=fmod(nn,2);
                        Theta=Theta-nn*90;        
                        if (Theta==0)
                           {zz=0;}
                       
                        if(mm==0)
                         Theta=tan(pi/180*Theta);
                       
                        else if(mm==1 && mm!=zz)
                         Theta=-1/(pi/180*Theta);
                       
                        else if(mm==1 && mm==zz && nn>0)
                         Theta=isnan(Theta);


                        else if(mm==1 && mm==zz && nn<0)
                         Theta=-isnan(Theta);
                       
                         return (Theta);
                          }
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.12.2010, 11:13     Titel:
  Antworten mit Zitat      
Ok so wies aussieht ist :

Theta=isnan(Theta); ist ja eh falsch, ist müsste dem Inf bzw -Inf zuweisen, aber wie mach man sowas???
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.12.2010, 00:04     Titel:
  Antworten mit Zitat      
Dear Anonymous,

Code:

Theta = mxGetNaN();
% oder
Theta = mxGetInf();
 


Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2010, 09:38     Titel:
  Antworten mit Zitat      
Besten Dank Jan,

und -Inf funktioniert wie?
 
Benniben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.12.2010, 09:54     Titel:
  Antworten mit Zitat      
Ok die Antowrt dazu habe ich gefunden:

Your system specifies the value of inf; you cannot modify it.

ABER es geht trotzdem nicht, diese Form hat es jetzt:

Code:
double tand (double Theta){
                           
                        int zz;
                        int nn=floor((Theta/90)+0.5);
                        int mm=fmod(nn,2);
                            Theta=Theta-nn*90;        
                        if (Theta==0)
                           {zz=0;}
                       
                        if(mm==0)
                         Theta=tan(pi/180*Theta);
                       
                        else if(mm==1 && mm!=zz)
                         Theta=-1/(pi/180*Theta);
                       
                        else if(mm==1 && mm==zz && nn>0)
                            Theta=mxGetInf();

                        else if(mm==1 && mm==zz && nn<0)
                            Theta=mxGetInf();
                       
                         return (Theta);
                          }                          
 

Ich bekomme auch keine hilfreiche Fehlermeldung, sondern nur:

Error in ==> ... das wars? Weiss jemand was falsch ist?
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 16.12.2010, 04:54     Titel:
  Antworten mit Zitat      
Hallo Benniben,

-Inf geht mit:
Code:
x = -mxGetInf();


Zitat:

Ich bekomme auch keine hilfreiche Fehlermeldung, sondern nur:

Error in ==> ... das wars?

Sehr merkwürdig. Das sieht nicht so aus, als sei der Fehler innerhalb des Mex-Files. Kannst Du ein paar mexPrintf's einfügen um herauszubekommen, in welcher Zeile der Fehler auftritt?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Benniben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2010, 09:56     Titel:
  Antworten mit Zitat      
Letzte Frage,

ich muss man sowas (Ergebnis Inf) im Mexfile abfabgen?
 
Benniben

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.12.2010, 12:04     Titel:
  Antworten mit Zitat      
Ok gefunden isinf() brauche ich, danke an alle!
 
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.