%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% MAP05 - Metodos Matriciais Computacionais - PPGMAp UFRGS %% Mat01050 - Algebra Matricial Computacional - DMPA UFRGS Tecnicamente, esse nao eh um script, pois nao pode ser executado. Entenda como um conjunto de instrucoes que facilmente podem ser carregados com o mouse. Objetivo: interface com subrotina em C que troca o sinal da diagonal de uma matriz dada edite arquivo matriz2_c.c: (nano matriz2_c.c) #define max(a,b)({typeof(a) _a=(a);typeof (b) _b=(b);_a>_b ? _a : _b; }) #define min(a,b)({typeof(a) _a=(a);typeof (b) _b=(b);_a<_b ? _a : _b; }) void matriz2_c(int *m, int*n, double a[],int *lda){ int i; for (i=0;i < min(*m,*n);i++){ a[i+ i*(*lda)] = -a[i + i*(*lda)]; } } gere o codigo objeto compartilhado com: gcc -shared matriz2_c.c -o matriz2_c.so No Scilab: ilib_for_link("matriz2_c","matriz2_c.c",[],"c") exec loader.sce function U=troca_sinal_diagonal(A) m=size(A,1); n=size(A,2); // numero de linhas e colunas U=call("matriz2_c",m,1,"i",n,2,"i",A,3,"d",m,4,"i","out",[m,n],3,"d") endfunction A = rand(4,5) U = troca_sinal_diagonal(A) %% Feito JBC 04Set2012 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%