static void huematrix(GLfloat mat[4][4], float angle) { float mag, rot[4][4]; float xrs, xrc; float yrs, yrc; float zrs, zrc; // Rotate the grey vector into positive Z mag = sqrt(2.0); xrs = 1.0/mag; xrc = 1.0/mag; xrotatemat(mat, xrs, xrc); mag = sqrt(3.0); yrs = -1.0/mag; yrc = sqrt(2.0)/mag; yrotatemat(rot, yrs, yrc); matrixmult(rot, mat, mat); // Rotate the hue zrs = sin(angle); zrc = cos(angle); zrotatemat(rot, zrs, zrc); matrixmult(rot, mat, mat); // Rotate the grey vector back into place yrotatemat(rot, -yrs, yrc); matrixmult(rot, mat, mat); xrotatemat(rot, -xrs, xrc); matrixmult(rot, mat, mat); }
int main(int argc, char *argv[]) { Matrix *A = createMatrix(3, 2); A->data[0] = 1.2; A->data[1] = 2.3; A->data[2] = 3.4; A->data[3] = 4.5; A->data[4] = 5.6; A->data[5] = 6.7; printmat(A); Matrix *B = createMatrix(2, 3); B->data[0] = 5.5; B->data[1] = 6.6; B->data[2] = 7.7; B->data[3] = 1.2; B->data[4] = 2.1; B->data[5] = 3.3; printmat(B); Matrix *C = createMatrix(3, 3); matrixmult(A, B, C); printmat(C); destroyMatrix(A); destroyMatrix(B); destroyMatrix(C); return 0; }
void matrixmult(long long int n) { if(n==1) return; if(n==2) { matrix[0][0]=5; matrix[0][1]=2; matrix[1][0]=2; matrix[1][1]=1; return; } else if(n==3) { matrix[0][0]=12; matrix[0][1]=5; matrix[1][0]=5; matrix[1][1]=2; return; } matrixmult(n/2); long long int a[2][2]; long long int temp; a[0][0]=(((matrix[0][0]*matrix[0][0])) +((matrix[0][1]*matrix[1][0]))) ; a[0][1]=(((matrix[0][0]*matrix[0][1])) +((matrix[0][1]*matrix[1][1]))) ; a[1][0]=(((matrix[0][0]*matrix[1][0])) +((matrix[1][0]*matrix[1][1]))) ; a[1][1]=(((matrix[0][1]*matrix[1][0])) +((matrix[1][1]*matrix[1][1]))) ; if(n%2==1) { temp = a[0][0]; a[0][0]=(2*a[0][0]+a[0][1]); a[0][1]=temp; temp = a[1][0]; a[1][0]=(2*a[1][0]+a[1][1]); a[1][1]=temp; } matrix[0][0]=a[0][0]; matrix[0][1]=a[0][1]; matrix[1][0]=a[1][0]; matrix[1][1]=a[1][1]; }
void matrixmult(long long int n) { if(n==2) { matrix[0][0]=2; matrix[0][1]=1; matrix[1][0]=1; matrix[1][1]=1; return; } else if(n==3) { matrix[0][0]=3; matrix[0][1]=2; matrix[1][0]=2; matrix[1][1]=1; return; } matrixmult(n/2); long long int a[2][2]; long long int temp; a[0][0]=(((matrix[0][0]*matrix[0][0])%rem) +((matrix[0][1]*matrix[1][0])%rem))%rem ; a[0][1]=(((matrix[0][0]*matrix[0][1])%rem) +((matrix[0][1]*matrix[1][1])%rem))%rem ; a[1][0]=(((matrix[0][0]*matrix[1][0])%rem) +((matrix[1][0]*matrix[1][1])%rem))%rem ; a[1][1]=(((matrix[0][1]*matrix[1][0])%rem) +((matrix[1][1]*matrix[1][1])%rem))%rem ; if(n%2==1) { temp = a[0][0]; a[0][0]=(a[0][0]+a[0][1])%rem; a[0][1]=temp; temp = a[1][0]; a[1][0]=(a[1][0]+a[1][1])%rem; a[1][1]=temp; } matrix[0][0]=a[0][0]; matrix[0][1]=a[0][1]; matrix[1][0]=a[1][0]; matrix[1][1]=a[1][1]; }
int main(int argc, char *argv[]) { Matrix A = { {1.2, 2.3, 3.4, 4.5, 5.6, 6.7}, 3, 2}; Matrix B = { {5.5, 6.6, 7.7, 1.2, 2.1, 3.3}, 2, 3}; printmat(A); printmat(B); Matrix C = matrixmult(A, B); printmat(C); return 0; }
int main(int argc, char **argv) { if(argc>=2) { switch(atoi(argv[1])) { case 1: return polyprint(argc-1, argv+1); case 2: return polypoly(argc-1, argv+1,2); // + case 3: return polypoly(argc-1, argv+1,3); // - case 4: return polypoly(argc-1, argv+1,4); // * case 5: return matrixmult(argc-1, argv+1,5); case 6: return polymatmult(argc-1, argv+1,6); } } // Ein Fehler ist aufgetreten. Gebe Syntax aus: cout << "Syntax: test1_02 <n> " << endl; cout << "1 - Ausgabe eines Polynoms" << endl; cout << "2 - Polynom+Polynom" << endl; cout << "3 - Polynom-Polynom" << endl; cout << "4 - Polynom*Polynom" << endl; cout << "5 - Matrix*Matrix" << endl; cout << "6 - Polynom*Matrix" << endl; return 1; // Rueckgabewert !=0, d.h. Fehler }
int main() { long long int n,ans; scanf("%lld",&n); matrix[0][0]=2; matrix[0][1]=1; matrix[1][0]=1; matrix[1][1]=0; if(n>=2){ matrixmult(n-1); ans = matrix[0][0]*3 + matrix[0][1]; } else if(n==1) ans=3; else ans=1; printf("%lld\n",ans); return 0; }
int main() { int i,t; long int ans; long long int n; scanf("%d",&t); for(i=0;i<t;i++) { scanf("%lld",&n); matrix[0][0]=1; matrix[0][1]=1; matrix[1][0]=1; matrix[1][1]=0; matrixmult(n+1); ans = (matrix[0][0] + matrix[0][1] - 2)%rem; printf("%ld\n",ans); } return 0; }
int main(int argc, char *argv[]){ if(argc < 4){ std::cerr << "4 arguments required" << std::endl; return -1; } //setting optimizations by commmand line if(argc>5){ std::string arg4(argv[4]); if(arg4 == "-q") { _sse_ON = true; blocking = false; } else if(arg4 == "-w") { _sse_ON = false; blocking = true; } else if(arg4 == "-e") { _sse_ON = false; blocking = false; } } //reading in A std::ifstream inputFileA(argv[1], std::ios::in); int ndimA; int mdimA; inputFileA >> mdimA; inputFileA >> ndimA; int size = ndimA*mdimA; double * dataA = new double[size]; for(int i = 0;i < size;) { inputFileA >> dataA[i++]; } //reading in B std::ifstream inputFileB(argv[2], std::ios::in); int ndimB; int mdimB; inputFileB >> mdimB; inputFileB >> ndimB; size = ndimB*mdimB; double * dataB = new double[size]; for(int i = 0;i < size;) { inputFileB >> dataB[i++]; } size = mdimA*ndimB; double * dataC = new double[size]; timeval start,end; gettimeofday(&start,0); matrixmult(mdimA,ndimB,ndimA,dataA,ndimA,dataB,ndimB,dataC,ndimB); gettimeofday(&end,0); std::cout << "wall clock time: " << ((double)(end.tv_sec*1000000 + end.tv_usec)-(double)(start.tv_sec*1000000 + start.tv_usec))/1000000 << std::endl; //writing C std::ofstream outputFile(argv[3], std::ios::out); outputFile << mdimA << " " << ndimB << std::endl; for(int i = 0; i < size; ++i) { outputFile << dataC[i] << std::endl; } return 0; }
int GzPushMatrix(GzRender *render, GzMatrix matrix) { /* - push a matrix onto the Ximage stack - check for stack overflow */ if (render == NULL) { return GZ_FAILURE; } //check overflow if (render->matlevel == MATLEVELS) { return GZ_FAILURE; } GzMatrix prodmatrx; if (render->matlevel == -1) { memcpy(render->Ximage[render->matlevel + 1], matrix, sizeof(GzMatrix)); } else { matrixmult(render->Ximage[render->matlevel], matrix, render->Ximage[render->matlevel+1]); } render->matlevel++; if (render->matlevel == 0 || render->matlevel == 1) { GzMatrix identityMtx; identityMtx[0][0] = 1; identityMtx[0][1] = 0; identityMtx[0][2] = 0; identityMtx[0][3] = 0; identityMtx[1][0] = 0; identityMtx[1][1] = 1; identityMtx[1][2] = 0; identityMtx[1][3] = 0; identityMtx[2][0] = 0; identityMtx[2][1] = 0; identityMtx[2][2] = 1; identityMtx[2][3] = 0; identityMtx[3][0] = 0; identityMtx[3][1] = 0; identityMtx[3][2] = 0; identityMtx[3][3] = 1; memcpy(render->Xnorm[render->matlevel], identityMtx, sizeof(GzMatrix)); } else { GzMatrix R; float K = 1 / sqrt(matrix[0][0] * matrix[0][0] + matrix[1][0] * matrix[1][0] + matrix[2][0] * matrix[2][0]); R[0][0] = matrix[0][0] * K; R[0][1] = matrix[0][1] * K; R[0][2] = matrix[0][2] * K; R[0][3] = 0; R[1][0] = matrix[1][0] * K; R[1][1] = matrix[1][1] * K; R[1][2] = matrix[1][2] * K; R[1][3] = 0; R[2][0] = matrix[2][0] * K; R[2][1] = matrix[2][1] * K; R[2][2] = matrix[2][2] * K; R[2][3] = 0; R[3][0] = 0; R[3][1] = 0; R[3][2] = 0; R[3][3] = 1; GzMatrix Xformprod; matrixmult(render->Xnorm[render->matlevel - 1], R, Xformprod); memcpy(render->Xnorm[render->matlevel], Xformprod, sizeof(GzMatrix)); } return GZ_SUCCESS; }