contagem, enumeração e algumas aplicações em matemática · se y é um número entre 0 e 2n+1...

46
Contagem, Enumeração e algumas Aplicações em Matemática Antonio Castelo Filho e Douglas Cedrim Oliveira ICMC - USP 2 o Colóquio da Região Sudeste Janeiro de 2012

Upload: donga

Post on 21-Jan-2019

212 views

Category:

Documents


0 download

TRANSCRIPT

Contagem, Enumeraçãoe algumas Aplicações em Matemática

Antonio Castelo Filho e Douglas Cedrim Oliveira

ICMC - USP

2o Colóquio da Região Sudeste

Janeiro de 2012

Conteúdo

1 Introdução 11.1 Contagem e Enumeração . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11.2 Aproximação de Funções Implícitas . . . . . . . . . . . . . . . . . . . . . 21.3 Aproximações de Funções por mínimos quadrados . . . . . . . . . . . . 2

2 Contagem e Enumeração 52.1 Produtos Cartesianos Discretos . . . . . . . . . . . . . . . . . . . . . . . . 5

2.1.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52.1.3 Programas em Matlab/Octave . . . . . . . . . . . . . . . . . . . . 7

2.2 Permutações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102.2.3 Programas em Matlab/Octave . . . . . . . . . . . . . . . . . . . . 11

2.3 Combinações . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.1 Definição . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.3.2 Exemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3.3 Programas em Matlab/Octave . . . . . . . . . . . . . . . . . . . . 13

3 Aproximações de Funções Implícitas 153.1 Topologia Linear por Partes . . . . . . . . . . . . . . . . . . . . . . . . . . 153.2 Interpolação Linear Simplicial . . . . . . . . . . . . . . . . . . . . . . . . . 163.3 Esquema de Diferenças Simplicial . . . . . . . . . . . . . . . . . . . . . . 163.4 As Triangulações K1 e J1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183.5 Os Vértices da Aproximação . . . . . . . . . . . . . . . . . . . . . . . . . . 193.6 Programas em Matlab/Octave . . . . . . . . . . . . . . . . . . . . . . . . 20

4 Aproximações de Funções por mínimos quadrados 314.1 Método dos mínimos quadrados . . . . . . . . . . . . . . . . . . . . . . . 31

4.1.1 Polinômios univariados: O caso real (R) . . . . . . . . . . . . . . . 324.1.2 Polinômios multivariados: O caso geral (Rd) . . . . . . . . . . . . 35

Referências Bibliográficas 39

iii

Capítulo 1

Introdução

Adotou-se em todo esse trabalho as convenções do software Matlab/Octave parafazer referência a vetores e matrizes, ou às suas partes e serão apresentados algoritmose programas com a notação do Matlab/Octave.

1.1 Contagem e Enumeração

Muitos problemas da área de ciências exatas, tais como a matemática, a física, a en-genharia e a computação necessitam manipular objetos em dimensão elevada e tam-bém lidar com sua simulação em programas de computador. Para isto é necessárioalgoritmos capazes de trabalhar com um número de variáveis ou até mesmo númerode laços de código que serão dados em tempo de execução. Para esta tarefa neces-sitamos fazer uma formulação matemática e algorítmos que atendam a esta necessi-dade. Muitas destas tarefas são traduzidas em problemas de contagem e enumeração,a contagem até mesmo para a alocação de memória e a enumeração para apresentar osvários dados do problema.

Esta área de pesquisa denomina-se Algoritmos Combinatórios e exemplos de livrosclássicos são [6], [13] e [14]. Entre os tipos de problemas de contagem e enumeraçãomais importantes, podemos citar o produto cartesiano discreto, permutações e com-binações. Com o primeiro podemos simular um ninho de laços em um programa decomputador onde a quantidade de laços será dada em tempo de execução do código,representação de números inteiros em uma base, enumeração de malhas cartesianasem dimensão dada em tempo de execução, enumeração dos vértices de um hipercuboonde a dimensão da dada em tempo de execução, entre outros problemas.

Combinações são necessárias em problemas onde temos um conjunto de n dados equeremos obter todos os subconjuntos de k ≤ n dados deste. Também são inúmerasas aplicações de enumeração das combinações como por exemplo listar todas as facesde dimensão k de um simplexo de dimensão n. Por último mas não menos importantea enumeração das permutações de um conjunto de n símbolos ordenados são necessá-rios em problemas onde a ordem é requerida, e com a enumeração das combinações epermutações temos os arranjos. O Capítulo 2 apresenta alguns dos algoritmos combi-natórios que serão utilizados nos Capítulos posteriores.

2 Introdução

1.2 Aproximação de Funções Implícitas

Variedades definidas implicitamente (curvas no caso de dimensão um e superfí-cies no caso de dimensão dois) aparecem em várias aplicações tais como, modelagemgeométrica, modelagem molecular, computação gráfica, bifurcações em equações di-ferenciais, equações diferenciais com restrição, entre outras. Por este motivo desen-volver métodos, que sejam eficientes e produzam resultados com boa qualidade, paraencontrar tais variedades é um problema importante. Dada uma função diferenciávelF : Rm → Rn, m ≥ n pretende-se encontrar o conjunto dos pontos onde F se anula:

M = {x ∈ Rm | F(x) = 0}

Nos pontos de M onde a derivada de F tem posto máximo, o Teorema da FunçãoImplícita garante queM é uma variedade de dimensão m− n (pelo menos localmente).

Para funções onde m = 3 e n = 1, um dos métodos mais conhecidos para se en-contrar a superfície de nível F(x1, x2, x3) = 0 é o algoritmo chamado Marching Cubes[11] [10]. Neste algoritmo, a região de interesse é dividida em uma malha retangularuniforme e cada célula da malha é testada para saber se esta contém uma parte dasuperfície. Este teste é feito por meio dos sinais de F nos vértices do cubo. Quandotodas as células são testada obtém-se uma aproximação para a superfície. Este algo-ritmo é de difícil extensão para dimensões elevadas (m > 4). Neste caso os métodosmais utilizados são os baseados em decomposição simplicial (triangulação) do domí-nio e aproximação em cada simplexo por uma função mais simples (função afim, porexemplo) e encontrar os pontos onde estas aproximações se anulam. Existem váriostrabalhos na literatura sobre este tipo de aproximação, porém poucos em dimensãoelevada e entre eles podemos citar [15], [2], [3] e [4]. Quando se trata de aproximaçõesadaptativas, isto é, com refinamento em regiões de interesse, o número de trabalhos sereduz ainda mais e entre eles podemos citar [4], [12] e [18].

Com o uso de triangulações de Rm para aproximar variedades impícitas de dimen-sões superiores a 1, o volume de informações sobre a triangulação e a aproximaçãolinear por partes torna-se muito grande, portanto uma representação mais compactatanto das triangulações como das aproximações é essencial. O objetivo deste do Ca-pítulo 3 é apresentar uma breve introdução ao cálculo de uma uma aproximação po-ligonal paraM utilizando técnicas de enumeração de produtos cartesianos discretos,permutações e combinações.

1.3 Aproximações de Funções por mínimos quadrados

Uma das formas possíveis de representar funções em um domínio discreto é arma-zenar os seus valores na maior quantidade de pontos possíveis (eventualmente em to-dos), assim quando necessário basta avaliar o seu valor em um desses pontos. Quandoa função é essencialmente discreta, f : D → U, onde por exemplo D = {x1, . . . , xm}e U = {0, 1}, ou seja, possui um conjunto finito de pontos no domínio e na imagem,essa representação é válida e define totalmente a função. Porém, é comum querermosrepresentar funções onde D e U não precisam ser nem enumeráveis f : R→ R.

Com isso, como o armazenamento fica restrito a um conjunto finito de pontos, aoconsiderar a determinação do valor da função para um ponto que não esteja presente

1.3: Aproximações de Funções por mínimos quadrados 3

no conjunto de amostras disponíveis, representado pelas tuplas (xi, f (xi)), i = 1, . . . , m,ou seja, o valor de f é conhecido apenas em xi, faz-se necessário um processo quepossibilite essa avaliação. Esse problema pode ser resolvido através de um processode aproximação da função f por combinações de funções conhecidas.

Dois aspectos básicos acerca de f devem ser observados: A função f pode corres-ponder a uma amostragem de uma função conhecida, e.g. f (x) = x2; As amostrasf (xi) podem ser obtidas empiricamente, através de experimentos, medições, etc.

No primeiro caso, o erro da aproximação vai ficar determinado pela base de funçõesque serão utilizadas para aproximar f .

Já no segundo caso, como o comportamento da função não é conhecido, a escolhada base de funções para aproximação é dificultada e pode levar a resultados inadequa-dos, como aproximar uma parábola por uma reta, por exemplo.

É fácil encontrar na literatura formas analíticas de resolver o problema da aproxi-mação de funções por mínimos quadrados [16]. Apesar disso, no Capítulo 4 é feitauma breve revisão sobre o tema para ilustrar como produtos cartesianos discretos po-dem ajudar na solução desse tipo de problemas, sendo assim uma possível aplicaçãodo conteúdo que será visto no Capítulo 2.

4 Introdução

Capítulo 2

Contagem e Enumeração

Alguns dos textos clássicos sobre algoritmos combinatórios para maior aprofunda-mento são [14], [6] e [13]. Os algoritmos em Matlab/Octave que serão desenvolvidosneste capítulo serão utilizados nos capítulos posteriores.

2.1 Produtos Cartesianos Discretos

2.1.1 Definição

Dado um conjunto de n conjuntos discretos, Ik11 , Ik2

2 , . . . , Iknn , onde ki é o número de

elementos do conjunto i. Define-se o produto cartesiano I = Ik11 × Ik2

2 × · · · × Iknn como

o conjunto

I = {(i1, i2, . . . , in) | i1 ∈ Ik11 , i2 ∈ Ik1

1 , . . . , in ∈ Iknn }

Como exemplo, considere os conjuntos I21 = {0, 1} e I3

2 = {a, b, c}, então pela defi-nição acima tem-se

I = I21 × I3

2 = {(0, a), (0, b), (0, c), (1, a), (1, b), (1, c)}

2.1.2 Exemplos

A contagem (número de elementos neste caso) do conjunto I = Ik11 × Ik2

2 × · · · × Iknn

é bastante simples e é dados por k1k2 . . . kn. A enumeração (quais são os elementosapresentados em alguma ordem) já pode não ser uma tarefa tão simples.

A ordem da enumeração e o significado de cada ordem é de fundamental impor-tância em vários problemas. Como exemplo, considere I = Ik1

1 × Ik22 × · · · × Ikn

n , ondeIkii = {0, 1}. Como os elementos de cada conjunto são 0 ou 1, este conjunto pode ser

olhado como a representação na base 2 dos números 0 a 2n+1 − 1, isto depende daforma de enumeração deste conjunto. Para isto, podemos enumerar com a seguinte

6 Contagem e Enumeração

ordem:

0 = 0 · 20 + 0 · 21 + · · ·+ 0 · 2n correspondente a (0, 0, . . . , 0)1 = 1 · 20 + 0 · 21 + · · ·+ 0 · 2n correspondente a (1, 0, . . . , 0)2 = 0 · 20 + 1 · 21 + · · ·+ 0 · 2n correspondente a (0, 1, . . . , 0)

...2n+1 − 1 = 1 · 20 + 1 · 21 + · · ·+ 1 · 2n correspondente a (1, 1, . . . , 1)

Raciocínio análogo pode ser feito para a representação de números em qualquerbase como produto cartesiano com uma enumeração apropriada. Observem que épossível obter a ordem de uma enumeração de um produto cartesiano a partir de cadaelemento, tal como a regra do exemplo acima, e também é possível obter o elemento apartir da ordem deste elemento na enumeração utilizando um algoritmo bem simplesde divisão por 2 (que neste caso é a base).

Se y é um número entre 0 e 2n+1 − 1, para obter o dígito que multiplica 20 quevamos denominar x(1), basta encontrar o resto da divisão de y por 2. Para encontrar odígito que multiplica 21 que vamos denominar x(2), basta encontrar o resto da divisãode (y− x(1))/2 por 2, e assim sucessivamente.

Outra aplicação muito importante envolvendo a enumeração de produtos carte-sianos é a possibilidade de enumerar as células de uma malha cartesiana e tambémobter uma célula a partir da ordem da enumeração desta. Por exemplo, uma malhacartesiana no plano pode ser rotulada da seguinte forma:

