/*************************************************************************** * Copyright (C) 2008 by Douglas Castro * * douglas@localhost.localdomain * * * ***************************************************************************/ #ifndef AMR_H #define AMR_H #include #include #include #include #include "bool.h" #include "definicoes.h" #include "arvore.h" #include "imprime.h" #include "gnuplot_i.h" #include "plota.h" #include "normas.h" #define OUT_PREFIX2 "outv" void mostra_pac(FILE *arq, VNo pac[], int k); void compara_folhas(No *r, double vet[], int *cont, double *norm); /** * Rotina para limpar memoria. Mata os matos, arvores. * @param r [in] arvore a ser eliminada */ void mata_mato(No *r); /** * Denominada de sintese por percorrer recursivamente a arvore, da raiz para as folhas, calculando * o valor das medias nos niveis mais finos. * Esta funcao faz a sintese no ponto de vista de Harten ( o esquema de previsao e nao linear) * @param d [in] dimensao do dominio * @param op [in] ordem de previsao, TRUE para 4 ordem e FALSE para 2 ordem * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param xmin [in] coordenadas do vertice esquerdo/inferior da celula * @param xmax [in] coordenadas do vertice direito/superior da celula * @param profund [in] profundidade de um certo no na arvore * @param (pred) [in] esquema de previsao nao linear (Harten) * @param niv [in] quantidade de niveis da arvore * @param lim [in] sintese sera feita a partir desse nivel */ void amr_sintese_harten(int d, bool_t op, VNo pac[], double xmin[], double xmax[], int prof, Preditor pred, int niv, int lim); /** * Denominada de sintese por percorrer recursivamente a arvore, da raiz para as folhas, calculando * o valor das medias nos niveis mais finos. * Faz a sintese do ponto de vista de Haar (este caso linear) * @param pac [in] conjunto de arvores, no centro esta a arvore onde sera feita a sintese * @param profund [in] profundidade de um certo no na arvore * @param niv [in] quantos niveis tem a arvore */ void amr_sintese_haar(No *pac, int profund, int niv); /** * Funcao faz a decomposicao multiresolucao (MR) dos dados armazenados em uma arvore,das folhas para a raiz. * Tomados dois irmaos, digamos esquerdo e direito, esta funcao calcula a diferenca de informacao * entre os niveis {k+1} e {k} e armazena no irmao esquerdo. No irmao direito temos o valor da media que * pertence a seu pai. * Se o paramentro sim == TRUE havera truncamento dos detalhes. * Esta funcao faz a analise no ponto de vista de Harten ( o esquema de previsao e nao linear) * @param d [in] dimensao do dominio * @param op [in] ordem de previsao, TRUE para quarta ordem, FALSE para segunda ordem * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param niv [in] numero total de niveis na malha * @param xmin [in] coordenadas do vertice esquerdo/inferior da celula * @param xmax [in] coordenadas do vertice direito/superior da celula * @param prof [in] profundidade de um certo no na arvore * @param (pred) [in] esquema de previsao nao linear (Harten) * @param eps [in] tolerancia * @param lim [in] ate onde pode descer na arvore * @param sim [in] diz se e ou nao para fazer o truncamento * Uma faz a analise no ponto de vista de Harten ( o esquema de previsao e nao linear) * e a outra no poto de vista de Haar ( este caso linear) */ void amr_analise_harten(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, int lim, bool_t sim); /** * Funcao faz a decomposicao multiresolucao (MR) dos dados armazenados em uma arvore,das folhas para a raiz. * Tomados dois irmaos, digamos esquerdo e direito, esta funcao calcula a diferenca de informacao * entre os niveis {k+1} e {k} e armazena no irmao esquerdo. No irmao direito temos o valor da media que * pertence a seu pai. * Se o paramentro sim == TRUE havera truncamento dos detalhes. * Esta funcao faz a analise no ponto de vista de Haar ( o esquema de previsao e linear) * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param profund [in] profundidade de um certo no na arvore * @param eps [in] tolerancia para o detalhe * @param lim [int] ate onde e para descer na arvore * @param sim [in] Se sim == TRUE e feito o truncamento dos detalhes usando parametro eps */ void amr_analise_haar(No *pac, int niv, int prof, double eps, bool_t sim); /** * escolhe qual o tipo de analise a ser feita, cancelamento de polinomios de grau 0 (Haar) ou * de polinomios de grau 2 ou polinomios de grau 4. * @param d [in] dimensao do dominio * @param op [in] ordem de previsao. TRUE para 4 ordem e FALSE para 2 ordem * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param niv [in] numero total de niveis na malha * @param xmin [in] coordenadas do vertice esquerdo/inferior da celula * @param xmax [in] coordenadas do vertice direito/superior da celula * @param prof [in] profundidade de um certo no na arvore * @param (pred) [in] esquema de previsao nao linear (Harten) * @param eps [in] tolerancia * @param lim [in] ate onde pode descer na arvore * @param sim [in] diz se e ou nao para fazer o truncamento * @param haar [in] TRUE para fazer analise no sentido de Haar e FALSE faz analise num esquema de alta ordem */ void analise_multiresolucao(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, bool_t sim, bool_t haar); /** * escolhe qual o tipo de sintese a ser feita, cancelamento de polinomios de grau 0 (Haar) ou * de polinomios de grau 2 ou polinomios de grau 4. * @param d [in] dimensao do dominio * @param op [in] ordem de previsao. TRUE para 4 ordem e FALSE para 2 ordem * @param pac [in/out] conjunto de arvores, no centro esta a arvore onde sera apicada a sintese * @param niv [in] numero total de niveis na malha * @param xmin [in] coordenadas do vertice esquerdo/inferior da celula * @param xmax [in] coordenadas do vertice direito/superior da celula * @param prof [in] profundidade de um certo no na arvore * @param (pred) [in] esquema de previsao nao linear (Harten) * @param eps [in] tolerancia * @param haar [in] TRUE para fazer analise no sentido de Haar e FALSE faz analise num esquema de alta ordem */ void sintese_multiresolucao(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, bool_t haar); void amr(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, bool_t sim, bool_t haar, bool_t recs); void reconstroi(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, bool_t haar); void poda(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, bool_t sim, bool_t haar); void poda_haar(No *r, int niv, int prof, double eps, bool_t sim); void poda_harten(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, int lim, bool_t sim); /* poda usando esquema de previsao de harten mas verifica se os descendentes do vizinho foram apagados */ void poda_hartenv2(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, double eps, int lim, bool_t sim); void refina(int d, bool_t op, VNo pac[], int niv, double xmin[], double xmax[], int prof, Preditor pred, bool_t haar); void refina_haar(No *r, int prof, int niv); void refina_harten(int d, bool_t op, VNo pac[], double xmin[], double xmax[], int prof, Preditor pred, int niv); #endif