%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% 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. Tarefa: implementar uma funcao normap(x,p) em Scilab, que chama subrotina em fortran90, que por sua vez chama BLAS dasum: calculo da norma da soma (p=1) BLAS dnrm2: calculo da norma Euclidiana (p=2) e por sua conta calcula as demais normas p (nao implementadas na BLAS) e tambem calcula norma do maximo (para p=-1) edite: normap.f90 subroutine normap(n,x,p,norma) ! calcular a norma p de um vetor x(*) dado real (kind=8) x(*),norma integer :: i,n,p real (kind=8) dnrm2,dasum external dnrm2,dasum if (p==-1) then ! este caso ficarah como exercicio da lista 2 ! calcular a norma do maximo norma=.0 elseif (p<=0) then norma=.0 elseif (p==1) then ! delegaremos essa tarefa a funcao dasum da BLAS norma=dasum(n,x,1) elseif (p==2) then ! delegaremos essa tarefa a funcao dnrm2 da BLAS norma=dnrm2(n,x,1) else ! este caso ficarah como exercicio da lista 2 ! p eh inteiro e maior do que 2 norma=.0 end if end gfortran -shared -fPIC normap.f90 -lblas -o normap.so no Scilab: ilib_for_link("normap","normap.f90",[],"f") exec loader.sce function u=normap(x,p) n = max(size(x,1),size(x,2)); u = call('normap',n,1,"i",x,2,"d",p,3,"i","out",[1,1],4,"d"); endfunction x = rand(5,1) normap(x,-1) normap(x,3) %% %% Feito JBC 10Set2012 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%