5 (0, 5) (1, 5) (2, 5) (3, 5) (4, 5) (5, 5) (6, 5)4 (0, 4) (1, 4) (2, 4) (3, 4) (4, 4) (5, 4) (6, 4)3 (0, 3) (1, 3) (2, 3) (3, 3) (4, 3) (5, 3) (6, 3)2 (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (5, 2) (6, 2)1 (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (5, 1) (6, 1)0 (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0)

0 1 2 3 4 5 6

Se uma enumeração for feita por linha, a ordem da enumeração fica:

5 (0, 5) (1, 5) (2, 5) (3, 5) (4, 5) (5, 5) (6, 5)35 36 37 38 39 40 41

4 (0, 4) (1, 4) (2, 4) (3, 4) (4, 4) (5, 4) (6, 4)28 29 30 31 32 33 34

3 (0, 3) (1, 3) (2, 3) (3, 3) (4, 3) (5, 3) (6, 3)21 22 23 24 25 26 27

2 (0, 2) (1, 2) (2, 2) (3, 2) (4, 2) (5, 2) (6, 2)14 15 16 17 18 19 20

1 (0, 1) (1, 1) (2, 1) (3, 1) (4, 1) (5, 1) (6, 1)7 8 9 10 11 12 13

0 (0, 0) (1, 0) (2, 0) (3, 0) (4, 0) (5, 0) (6, 0)0 1 2 3 4 5 60 1 2 3 4 5 6

Assim se (x(1), x(2)) é um elemento da malha, a enumeração fica y = x(1)+ 7 · x(2)e por exemplo (4, 3) é o elemento número 4+ 7 · 3 = 25. Para obter (x(1), x(2)) a partir

2.1: Produtos Cartesianos Discretos 7

de y, x(1) é o resto da divisão de y por 7 e x(2) = (y− x(1))/7. No exemplo anteriorse y = 25, x(1) = mod(y, 7) = mod(25, 7) = 4 e x(2) = (y− x(1))/7 = 3.

2.1.3 Programas em Matlab/Octave

Se y é um inteiro entre 0 e 2n − 1, então a n-upla (x1, x2, . . . , xn) pertencente a I quecorresponde a representação de y na base 2 pode ser obtida com o seguinte algoritmoem Matlab/Octave:

copy = y;for j = 1:n-1

x(j) = mod(copy,2);copy = (copy-x(j))/2;

endx(n) = copy;

Por exemplo, se n = 4 e y = 13, temos:

copy = 13x(1) = mod(13, 2) = 1copy = (13− 1)/2 = 6x(2) = mod(6, 2) = 0copy = (6− 0)/2 = 3x(3) = mod(3, 2) = 1copy = (3− 1)/2 = 1x(4) = 1

e

y = x(1) · 20 + x(2) · 21 + x(3) · 22 + x(4) · 23 = 1 · 1 + 0 · 2 + 1 · 4 + 1 · 8 = 13

Observe que os vértices do hipercubo In = [0, 1]n podem ser obtidos por estemesmo algoritmo

for i = 0:2^n-1[Coords] = HyperCubeCoords(n,i);

end

function [Coords] = HyperCubeCoords(n,i)copy = i;for j = 1:n-1

Coords(j) = mod(copy,2);copy = (copy-Coords(j))/2;

endCoords(n) = copy;return

end

8 Contagem e Enumeração

Se I = Ik11 × Ik2

2 × · · · × Iknn com I

kjj = {0, 1, . . . , k j}, definimos Base(1) = 1 e Base(j+

1) = (k j+1 + 1) · Base(j), j = 1, . . . , n. Assim se (x(1), x(2), . . . , x(n)) é um elemento deI, a enumeração equivalente ao exemplo anterior é dado por:

y =n

∑j=1

x(j) · Base(j)

O processo de recuperação do elemento de uma malha cartesiana com coordenadasinteiras a partir de seu rótulo y é obtida com o seguinte algoritmo em Matlab/Octave:

copy = y;for j = n:-1:2

aux = mod(copy,Base(j));x(j) = (copy-aux)/Base(j);copy = aux;

endx(1) = copy;

No exemplo anterior, Base(1) = 1, Base(2) = 7 e o elemento número 18 da malha édado por:

copy = 18aux = mod(18, 7) = 4x(2) = (18− 4)/7 = 2copy = 4x(1) = 4

ey = x(1) · Base(1) + x(2) · Base(2) = 4 · 1 + 2 · 7 = 18

Um trecho de código Matlab/Octave para gerar uma malha cartesiana com númerode células em cada coordenada dada pelo vetor Division = [k1, k2, . . . , kn] é dado aseguir:

Base = InitGrid(n, Division);for g = 0:Base(n+1)-1

[Grid] = GridCoords(n,g,Base) ;end

function [Base] = InitGrid(n, Division)Base(1) = 1;for i = 2:n+1

Base(i) = Base(i-1)*Division(i-1);endreturn

end

function [Grid] = GridCoords(n,i,Base)copy = i;for j = n:-1:2

2.1: Produtos Cartesianos Discretos 9

aux = mod(copy,Base(j));Grid(j) = (copy-aux)/Base(j);copy = aux;

endGrid(1) = copy;return

end

Para gerar os vértices dos hipercubos de uma malha cartesiana definida pelos veto-res First correspondendo ao canto com as menores coordenadas da malha, Last corres-pondendo ao canto com as maiores coodenadas da malha e Division correspondendoao número de divisões da malha em cada direção, pode-se agrupar os trechos de có-digo anteriores como segue:

function GenVertGrid(n, First, Last, Division)Delta = (Last-First)./Division;Base = InitGrid(n, Division);for g = 0:Base(n+1)-1

[Grid] = GridCoords(n, g, Base)[Vert] = GenVert(n, Grid, First, Delta)

endreturn

end

function [Base] = InitGrid(n, Division)Base(1) = 1;for i = 2:n+1

Base(i) = Base(i-1)*Division(i-1);endreturn

end

function [Grid] = GridCoords(n,i,Base)copy = i;for j = n:-1:2

aux = mod(copy,Base(j));Grid(j) = (copy-aux)/Base(j);copy = aux;

endGrid(1) = copy;return

end

function [Vert] = GenVert(n, Grid, First, Delta)Vert = [];for i = 0:2^n-1

[Coords] = HyperCubeCoords(n,i);[VHC] = HyperCube(n,First,Delta,Grid,Coords,CoordPert);

10 Contagem e Enumeração

Vert = [Vert; VHC];endreturn

end

function [Coords] = HyperCubeCoords(n,i)copy = i;for j = 1:n-1

Coords(j) = mod(copy,2);copy = (copy-Coords(j))/2;

endCoords(n) = copy;return

end

function [VHC] = HyperCube(n, First, Delta, I, Coords)for i = 1:n

VHC(i) = First(i) + (I(i)+Coords(i))*Delta(i);endreturn

end

2.2 Permutações

2.2.1 Definição

Seja π : {1, 2, . . . , m} → {1, 2, . . . , m} uma permutação de {1, 2, . . . , m} a qual pode-se denotar pela m-upla ordenada π = (π1, π2, . . . , πm).

Pretende-se enumerar o conjunto das permutações de {1, 2, . . . , m} e para isto pode-se listar o conjunto das permutações de maneira indutiva, usando o fato que cada per-mutação de {1, 2, . . . , m} pode ser obtida das permutações de {1, 2, . . . , m− 1}, adicio-nando a coordenada m em todas as posições possíveis. Por exemplo se (i1, i2, . . . , im−1)é uma permutação de {1, 2, . . . , m− 1} pode-se gerar m permutações de {1, 2, . . . , m}incluindo m como segue:

(m, i1, i2, . . . , im−1)(i1, m, i2, . . . , im−1)(i1, i2, m, . . . , im−1)

...(i1, i2, . . . , m, im−1)(i1, i2, . . . , im−1, m)

2.2.2 Exemplos

A seguir mostra-se como são geradas as permutações de {1}, {1, 2}, {1, 2, 3} e{1, 2, 3, 4}.

2.2: Permutações 11

(1)

(1, 2)

(1, 2, 3)

(1, 2, 3, 4)(1, 2, 4, 3)(1, 4, 2, 3)(4, 1, 2, 3)

(1, 3, 2)

(4, 1, 3, 2)(1, 4, 3, 2)(1, 3, 4, 2)(1, 3, 2, 4)

(3, 1, 2)

(3, 1, 2, 4)(3, 1, 4, 2)(3, 4, 1, 2)(4, 3, 1, 2)

(2, 1)

(3, 2, 1)

(4, 3, 2, 1)(3, 4, 2, 1)(3, 2, 4, 1)(3, 2, 2, 4)

(2, 3, 1)

(2, 3, 1, 4)(2, 3, 4, 1)(2, 4, 3, 1)(4, 2, 3, 1)

(2, 1, 3)

(4, 2, 1, 3)(2, 4, 1, 3)(2, 1, 4, 3)(2, 1, 3, 4)

Figura 3.2.3

2.2.3 Programas em Matlab/Octave

Pode-se gerar as permutações de {1, 2, . . . , m} a partir do produto cartesiano. Pri-meiro observa-se que o conjunto {1}×{1, 2}×{1, 2, 3}× · · · × {1, 2, . . . , m} tem exata-mente m! elementos e pode-se relacionar cada elemento deste conjunto Ik = (ik

1, ik2, . . . , ik

m)

unicamente com uma permutação de {1, 2, . . . , m}. Primeiro sabe-se que ik1 = 1, ik

2 = 1ou 2, ik

3 = 1 ou 2 ou 3, assim por diante. A permutação é construída da seguinte forma:

• O dígito 1 é colocado na posição ik1, ou seja (1).

• O dígito 2 é colocado na posição ik2, isto é, se ik

2 = 1 tem-se (2, 1) e caso ik2 = 2

tem-se (1, 2).

• O dígito 3 é colocado na posição ik3, ou seja se a permutação de {1, 2} escolhida

obtida foi (2, 1) por exemplo e ik3 = 1 tem-se (3, 2, 1) e caso ik

3 = 2 tem-se (2, 3, 1)e se ik

3 = 3 tem-se (2, 1, 3).

12 Contagem e Enumeração

Por exemplo, se m = 4 e Ik = (1, 1, 3, 2) a permutação gerada é:

ik1 = 1→ (1)

ik2 = 1→ (2, 1)

ik3 = 3→ (2, 1, 3)

ik3 = 2→ (2, 4, 1, 3)

Um algoritmo para obter uma permutação a partir de um elemento Ik é dado abaixo

function [F] = Map_Perm(m,f)for i = 1:m

F(i) = 0;endfor i = 1:m

if F(f(i)) == 0F(f(i)) = i;

elsefor j = m:-1:f(i)+1

F(j) = F(j-1);endF(f(i)) = i;

endendreturn

end

Daí, para gerar todas as permutações de {1, 2, . . . , m} temos:

function [P] = Enumerate_Perm(m)P = [];for i = 1:m

Division(i) = i;end[Base] = InitGrid(m,Division);for k = 0:Base(m+1)-1

[f] = GridCoords(m,k,Base);f = f+1;[F] = Map_Perm(m,f);P = [P; F];

endreturn

end

2.3 Combinações

2.3.1 Definição

Combinações podem ser definidas como todos os subconjuntos de k símbolos deum conjunto de m símbolos. Se C = {1, 2, 3, . . . , m}, as combinações de k elementos

2.3: Combinações 13

deste conjunto são: {1, 2, . . . , k − 1, k}, {1, 2, . . . , k − 1, k + 1}, . . ., {1, 2, . . . , k − 1, m},{1, 2, . . . , k, k + 1}, . . .

2.3.2 Exemplos

Por exemplo se C = {1, 2, 3, 4, 5}, todas as combinações com 3 símbolos são: {1, 2, 3},{1, 2, 4}, {1, 2, 5}, {1, 3, 4}, {1, 3, 5}, {1, 4, 5}, {2, 3, 4}, {2, 3, 5}, {2, 4, 5} e {3, 4, 5}.

2.3.3 Programas em Matlab/Octave

As combinações também podem ser obtidas a partir do produto cartesiano. Se C ={1, 2, 3, . . . , m}, para obter as combinações de k símbolos de C, considere I = I1 × I2 ×· · · × Ik, Ii = {1, . . . , m− k + i}, i = 1, . . . , k e observe que o número de elementos de I

é (m− k + 1)(m− k + 2) · · ·m = k!(

mk

). Daí, basta descartar os elementos que não

estão em ordem crescente, isto é, se (i1, i2, . . . , ik) é um elemento do produto cartesiano,ele vai pertencer ao conjunto formado pelas combinações se i1 < i2 < · · · < ik.

Por exemplo, se C = {1, 2, 3, 4, 5}, para obter todas as combinações com 3 sím-bolos, enumera-se os elementos de I = {1, 2, 3} × {1, 2, 3, 4} × {1, 2, 3, 4, 5} que são:(1, 1, 1), (2, 1, 1), (3, 1, 1), (1, 2, 1), (2, 2, 1), (3, 2, 1), (1, 3, 1), (2, 3, 1), (3, 3, 1), (1, 4, 1), (2, 4, 1),(3, 4, 1), (1, 1, 2), (2, 1, 2), (3, 1, 2), (1, 2, 2), (2, 2, 2), (3, 2, 2), (1, 3, 2), (2, 3, 2), (3, 3, 2), (1, 4, 2),(2, 4, 2), (3, 4, 2), (1, 1, 3), (2, 1, 3), (3, 1, 3), (1, 2, 3), (2, 2, 3), (3, 2, 3), (1, 3, 3), (2, 3, 3), (3, 3, 3),(1, 4, 3), (2, 4, 3), (3, 4, 3), (1, 1, 4), (2, 1, 4), (3, 1, 4), (1, 2, 4), (2, 2, 4), (3, 2, 4), (1, 3, 4), (2, 3, 4),(3, 3, 4), (1, 4, 4), (2, 4, 4), (3, 4, 4), (1, 1, 5), (2, 1, 5), (3, 1, 5), (1, 2, 5), (2, 2, 5), (3, 2, 5), (1, 3, 5),(2, 3, 5), (3, 3, 5), (1, 4, 5), (2, 4, 5), (3, 4, 5).

Os elementos que estão em ordem crescente são: (1, 2, 3), (1, 2, 4), (1, 3, 4), (2, 3, 4),(1, 2, 5), (1, 3, 5), (2, 3, 5), (1, 4, 5), (2, 4, 5), (3, 4, 5).

Um algoritmo para gerar todas as combinações é apresentada a seguir:

function [P] = Enumerate_Comb(n,k)P = [];for i = 1:k

Division(i) = n-k+i;end[Base] = InitGrid(k,Division);for j = 0:Base(k+1)-1

[f] = GridCoords(k,j,Base);f = f+1;[lex] = Lexico(k,f);if lex == 1

P = [P; f];end

endreturn

end

14 Contagem e Enumeração

function [lex] = Lexico(k,f)for i = 1:k-1

if f(i) >= f(i+1)lex = 0;return

endendlex = 1;return

end

Capítulo 3

Aproximações de Funções Implícitas

Para maior aprofundamento no tema apresentado neste capítulo é sugerido a lei-tura da tese [3], do livro [1] e do artigo [4].

3.1 Topologia Linear por Partes

Dados os pontos v0, v1, . . . , vn ∈ Rm, chama-se o conjunto a f f (v0, . . . , vn) = {v ∈Rm | ∑n

i=0 λivi = v e ∑ni=0 λi = 1} de conjunto afim gerado pelos pontos v0, . . . , vn.

Chama-se dimensão de a f f (v0, . . . , vn) e denota-se por dim(a f f (v0, . . . , vn)) o maiornúmero de vetores linearmente independentes entre os do conjunto {v1 − v0, . . . , vn −v0}

Chama-se de célula convexa afim gerada pelos pontos v0, v1, . . . , vn ao conjuntoσ = [v0, . . . , vn] = {v ∈ Rm | ∑n

i=0 λivi = v, ∑ni=0 λi = 1 e λi ≥ 0}. Definimos a

dimensão de σ por dim(σ) = dim(a f f (v0, . . . , vm)).Uma coleção C de células convexas afins é dita decomposição celular de um con-

junto K ⊂ Rm se:

• K = ∪σ∈Cσ;

• se σ1, σ2 ∈ C, então σ1 ∩ σ2 = ∅ ou σ1 ∩ σ2 ∈ C;

• todo subconjunto compacto de K intercepta um número finito de células de C.

Uma célula convexa afim σ = [v0, . . . , vn] de Rm é chamada simplexo, se dim(σ) =n, isto é, um simplexo n-dimensional é uma célula convexa afim de dimensão n geradapor n + 1 pontos.

Dado um simplexo σ = [v0, . . . , vn] de Rm e {w0, . . . , wk} ⊂ {v0, . . . , vn}, chama-se a célula convexa afim τ = [w0, . . . , wk] de face de dimensão k de σ. Às faces de σgeradas por um único ponto denomina-se vértices de σ; por dois pontos, de arestas deσ; e por n pontos, de facetas de σ.

Uma decomposição celular C de K ⊂ Rm é chamada triangulação de K, se todas ascélulas de C são simplexos.

Dado um simplexo σ = [v0, . . . , vn] de Rm, define-se :

• a fronteira de σ, ∂σ como a união de todas as faces de dimensão n− 1 de σ;

• o baricentro de σ, b(σ) = 1n+1 ∑n

i=0 vi;

16 Aproximações de Funções Implícitas

• o diâmetro de σ, ρ(σ) = max{‖ vi − vj ‖; i, j = 0, . . . , n};

• o raio de σ, r(σ) = min{‖ v− b(σ) ‖ | v ∈ ∂(σ)};

• a robustez de σ, θ(σ) = r(σ)/ρ(σ).

Se T é uma triangulação de K ⊂ Rm, define-se:

• o diâmetro de T, ρ(T) = sup{ρ(σ) | σ ∈ T com dim(σ) > 0};

• a robustez de T, θ(T) = in f {θ(σ) | σ ∈ T com dim(σ) > 0}.

3.2 Interpolação Linear Simplicial

Seja F : D ⊂ Rm → Rn uma aplicação e T uma triangulação de D.Se σ = [v0, . . . , vm] ∈ T, tem-se para cada v ∈ σ uma única (m + 1)-upla

λ = (λ0, . . . , λm) tal que ∑mi=0 λivi = v, ∑m

i=0 λi = 1 e λi ≥ 0, i = 0, . . . , m.Define-se Fσ : σ→ Rn onde

Fσ(v) = Fσ(m

∑i=0

λivi) =m

∑i=0

λiF(vi) (3.1)

Observe que Fσ é uma aplicação afim e que Fσ(vi) = F(vi), i = 0, . . . , m, isto é, Fσ éuma interpolação linear de F nos vértices de σ.

Define-se uma aproximação linear por partes para F sendo : FT : D ⊂ Rm → Rn

onde FT(v) = Fσ(v) para v ∈ σ ∈ T.Portanto, FT é uma interpolação linear de F para os vértices de T (nos simplexos de

dimensão zero de T).Suponha que F : D ⊂ Rm → Rn é uma aplicação de classe C2 com ‖ D2F(x) ‖≤ α

para todo x ∈ D e σ = [v0, . . . , vn] um simplexo em D, então valem os seguintesresultados que podem ser vistos em [1] : Se T é uma triangulação robusta de D, isto é,θ(T) > 0, então ‖ F(v)− FT(v) ‖≤ αρ2(T)/2 para todo v ∈ D e ‖ DF(v)− DFT(v) ‖≤αρ(T)/θ(T) para todo v no interior de simplexos de dimensão m de T.

Embora DFσ(v) esteja bem definida para todo simplexo σ de dimensão m, se τ éuma face comum de dois simplexos σ1 e σ2 de dimensão m e v ∈ τ, DFσ1(v) e DFσ2(v)podem ser distintos e, portanto, DFT(v) não está bem definida.

3.3 Esquema de Diferenças Simplicial

Seja F : D ⊂ Rm → Rn uma aplicação de classe C2 e T uma triangulação de D.Seja σ = [v0, . . . , vm] ∈ T. Como σ é um simplexo de dimensão m, os vetores v1 −

v0, v2 − v0, . . . , vm − v0 são linearmente independentes; logo, fazendo δi =‖ vi − v0 ‖e ωi = (vi − v0)/δi, i = 1, . . . , m, temos que a matriz cujas colunas são os vetoresw1, . . . , wm é invertível.

As Triangulações K1 e J1 17

Para v ∈ σ seja λ, tal que ∑mi=0 λivi = v, ∑m

i=0 λi = 1 e λi ≥ 0, i = 0, . . . , m. Então,pode-se escrever

v− v0 == ∑m

i=0 λivi − v0 ∑mi=0 λi =

= ∑mi=1 λi(vi − v0)

= ∑mi=1 λiδiωi =

= (ω1 · · ·ωm)

λ1δ1...

λmδm

ou λ1δ1

...λmδm

= (ω1 · · ·ωm)−1 (v− v0)

AgoraFT(v)− F(v0) =

= Fσ(v)− F(v0) == ∑m

i=0 λiF(vi)− F(v0)∑mi=0 λi =

= ∑mi=1 λi(F(vi)− F(v0)) =

= ∑mi=1 λiδi(F(vi)− F(v0))/δi

ouFT(v)− F(v0) =

=(

F(v1)−F(v0)δ1

· · · F(vm)−F(v0)δm

) λ1δ1...

λmδm

=

=(

F(v1)−F(v0)δ1

· · · F(vm)−F(v0)δm

)(ω1 · · ·ωm)

−1 (v− v0)

Daí, como ωi = (vi − v0)/δi, tem-se vi = v0 + δiωi, i = 1, . . . , m, e portanto

FT(v)− F(v0) =

=(

F(v0+δ1ω1)−F(v0)δ1

· · · F(v0+δmωm)−F(v0)δm

)(ω1 · · ·ωm)

−1 (v− v0)

Observe que as colunas da matriz(F(v0 + δ1ω1)− F(v0)

δ1· · · F(v0 + δmωm)− F(v0)

δm

)são aproximações para as derivadas direcionais de F nas direções ω1, . . . , ωm, em tornodo ponto v0; portanto este é um esquema de diferenças que chamaremos de esquemade diferenças simplicial.

Daí, se δi → 0 para i = 1, . . . , m com uma certa proporcionalidade, isto é, se o diâ-metro de σ tende a zero mantendo a robustez limitada para que os vetores w1, . . . , wmcontinuem sendo linearmente independentes, então Fσ é uma aproximação para osdois primeiros termos da série de Taylor de F, em torno do ponto v0. Outra observa-ção é que a mesma análise pode ser feita para qualquer outro vértice de σ; portanto, oesquema descrito anteriormente não depende apenas do ponto v0 e sim do simplexoσ.

18 Aproximações de Funções Implícitas

3.4 As Triangulações K1 e J1

Inicialmente será apresentada a triangulação CFK (devida a Coxeter [5], Freudenthal[7] e Kuhn [9]) do cubo unitário Im = [0, 1]m, da qual derivam as triangulações K1 e J1de Rm.

Seja π : {1, 2, . . . , m} → {1, 2, . . . , m} uma permutação de {1, 2, . . . , m} a qual va-mos denotar pela m-upla ordenada π = (π1, π2, . . . , πm), e {e1, e2, . . . , em} base canô-nica de Rm.

Considere o simplexo σπ = [v0, v1, . . . , vm], onde

v0 = (0, . . . , 0) ∈ Im;vi = vi−1 + eπi = eπ1 + · · ·+ eπi , i = 1, . . . , m.

É fácil verificar que σπ é um simplexo de dimensão m contido em Im.A triangulação CFK é definida como o conjunto dos simplexos σπ e suas faces, tal

que π seja uma permutação de {1, 2, . . . , m}.Para exemplificar, a Figura 3.1 representam as triangulações CFK de I2 e I3, respec-

tivamente.

Figura 3.1: À esquerda a triangulação CFK de I2 e à direita a triangulação CFK de I3.

Observe que existe uma relação biunívoca entre π e σπ; portanto, a triangulaçãoCFK de Im contém m! simplexos de dimensão m.

A triangulação K1 de Rm é obtida pela translação da triangulação CFK de Im.Para cada v0 ∈ Zm e π permutação de {1, 2, . . . , m}, definimos σ = K1(v0, π) =

[v0, v1, . . . , vm], onde

vi = vi−1 + eπi = v0 + eπ1 + · · ·+ eπi , i = 1, . . . , m.

A triangulação K1 de Rm é formada pelos simplexos K1(v0, π) e suas faces.

Os Vértices da Aproximação 19

A triangulação J1 de Rm é obtida pela reflexão da triangulação CFK) de (Im, comrelação às faces de dimensão m− 1 de Im.

Para cada v0 ∈ {v ∈ Zm | vi é par }, s = (s1, . . . , sm) ∈ {−1, 1}m e π permutação de{1, 2, . . . , m}, definimos σ = J1(v0, π, s) = [v0, v1, . . . , vm], onde

vi = vi−1 + sπi eπi = v0 + sπ1eπ1 + · · ·+ sπi eπi , i = 1, . . . , m.

A triangulação J1 de Rm é formada pelos simplexos J1(v0, π, s) e suas faces.A figura 3.2 apresenta as triangulações K1 e J1 de R2, respectivamente.

Figura 3.2: À esquerda a triangulação K1 de R2 e à direita a triangulação J1 de R2.

Dados dois vetores v, δ ∈ Rm com δi > 0, i = 1, . . . , m, pode-se obter as triangu-lações v + δK1 e v + δJ1, trocando os vetores da base canônica e1, . . . , em pelos vetoresδ1e1, . . . , δmem nas triangulações K1 e J1, e somando a seus vértices o vetor v. Estastriangulações são as triangulaçoões K1 e J1 escalonadas e transladadas.

Note-se que ρ(K1) = ρ(J1) =√

m e ρ(v + δK1) = ρ(v + δJ1) =√

δ21 + · · ·+ δ2

m =

‖ δ ‖2.

3.5 Os Vértices da Aproximação

Seja uma aplicação F : U → Rn de classe C2 no aberto U ⊂ Rm com m > n e sejaM = {x ∈ U | F(x) = 0}. Suponha que 0 ∈ Rn é valor regular de F, isto é, se x ∈ Mentão DF(x) tem posto máximo. Neste casoM é uma variedade de dimensão m− n.

Dado um simplexo de dimensão n, σ = [v0, . . . , vn] a interseção de M com σ éaproximada por

v =n

∑i=0

λivi

20 Aproximações de Funções Implícitas

onde λ é dado por

(1 · · · 1

F(v0) · · · F(vn)

) λ0...

λn

=

10...0

Caso λi ≥ 0, v pertence ao simplexo σ e caso λi > 0, v pertence ao interior do simplexoσ.

Observe que se a matriz for invertível, existe uma única solução para v. Pode-se escolher os vértices do simplexo σ com uma pequena perturbação de modo que amatriz seja invertível e que λi 6= 0, isto é, ou v pertence ao interior de σ ou não pertencea σ.

Para calcular uma aproximação para M em um simplexo de dimensão m, bastaobter o fecho convexo da aproximação para M em cada face de dimensão n, isto é,escolhendo todas as combinações de n vértices dos m vértices deste simplexo.

3.6 Programas em Matlab/Octave

Dado um paralelepípedo D de Rm, considere a triangulação K1 deste. Ela podeser implementada utilizando um produto cartesiano para gerar uma malha cartesianae depois pela geração das permutações de {1, 2, . . . , m} para obter os simplexos dedimensão m. Novamente podemos escolher as faces de dimensão n de cada simplexode dimensão m para obter todos os vértices da aproximação paraM.

O programa abaixo calcula todas as faces da aproximaçãoMT utilizando a trian-gulação K1.

function MarchingTetrahedron(n, k, First, Last, Division, Func, filename)file = fopen(filename,’w’);fprintf(file,’%d %d\n’,n,k);

Delta = (Last-First)./Division;Pert = random(’Normal’,0,1,2^n,n)*0.000001;Base = InitGrid(n, Division);

for i = 1:nDivisionP(i) = i;

end[BaseP] = InitGrid(n,DivisionP);

for i = 1:k+1DivisionC(i) = n-k+i;

end[BaseC] = InitGrid(k+1,DivisionC);

for g = 0:Base(n+1)-1

3.6: Programas em Matlab/Octave 21

[Grid] = GridCoords(n,g,Base);[Vert FVert] = GenVert(n, Grid, Pert, First, Delta, Func);

for s = 0:BaseP(n+1)-1

[f] = GridCoords(n,s,BaseP);f = f+1;[P] = Map_Perm(n,f);[Simp] = GenLabelSimplex(n,P);

VertexManifold = [];NumberVertex = 0;

for j = 0:BaseC(k+2)-1

[C] = GridCoords(k+1,j,BaseC);C = C+1;[lex] = Lexico(k+1,C);

if lex == 1for i = 1:k+1

Face(i) = Simp(C(i));end[Vertex trans] = GetVertexManifold(n,k,Face,Vert,FVert);if trans == 1

VertexManifold = [VertexManifold; Vertex];NumberVertex = NumberVertex + 1;

endend

end

if NumberVertex > 0fprintf(file,’%d ’,NumberVertex);fprintf(file,’\n’);for j = 1:NumberVertex

fprintf(file,’%f ’,VertexManifold(j,:));fprintf(file,’\n’);

endend

end

endfprintf(file,’-1\n’);

fclose(file);

22 Aproximações de Funções Implícitas

returnend

function [Base] = InitGrid(n, Division)Base(1) = 1;for i = 2:n+1

Base(i) = Base(i-1)*Division(i-1);endreturn

end

function [Grid] = GridCoords(n,i,Base)copy = i;for j = n:-1:2

aux = mod(copy,Base(j));Grid(j) = (copy-aux)/Base(j);copy = aux;

endGrid(1) = copy;return

end

function [Vert FVert] = GenVert(n, Grid, Pert, First, Delta, Func)Vert = [];FVert = [];for i = 0:2^n-1

[Coords] = HyperCubeCoords(n,i);[CoordPert] = HyperCubePert(n,Grid,Coords,Pert);[VHC] = HyperCube(n,First,Delta,Grid,Coords,CoordPert);Vert = [Vert; VHC];[FVHC] = Func(n,VHC);FVert = [FVert; FVHC];

endreturn

end

function [Coords] = HyperCubeCoords(n,i)copy = i;for j = 1:n-1

Coords(j) = mod(copy,2);copy = (copy-Coords(j))/2;

end

3.6: Programas em Matlab/Octave 23

Coords(n) = copy;return

end

function [CoordPert] = HyperCubePert(n,Grid,Coords,Pert)pot = 1;label = 0;for i = 1:n

p = abs(Coords(i) - mod(Grid(i),2));label = label + pot*p;pot = 2*pot;

endCoordPert = Pert(label+1,:);return

end

function [VHC] = HyperCube(n,First,Delta,I,Coords,Pert)for i = 1:n

VHC(i) = First(i) + (I(i)+Coords(i))*Delta(i) + Pert(i);endreturn

end

function [Vertex trans] = GetVertexManifold(n,k,Face,Vert,FVert)for i = 1:k+1

A(1,i) = 1;A(2:k+1,i) = FVert(Face(i)+1,:);

endb = [1; zeros(k,1)];lamb = A\b;trans = 0;Vertex = zeros(1,n);if lamb >= 0

for i = 1:k+1Vertex = Vertex + lamb(i)*Vert(Face(i)+1,:);

endtrans = 1;

endreturn

end

function [V FV] = GenVertHyperCube(n,Grid,Pert,First,Delta,Label,Func)[Coords] = HyperCubeCoords(n,Label);

24 Aproximações de Funções Implícitas

[CoordPert] = HyperCubePert(n,Grid,Coords,Pert);[V] = HyperCube(n,First,Delta,Grid,Coords,CoordPert);[FV] = Func(n,V);return

end

function [F] = Map_Perm(n,f)for i = 1:n

F(i) = 0;endfor i = 1:n

if F(f(i)) == 0F(f(i)) = i;

elsefor j = n:-1:f(i)+1

F(j) = F(j-1);endF(f(i)) = i;

endendreturn

end

function [lex] = Lexico(k,f)for i = 1:k-1

if f(i) >= f(i+1)lex = 0;return

endendlex = 1;return

end

function [Simp] = GenLabelSimplex(n,P)Simp(1) = 0;for i = 1:n

Simp(i+1) = Simp(i)+2^(P(i)-1);end

end

A seguir exibe-se um programa para gerar uma aproximação da esfera de dimensão3 em R4 com centro na origem e raio 1 utilizando o programa descrito anteriormente:

function Esf

First = [-1.1 -1.1 -1.1 -1.1];

3.6: Programas em Matlab/Octave 25

Last = [1.1 1.1 1.1 1.1];Division = [2 2 2 2];

MarchingTetrahedron(4,1,First,Last,Division,@esfera,esfera.pol’);

return

function [f] = esfera(n,v)f(1) = v(1)*v(1)+v(2)*v(2)+v(3)*v(3)+v(4)*v(4)- 1;return

end

end

A um trecho da saída que está escrita no arquivo esfera.pol é dada a seguir:

4 14-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.454546 -0.454546 0.000001 -0.000000-0.909091 0.000001 -0.000000 -0.0000004-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.454546 -0.454546 0.000001 -0.0000000.000000 -0.909092 -0.000002 0.0000004-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.454546 0.000000 -0.454545 -0.000000-0.909091 0.000001 -0.000000 -0.0000004-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.000001 -0.454545 -0.454545 -0.0000000.000000 -0.909092 -0.000002 0.0000004-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.454546 0.000000 -0.454545 -0.0000000.000000 -0.000000 -0.909090 -0.0000004-0.303031 -0.303030 -0.303029 -0.303030-0.303031 -0.303030 -0.303029 -0.000000-0.000001 -0.454545 -0.454545 -0.0000000.000000 -0.000000 -0.909090 -0.000000

26 Aproximações de Funções Implícitas

4-0.303031 -0.303030 -0.303029 -0.303030-0.454546 -0.454546 0.000001 -0.454546-0.454546 -0.454546 0.000001 -0.000000-0.909091 0.000001 -0.000000 -0.000000

Observe que todas as células convexas definidas pelos pontos (4 neste exemplo) são tetrae-dros, mas poderiam ser prismas, piramides, hexaedros, entre outros.

Um outro exemplo é o toro de dimensão 2 em R4, definido por

x2 + y2 = 1

z2 + w2 =14

function Tor

First = [-1.1 -1.1 -0.51 -0.51];Last = [1.1 1.1 0.51 0.51];Division = [2 2 2 2];

MarchingTetrahedron(4,2,First,Last,Division,@toro, toro.pol’);

return

function [f] = toro(n,v)f(1) = v(1)*v(1) + v(2)*v(2) - 1;f(2) = v(3)*v(3) + v(4)*v(4) - 0.25;return

end

end

A um trecho da saída que está escrita no arquivo toro.pol é dada a seguir:

4 23-0.454546 -0.454546 -0.279453 -0.210744-0.454546 -0.454545 -0.490197 0.000001-0.909090 -0.000001 -0.490197 0.0000013-0.454546 -0.454546 -0.279453 -0.210744-0.454546 -0.454545 -0.490197 0.0000010.000001 -0.909090 -0.490196 0.0000013-0.528644 -0.380448 -0.245099 -0.245098-0.909090 -0.000001 -0.421487 -0.068709

3.6: Programas em Matlab/Octave 27

-0.909090 -0.000000 -0.245099 -0.2450973-0.380450 -0.528642 -0.245099 -0.2450980.000001 -0.909090 -0.421488 -0.0687070.000000 -0.909092 -0.245098 -0.2450974-0.528644 -0.380448 -0.245099 -0.245098-0.909090 -0.000001 -0.421487 -0.068709-0.454546 -0.454546 -0.279453 -0.210744-0.909090 -0.000001 -0.490197 0.0000014-0.380450 -0.528642 -0.245099 -0.2450980.000001 -0.909090 -0.421488 -0.068707-0.454546 -0.454546 -0.279453 -0.2107440.000001 -0.909090 -0.490196 0.000001...30.571360 -0.337731 -0.245099 -0.2450970.475905 -0.433186 -0.289355 -0.2008410.380452 -0.528640 -0.245098 -0.24509740.571360 -0.337731 -0.245099 -0.2450970.475905 -0.433186 -0.289355 -0.2008410.909091 -0.000001 -0.401685 -0.0885110.909091 -0.000001 -0.490197 0.00000150.000002 -0.909091 -0.068705 -0.4214900.000002 -0.909092 -0.000001 -0.4901940.475906 -0.433186 -0.200842 -0.2893530.042724 -0.866370 -0.000001 -0.4901940.380452 -0.528640 -0.245098 -0.24509730.571360 -0.337731 -0.245099 -0.2450970.475906 -0.433186 -0.200842 -0.2893530.380452 -0.528640 -0.245098 -0.24509730.571360 -0.337731 -0.245099 -0.2450970.909091 -0.000000 -0.245099 -0.2450970.909091 -0.000001 -0.401685 -0.08851130.475906 -0.433186 -0.200842 -0.2893530.042724 -0.866370 -0.000001 -0.4901940.909092 0.000001 -0.000000 -0.49019640.571360 -0.337731 -0.245099 -0.245097

28 Aproximações de Funções Implícitas

0.475906 -0.433186 -0.200842 -0.2893530.909091 0.000001 -0.088513 -0.4016830.909092 0.000001 -0.000000 -0.490196

Observe que todas as células convexas desta saída são triângulos, quadriláteros epentágonos.

O programa a seguir gera uma aproximação da esfera com centro na origem e raio1 em R3

function Esf

First = [-1.1 -1.1 -1.1];Last = [1.1 1.1 1.1];Division = [10 10 10];

MarchingTetrahedron(3,1,First,Last,Division,@esfera,’esfera.pol’);

return

function [f] = esfera(n,v)f(1) = v(1)*v(1)+v(2)*v(2)+v(3)*v(3) - 1;return

end

end

A figura 3.3 apresenta o resultado deste programaÉ possível gerar todas as faces destas células sem o uso de algoritmos tradicionais

de fecho convexo, observando que as os vértices da célula estão nas faces de dimensãon do simplexo, as arestas estão nas faces de dimensão n+ 1 do simplexo, as faces de di-mensão 2 da célula estão nos simplexos de dimensão n+ 2 e assim por diante. Somenteos rótulos dos simplexos são suficientes para esta geração hierárquica denominada deesqueleto combinatório dos elementos da variedade [3].

Por fim, para gerar uma aproximação utilizando a triangulação J1 basta gerar umafunção sinal e modificar a função

function [VHC] = HyperCube(n,First,Delta,I,Coords,Pert)

como descrito na Seção 3.4.

3.6: Programas em Matlab/Octave 29

Figura 3.3: Aproximação da esfera unitária em R3.

30 Aproximações de Funções Implícitas

Capítulo 4

Aproximações de Funções por mínimosquadrados

Como foi visto no Capítulo 1, pode ser necessário saber como avaliar uma funçãocontínua f em um ponto arbitrário do seu domínio a partir apenas de um conjuntofinito de amostras, ou mesmo ajustar uma função aos dados para inferir um comporta-mento mais geral. Podem ser encontradas duas formas de contornar esses problemas:métodos de interpolação e métodos de aproximação de funções. Em ambos, parte-sede um conjunto finito de tuplas X = {(xi, yi), i = 1, . . . , m} com o objetivo de deter-minar uma F, como combinação de funções mais simples, que se ajuste aos pontosamostrados, obtendo comportamento similar à f . Assumindo que yi = f (xi).

No primeiro caso, tem-se a restrição que, fixado um xi, F(xi) = f (xi), ou seja,define-se que a função a ser determinada F interpole o conjunto X de pontos dados.Além disso, nos casos de ajuste, o fato de interpolar os pontos restringe bastante aclasse de funções possíveis para ajuste, desconsiderando eventuais erros nos dados,como erros de medição.

No segundo caso, essa condição de interpolação é relaxada para que, fixado umxi, F(xi) = f (xi) + εi, ou seja, a função se aproxime dos dados, não necessariamentepassando diretamente pelas tuplas definidas em X .

Cada um dos casos possui aplicações específicas, sendo fora do escopo deste tra-balho efetuar essa análise. Além disso, apesar de algumas construções que serão ex-plicitadas nas próximas seções serem úteis para ambos os casos, o foco será dado aosegundo caso apenas.

4.1 Método dos mínimos quadrados

Como já bem conhecido na literatura [16, 17], o ajuste por mínimos quadradospode, por exemplo, determinar uma função F : R → R que melhor aproxime o con-junto de dados (xi, yi), com

yi = f (xi) e F(xi) = f (xi) + εi,

de forma que o erro de aproximação (ou resíduo)

E = ∑i‖yi − F(xi)‖2 = ∑

i‖εi‖2

32 Aproximações de Funções por mínimos quadrados

seja o menor possível.A construção da função F pode ser feita a partir de combinações de uma base de

outras funções, de forma que

F(x) = α0φ0(x) + α1φ1(x) + . . . + αnφn(x)

Uma escolha bastante comum consiste em definir a base de funções {φi} com umabase de polinômios. Essa escolha, em geral, deve-se ao fato da facilidade de derivação,integração e boa capacidade de ajuste a uma série de conjunto de dados. Porém, deve-se salientar que, a depender do problema, a escolha dessa base não é trivial e podelevar aproximações ruins.

As construções que seguem utilizam-se da aproximação polinomial de funções pormínimos quadrados.

4.1.1 Polinômios univariados: O caso real (R)

0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

X

Figura 4.1: Pontos distribuidos de forma linear.

Utilizando como exemplo o caso ilustrado na Figura 4.1, onde os pontos do con-junto de amostras X distribuem-se próximo a uma reta, é razoável utilizar como baseuma função polinomial de grau um para definir F, na forma F(x) = α0 + α1x. Assim,para cada tupla (αk

0, αk1), há uma reta Fk(x) = αk

0 + αk1x associada e então a tupla para a

qual Ek seja o menor possível deve ser determinada.A ideia de melhor ajuste corresponde a determinar F com o menor resíduo possível,

com

F(xi) = yi + εi

Reorganizando o problema tem-se o seguinte sistema sobredeterminado:

4.1: Método dos mínimos quadrados 33

1 x11 x2...

...1 xm

(

αk0

αk1

)=

y1y2...

ym

(4.1)

Xαk = Y (4.2)

A partir daí, como pode ser visto em [16], a tupla (αk0, αk

1) = αk que melhor aproximaos m pontos dados é obtida utilizando as equações normais,

XTXαk = XTY⇔ αk = (XTX)−1XTY

Assim, é obtida uma função F ∈ P1(R), ou seja, uma função polinomial de graun ≤ 1 e o problema está resolvido.

Observe que

F(x) = α0 + α1x =

(1x

)T (α0α1

)= BTα,

ou seja, o vetor α corresponde às coordenadas da função F na base B do espaço vetorialde polinômios P1(R).

De uma forma mais geral, quando é considerada uma aproximação de f por umpolinômio F com grau máximo n, tem-se que

f (x) ≈ α0 + α1x + . . . + αnxn =

1x...

xn

T

α0α1...

αn

= BTα = F(x)

Assim, dado o conjunto de pontos X formado pelas tuplas (x1, y1), . . . , (xm, yn),para determinar α = (α0, . . . , αn), primeiro constrói-se a base de Pn(R), a saber B ={1, x, x2, . . . , xn}, contendo n + 1 elementos. Em seguida, deve ser definida a matriz Bcomo sendo a avaliação de cada um dos m pontos de X na base B.

B =

1 x1 . . . xn

11 x2 . . . xn

2...1 xm . . . xn

m

,

onde, analogamente à equação 4.1, tem-se1 x1 . . . xn

11 x2 . . . xn

2...

...1 xm . . . xn

m

αk0

αk1...

αkn

=

y1y2...

ym

(4.3)

(4.4)

34 Aproximações de Funções por mínimos quadrados

e portanto

αk

0αk

1...

αkn

=

1 x1 . . . xn1

1 x2 . . . xn2

......

1 xm . . . xnm

T

1 x1 . . . xn1

1 x2 . . . xn2

......

1 xm . . . xnm

−1

1 x1 . . . xn1

1 x2 . . . xn2

......

1 xm . . . xnm

T

y1y2...

ym

(4.5)

Com essa solução apresentada na equação 4.5, é possível aproximar um conjunto depontos quaisquer na forma (xi, f (xi)) ∈ R2, i = 1, . . . , m por um polinômio de graumáximo n.

Em seguida é descrita uma possível implementação da solução discutida:

function out = ls_polinomial(points, degree)B = base_polinomios(points,degree);B_t = B’;alpha = inv(B_t*B)*(B_t*points(:,end));

% Opcional para visualizacaoalpha = fliplr(alpha’);f_ls = polyval(alpha, points(:,1));plot(points(:,1), points(:,2), ’r+’, points(:,1), f_ls,’-’);return

end

0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 10.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

X

F

(a)

−1 −0.5 0 0.5 1

0

0.2

0.4

0.6

0.8

1

X

F

(b)

Figura 4.2: Exemplos de aproximações polinomiais.

Na Figura 4.2(a), é ilustrado o conjunto X e um polinômio F de grau um, que me-lhor se ajusta a esses pontos no sentido de mínimos quadrados, com a função f nãoconhecida. Além disso, na Figura 4.2(b) é exibido a avaliação de F em muito mais

4.1: Método dos mínimos quadrados 35

pontos que do que o seu conjunto X , amostrado em uma função conhecida, a saberf (x) = x2.

Base de Pn(R)

Ao definir o grau máximo n do polinômio que será utilizado para o ajuste às amos-tras, faz-se necessário determinar a base B de Pn(R), que como já foi visto na seçãoanterior corresponde à B = {1, x, x2, . . . , xn}.

Uma possível implementação e avaliação nas amostras é ilustrada no código quesegue:

function B = base_polinomios(points, degree)m = length(points);B = zeros(m,degree+1);

for i = 1:mfor j = 1:degree+1

B(i,j) = points(i,1)^(j-1);end

endreturn

end

4.1.2 Polinômios multivariados: O caso geral (Rd)

Como pôde-se observar, polinômios univariados podem representar curvas no plano.Quando deseja-se estender o processo para dimensões maiores, para superfícies porexemplo, F passa a ser escrita como

F(x) = α0φ0(x) + α1φ1(x) + . . . + αnφn(x),

com x ∈ Rd−1, ou seja, x = (x1, x2, . . . , xd−1). Assim, as funções φi passam a dependerde várias variáveis. Uma escolha possível é ainda utilizar polinômios, mas multivaria-dos.

Para efetuar a aproximação efetua-se uma construção análoga ao processo descritona seção 4.1.1, porém com uma decomposição (xi, f (xi)), xi ∈ Rd−1 e f (xi) ∈ R, ou seja,a aproximação é feita na função altura de cada ponto. Para simplificar as exposições,será considerado aqui que f consiste na coordenada de um vetor da base paralelo aalgum vetor à base canônica de Rd, não sendo, dessa forma, necessário em falar devetores normais a hiperplanos. Quando d = 2, f corresponde a coordenada de e2 (eixoy); d = 3, coordenada de e3 (eixo z) e por aí vai.

Partindo de um exemplo mais simples, seja F ∈ P2(R2), ou seja, um polinômio com

36 Aproximações de Funções por mínimos quadrados

d = 2, g = 2 e p = (x, y) ∈ R2, então

F(p) = α0 + α1x + α2y + α3x2 + α4xy + α5y2 =

1xyx2

xyy2

T α0α1α2α3α4α5

= BTα,

e a matriz B passa a ser escrita como

B =

1 x1 y1 x2

1 x1y1 y21

1 x2 y2 x22 x2y2 y2

2...1 xm ym x2

m xmym y2m

,

Ao considerar o caso mais geral, uma vez que estamos em Rd, faz-se necessáriodeterminar uma base do espaço Pg(Rd) de polinômios multivariados de d variáveis egrau máximo g.

Base de Pn(Rd)

Ainda utilizando o exemplo descrito na seção 4.1.2, para determinar B, pode serefetuado o produto da combinação dos elementos {1, x, y}, tomados dois à dois, semrepetição. Assim tem-se

{1, x, y} × {1, x, y} = {1.1, 1.x, 1.y, x.1, x.x, x.y, y.1, y.x, y.y}= {1, x, y, x, x2, xy, y, yx, y2}

e eliminando as repetições, a base é determinada por B = {1 x y x2 xy y2}T.De forma análoga, no caso geral, B seria determinada pelo produto da combinação

dos elementos {x0, x1, x2, . . . , xd}, tomados g à g, sem repetição

{x0, x1, x2, . . . , xd}(g-1) vezes︷ ︸︸ ︷× . . .× {x0, x1, x2, . . . , xd}

onde g representa o grau máximo do polinômio.Com isso, a construção de um algoritmo para geração da base, como feito na seção

4.1.1, não é imediata, pois teria de ser construído um ninho de laços com g− 1 laços:

4.1: Método dos mínimos quadrados 37

function B = base_polinomios(points, degree)m = length(points);dim = size(points,2);dim_base_pol = nchoosek(dim+degree,degree);B = zeros(m,dim_base_pol);B(:,1) = 1;

for i = 1:mfor j2 = 2:dim_base_pol

...for jg = jk:dim_base_pol

B(i,j2) = points(i,j2)*points(i,j3)*...*points(i,jg);end

endendreturn

end

Uma forma de resolver isso é através da associação de cada elemento de W ={1, x, y} com sua respectiva posição, gerando o conjunto de índices J = {1, 2, 3}. Apartir disso, é efetuado um processo de enumeração como descrito na seção 2.3.3, queremove os elementos dos g− 1 produtos cartesianos I1× I2× . . .× Ig que não estão emordem não decrescente, gerando um novo conjunto de índices I. Assim, para P2(R2)teremos o conjunto W = {1, x, y}. Logo

I = {(1, 1), (1, 2), (2, 2), (1, 3), (2, 3), (3, 3)}

Com isso, a base fica determinada por

B = {W(1) ∗W(1), W(1) ∗W(2), W(2) ∗W(2), W(1) ∗W(3), W(2) ∗W(3), W(3) ∗W(3)}= {1, x, x2, y, xy, y2}

Note que essa construção é geral, podendo ser utilizada para geração da base dePg(Rd).Um fato importante é saber que a dimensão do espaço Pg(Rd) = (d+g

g ) [19].

Em seguida está descrita uma possível implementação do código para geração doselementos da base:

38 Aproximações de Funções por mínimos quadrados

function [P] = Enumerate_Base(n,k)P = [];for i = 1:k

Division(i) = n;end[Base] = InitGrid(k,Division);for j = 0:Base(k+1)-1

[f] = GridCoords(k,j,Base);f = f+1;[lex] = Lexico(k,f);if lex == 1

P = [P; f];end

endreturn

end

Vale salientar aqui que a função Lexico possui diferenças com a definida na seção2.3.3:

function [lex] = Lexico(k,f)for i = 1:k-1

if f(i) > f(i+1)lex = 0;return

endendlex = 1;return

end

Uma vez gerado o conjunto I, a geração da matriz B, de avaliação dos pontos nabase, pode ter a seguinte implementação:

Referências Bibliográficas 39

function B = base_polinomios_rd(points, degree)m = length(points);dim = size(points,2);dim_base_pol = nchoosek(dim+degree,degree)B = zeros(m,dim_base_pol);P = [ones(m,1) points];indices_base = Enumerate_Base(dim+1, degree);

for i = 1:mfor j = 1:dim_base_pol

value = 1;for k = 1:degree

value = value * P(i,indices_base(j,k)+1);endB(i,j) = value;

endendreturn

end

Deve ser tomado cuidado com a ordem dos coeficientes quando for efetuada a ava-liação do polinômio em um ponto qualquer do domínio, após obter a base B e emseguida o vetor α, usando as construções descritas.

40 Referências Bibliográficas

Bibliografia

[1] ALLGOWER, E; GEORG, K - Numerical Continuation Methods - Sringer Verlag(1990). 15, 16

[2] BLOOMENTHAL - Polygonization of Implicit Surfaces - CAGD 5 (1988) 341-355.2

[3] CASTELO, A. - Aproximações Adaptativas de Variedades Variedades Implicitase Aplcações em Modelagem Implícita e Equações Algébrico-Diferenciais - Tese deDoutorado - PUC - Rio (1992). 2, 15, 28

[4] CASTELO, A. ; NONATO, L. G. ; SIQUEIRA, M. ; MINGHIM, R. ; TAVARES, G. .The J1a Triangulation: an adaptive triangulation in any dimension. Computers &Graphics, 30 (5) (2006), 737-753. 2, 15

[5] COXETER, H. S. M. - Discrete Groups Generated by Reflections - Annals ofMathematics, 35 (1934) 588-621. 18

[6] EVEN, S. - Algorithmic Combinatorics - The Macmillan Company (1973). 1, 5

[7] FREUDENTHAL, H. - Simplizalzerlegungen von Beschrankter Flachheit - Annalsof Mathematics 43 (1942) 580-582. 18

[8] HALL, M.; WARREN, J. - Adaptative Tesselation of Implicitly Defined Surfaces -Technical Report, Rice Comp TR 88-84 (1990).

[9] KUHN, H. W. - Simplicial Approximation of Fixed Points - Proceedings of Natio-nal Academy of Sciences of United States of America, 61 (1968) 1238-1242. 18

[10] LEWINER, T.; LOPES, H; VIEIRA, A. W; TAVARES, G. - Efficient implementationof Marching Cubes? cases with topological guarantees, Journal of Graphics Tools,(2003) 8 (2) 1-15. 2

[11] LORENSEN, W. E.; CLINE, H. E. - Marching cubes: A high resolution 3d surfaceconstruction algorithm, SIGGRAPH, (1987) 163-169. 2

[12] MOORE, D.; WARREN, J. - Multidimensional Adaptative Mesh Generation - Te-chnical Report, Rice Comp TR 90-106 (1990). 2

[13] NIJENHUIS, A.; WILF, H. S. - Combinatorial Algorithms - Academic Press (1978).1, 5

41

42 Referências Bibliográficas

[14] PAGE, E. S.; WILSON, L. B. - An Introduction to Computational Combinatorics -Cambridge Computer Science Text - 9 (1979). 1, 5

[15] SCARF, H. - On Piecewise Linear Aproximation to Smooth Mappings - SIAM J.App. Math. 15 (5) (1967) 1328-1343. 2

[16] TREFETHEN, L.N.; BAU, D. - Numerical Linear Algebra - SIAM (1997), ISBN:9780898714876. 3, 31, 33

[17] PAIVA, A., Do método de mínimos quadrados até funções de base radial. Disponí-vel em: <http://www2.icmc.usp.br/∼apneto/download/mmq2rbf.pdf>. Aces-sado em: 12 de dezembro de 2012. 31

[18] WEISS, K.; FLORIANI, L. - Simplex and Diamond Hierarchies: Models and Ap-plications, Computer Graphics Forum, 30 (8) (2011) 2127-2155. 2

[19] COX, D.A.; LITTLE, J.; O’SHEA, D. - Using Algebraic Geometry, Graduate Textsin Mathematics - Springer (2005), ISBN: 9780387207063. 37