LessThanJake Skrevet 4. september 2005 Del Skrevet 4. september 2005 Sitter her og prøver å lage en funksjon som tar i mot en to-dimensjonal array av ukjent størrelse. Og jeg har forsåvidt klart det. Men synes grensesnitet på funksjonen blir dårlig. Har ikke klart å finne noen bra guider som dekker dette, annet enn et sted som sa at det var vanskelig. funksjonen skal ta i mot x, b og A somt dimensjonene til disse som er m og n. funksjonen skal så lagre b*A i x. Dette er min implementasjon: int MatrixVectorMultiply(double x[], double *A, double b[], int m, int n) { int i, j; for(i = 0; i < m; i++) { x[i] = 0; for(j = 0; j < n; j++) { x[i] += A[i*n+j]*b[j]; } } return 0; } og jeg kan så bruke dette for å kalle funksjonen: double A[3][4] = {{1,2,3,4},{4,5,6,7},{7,8,9,10}}; double b[] = {1,2,3,4}; double x[3]; MatrixVectorMultiply(x,&A[0][0],b,3,4); Dette fungerer men jeg vil heller kunne skrive:. MatrixVectorMultiply(x,A,b,3,4); Noen ideer for hvordan jeg kan oppnå det? Lenke til kommentar
JBlack Skrevet 4. september 2005 Del Skrevet 4. september 2005 (endret) int MatrixVectorMultiply(double x[], double A[][], double b[], int m, int n){ int i, j; double *B=(double *)A; for(i = 0; i < m; i++){ x[i] = 0; for(j = 0; j < n; j++){ x[i] += B[i*n+j]*b[j]; } } return 0; } Endret 4. september 2005 av JBlack Lenke til kommentar
LessThanJake Skrevet 4. september 2005 Forfatter Del Skrevet 4. september 2005 Takker for svar, fungerer fint.! Så da drister jeg meg til et spørsmål til. Dette er da altså starten på et lineæralgebrabibliotek jeg skla prøve å lage. Foreløpig kompilerer jeg bare med komandoen: gcc -o superd main.c mnlinalg.c .., men jeg vil gjerne lage et bibliotek slik at jeg bare kan bruke #include <mnlinalg.h> der jeg trenger det (f.eks i main). Noen som vet om en bra guide til det. Lenke til kommentar
A_N_K Skrevet 4. september 2005 Del Skrevet 4. september 2005 (endret) Det er ikke verre enn som så: gcc mnlinalg.c -shared -o libmnlinalg.so Deretter må du plassere funksjonene du vil eksportere fra mnlinalg i en header mnlinalg.h og plassere den i en standard include-katalog. Endret 4. september 2005 av A_N_K Lenke til kommentar
Peter Skrevet 4. september 2005 Del Skrevet 4. september 2005 Vet ikke hvor stort dette biblioteket skal bli, men dersom det ikke er så veldig stort, anbefaler jeg å eksportere funksjonene til en .lib bibliotek, som deretter kan linkes statisk inn i applikasjonen senere. Ellers anbefaler jeg jeg å eksportere en .dll og linke mot .lib (som blir laget når du lager en dll og eksporterer funksjonene), og distribuere evt. programmer med denne .dll filen. Dersom biblioteket er veldig lite, kan du legge både deklarasjon og definisjon i en header, men jeg vet ikke hvor mange stygg blikk jeg får for å foreslå noe sånt her Lenke til kommentar
A_N_K Skrevet 4. september 2005 Del Skrevet 4. september 2005 (endret) Hmm .. mulig det er hull i heuristikken min, men jeg gjetter at han tenker på Linux. Lite mening med .dll på den plattformen. Edit: Dessuten tror jeg ikke C støtter inline definisjoner. Endret 4. september 2005 av A_N_K Lenke til kommentar
Peter Skrevet 5. september 2005 Del Skrevet 5. september 2005 Det kan nok stemme. Jeg jobber (dessverre) bare på windows for tiden, så jeg vet lite om linux. Dessuten jobber jeg med C++, så jeg var nok litt ute å kjøre da jeg svarte. Lenke til kommentar
JBlack Skrevet 6. september 2005 Del Skrevet 6. september 2005 Btw: det vil være ryddigere, dersom du skal lage et bibliotek, å lage structs som inneholder dataene. Da kan man lage funskjoner som jobber direkte mot disse struct'ene i stedet. Og man slipper å kalle funksjoner med størrelser på array'ene fordi disse allerede er lagret i struct'ene. Med matrise-matte kan man få igjen array'er med andre dimensjoner enn de man putter inn. Da forenkler man mye ved å putte den informasjonen i den returnerte struct'en. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå