begin process at 2012 05 29 23:48:24
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C++ & C++ .NET

 > 

Algorithme

 > 

Maths

 > 

Librairy calcul matriciel


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Librairy calcul matriciel

lundi 6 avril 2009 à 23:14:10 | Librairy calcul matriciel

hitcher

Bonjour,

je doit travailler avec des matrices qui soit capable de faire des régressions linéaires (X/Y  ou (X'X)^-1 X'Y pour les puristes) mais pas seulement. Je suis en deuil de newmat qui ne migre pas très bien vers VC++ 2008 (je fait des dll pour excel) et l'interface GSL est naze (sorry pour ceux qui ne jurent que par GSL qui est tres bien sinon). Quelqu'un aurrait une Lib facile d'installe à sa connaissance?

merci
mardi 7 avril 2009 à 12:12:08 | Re : Librairy calcul matriciel

BruNews

Administrateur CodeS-SourceS

Exemple DLL avec seule fonction pour X /= Y.
règle du jeu: Si diviseur == 0.0 alors X inchangé.
A noter qu'il n'y a aucun saut de code dans boucle, perfs au RDV.
La DLL fait 2.5 Ko à ce point.

__declspec(align(16)) const double dPACK1PZ[2] = {1.0, 1.0};

#pragma comment(linker, "/entry:myDllMain")
__declspec(naked) int __stdcall myDllMain(HINSTANCE hdll, DWORD dwReason, LPVOID Reserved)
{
  __asm {
    mov     eax, 1
    ret     12
  }
}

__declspec(naked) void __stdcall MatrixDivMatrix(double *pX, double *pY, DWORD count)
{ // [esp+4] = pX, [esp+8] = pY, [esp+12] = count
  __asm {
    mov     ecx, [esp+12]         ; ECX = count
    mov     [esp-4], ebx
    mov     eax, [esp+4]          ; EAX = pX
    mov     edx, [esp+8]          ; EDX = pY
    movapd  xmm3, xmmword ptr dPACK1PZ
    xorpd   xmm4, xmm4            ; XMM4 = 0.0
    shr     ecx, 1
    setc    bl                    ; BL != 0 SI ENCORE 1 A TRAITER
    test    ecx, ecx
    je      short goULTIME
goPARDEUX:
    movdqu  xmm1, xmmword ptr[edx]
    movapd  xmm2, xmm3            ; XMM2 = 1.0
    movapd  xmm5, xmm1
    movdqu  xmm0, xmmword ptr[eax]
    cmppd   xmm5, xmm4, 0
    pand    xmm2, xmm5
    addpd   xmm1, xmm2            ; SI XMM1 == 0.0 ALORS XMM1 = 1.0
    divpd   xmm0, xmm1
    movdqu  xmmword ptr[eax], xmm0
    add     edx, 16
    add     eax, 16
    sub     ecx, 1
    jne     short goPARDEUX
goULTIME:
    test    bl, bl
    je      short divEXIT
    movsd   xmm1, qword ptr[edx]
    movapd  xmm2, xmm3
    movapd  xmm5, xmm1
    movsd   xmm0, qword ptr[eax]
    cmpsd   xmm5, xmm4, 0
    pand    xmm2, xmm5
    addsd   xmm1, xmm2
    divsd   xmm0, xmm1
    movsd   qword ptr[eax], xmm0
divEXIT:
    mov     ebx, [esp-4]
    ret     12
  }
}

----------------------------------
FICHIER bnMatrix.def :

LIBRARY bnMatrix
EXPORTS
  MatrixDivMatrix  @1
--------------------------------

Prog de test en C (ira idem pour Excel):

#pragma comment(lib, "bnMatrix.lib")
void __stdcall MatrixDivMatrix(double *pX, double *pY, DWORD count);

char szappname[] = "Matrix";
double matY[9] = {1.0, 2.0, 0.0, 4.0, 6.0, 1.0, 2.0, 0.0, 4.0};

void tstDivMatrix(VOID)
{
  double matX[9];
  char buf[280], *c;
  int i;
  matX[0] = 4.0;
  matX[1] = 4.0;
  matX[2] = 4.0;
  matX[3] = 4.0;
  matX[4] = -18.0;
  matX[5] = -24.40;
  matX[6] = 128.2;
  matX[7] = 1.0;
  matX[8] = 64.5;
  MatrixDivMatrix(matX, matY, 9);
  c = buf;
  for(i = 0; i < 9; i++) {
    c = bnDoubleToA(&matX[i], c);
    *c++ = 10;
  }
  *(c-1) = 0;
  MessageBox(0, buf, szappname, 0);
}

#pragma comment(linker, "/entry:myWinMain")
__declspec(naked) void __stdcall myWinMain()
{
  __asm {
    call    tstDivMatrix
    push    0
    call    dword ptr ExitProcess
  }
}


ciao...
BruNews, MVP VC++



Cette discussion est classée dans : calcul, gsl, matriciel, librairy


Répondre à ce message

Sujets en rapport avec ce message

Recherche Codes sources de calcul matriciel et de statistiques [ par bizrap ] Bonjour a tous.Je suis pour le moment en train de developper une application en Econometrie et un pricer d options en Finance. (je sais, ce n est pas Librarie dédier au calcul matriciel [ par Stiko ] slt,est ce que connaissez des libaraire dédier au calcul matriciels de grandes tailles et qui fonctionnent avec VC 2003?? Une classe d'algèbre (calcul matriciel) performante ? [ par Sylphe67 ] Bonjour à tous,En une phrase, je recherche une classe template permettant d'effectuer du calcul matriciel performant sur des matrices carrées de taill Somme matriciel [ par cpp26 ] salut mes amis ca va ;Pouver-vous m'aider a ecrire un programme optimale en C qui va faire la somme de deux MATRICE.Mon compilateur est Code::BlockMeR Conversion d'entier en base 2^32 vers base 10 [ par le_duche ] Bonjour !Je chercher je cherche, mais je ne trouve pas d'idée.Dans le cadre de l'implémentation d'une classe de grands entiers, je souhaite pouvoir co Calcul période sinus sur Pic [ par spiderloic74 ] <meta name="CREATED" content="20080904;83 math calcul formel [ par yvessimon ] yvessimon Petit problème API Windows [ par TCHATTE ] Bonjour,je suis en train d'essayer d'apprendre comment fonctionne l'api windows ... j'ai a peu près compris comment afficher tout ce que je veux par c Calcul d'une puissance en C avec pow() [ par Smallstones2 ] Bonjour, pourriez vous m'aider. Voici mon programme mais celui ci ne marche pas: #include #include main () { float x, y,z; printf ("Entrez x : "


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,936 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales