Avatar billede jakob_madsen Nybegynder
08. juli 2003 - 12:35 Der er 4 kommentarer og
1 løsning

Invertering af en matrice vedhjælp af MKL

Jeg forsøger at invertere en matrice vej hjælp af MKL's
sgetrf og sgetri men kan ikke få dette at fungere.
Nogen som kan komme med et kode eksempel.
Avatar billede arne_v Ekspert
08. juli 2003 - 12:46 #1
Jeg har ikke et kode eksempel, men jeg kan da prøve at konvertere
kaldene fra Fortran til C:

int n; // dimension
float a[n][n]; // matrix
int pivot[n]; // pivot
int status; // 0=success
float work[n]; // work storage

sgetrf(&n, &n, a, &n, pivot, &status);

sgetri(&n, a, &n, pivot, work, &n, &status);

a er både input og output.

Husk at C/C++ og Fortran har forskellig konvention omkring
to-dimensionelel arrays, så når du kalder fra C/C++ til Fortran så
kalder du errelt med den transponerede matrice.
Avatar billede jakob_madsen Nybegynder
08. juli 2003 - 13:41 #2
Jeg har prøvet at indsætte din kode, men der kommer et forkert resultat ud. ??? Er det noget med c++ og fortrans forskellige håndtering af to-dimensionelel array

#include <stdio.h>
#include <mkl.h>
#include <math.h>
#include <float.h>
#include <stdlib.h>
int main()
{
const int dim=3;
int n=dim; // dimension
float a[dim][dim]; // matrix
int pivot[dim]; // pivot
int status; // 0=success
float work[dim]; // work storage
int i,j;

for(i=0;i<dim;i++)
{
    for(j=0;j<dim;j++)
    {
        a[i][j]=i*j+i+j*j+1 ;/*Bare nogle værdier */
        printf("%.2f ",a[i][j]);
    }
    printf("\n");
}


sgetrf(&n, &n, &a[0][0], &n, pivot, &status);
printf("\nsgetrf status :%i \n",status);
for(i=0;i<dim;i++)
{
    for(j=0;j<dim;j++)
    {
        printf("%.2f ",a[i][j]);
    }
    printf("\n");
}


sgetri(&n, &a[0][0], &n, pivot, work, &n, &status);
printf(" \nsgetri status :%i \n",status);
for(i=0;i<dim;i++)
{
    for(j=0;j<dim;j++)
    {
        printf("%.2f ",a[i][j]);
    }
    printf("\n");
}



return 0;
Avatar billede jakob_madsen Nybegynder
08. juli 2003 - 13:47 #3
Hov vent lige, jeg tror at A bliver singulær, jeg kontrollere det lige.
Avatar billede jakob_madsen Nybegynder
08. juli 2003 - 13:50 #4
jep, din kode funger. (O:
Nu virker det. Mange tak. (Husk at svar så jeg kan give dig point) (igen igen.)
Avatar billede arne_v Ekspert
08. juli 2003 - 14:06 #5
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester