Dúvidas EP2

Dúvidas EP2

por Andre Chalom -
Número de respostas: 38
Recebi estas dúvidas sobre o EP2, acho bom compartilhar com todo mundo:

> 1) pq na função GeraSpline existem h1 e h2, para que eles servem?
h1 e h2 servem para guardar os "delta taus". Eu deveria ter chamado essas variáveis de "DeltaTauimenos1" e "DeltaTaui" ou algo parecido, mas achei que h1 e h2 eram um pouco mais curtos. LEMBREM que vocês não são obrigados a usar essas variáveis, e podem inclusive mudar o nome delas.

> 2) quando vc diz que "double d[MAX], /* Guarda o lado direito do sist lin */" vc que dizer que ele guarda o b do Ax=b?
Exato. De novo, eu deveria ter chamado esse vetor de b para ficar mais coerente com o enunciado.

> 3) se os pontos são equiespaçados todos os "delta taus" são iguais? e se dão através de (b-a)/n?
Sim. Isso é verdade. Mas o seu programa deve gerar splines para pontos quaisquer, e não só para o caso dos equiespaçados.

> 4) o que coloco nas posições da matriz A[...][0], A[...][1]?
Esses caras armazenam as condições de contorno. Vejam nas notas de aula como as diferentes c.c. levam a sistemas lineares diferentes. Como a gente não está permitindo que o programa conheça as derivadas da função nos extremos, só duas das condições de contorno fazem sentido: o natural e o not a knot.
NOTEM que o enunciado foi feito pensando tanto nos splines naturais como nos not a knot. Para os not a knot, as c.c. incluem as duas primeiras linhas e as duas últimas linhas, mas para quem for fazer o natural, a c.c. só inclui a primeira e a última linha. Então, o laço que gera o "miolo" da matriz vai de 2 até n-2 para o not a knot, mas vai de 1 até n-1 para o spline natural.


Em resposta à Andre Chalom

Re: Dúvidas EP2

por Bruno Calado -
Para resolver o sistema linear, sou mesmo obrigado a usar aquela matrix[3][MAX]? Não posso criar uma matrix[MAX][MAX] apenas para calcular com o gauss?

O que você recomenda para plotar em C? Você aceitaria as plotagens no relatório ao invés de no programa?
Em resposta à Bruno Calado

Re: Dúvidas EP2

por Andre Chalom -

Oi, Bruno.

1. Sim, você é obrigado a usar a matriz [3][MAX] ao invés de uma matriz_enorme[MAX][MAX]. Cálculo numérico precisa ser feito de uma forma eficiente, e não faz sentido guardar n^2 entradas e fazer as contas em n^2 quando você só vai usar de fato 3n.

2. Plotar em C é um problema. Para aqueles que já foram abençoados pelo Linux, sugiro mandar a saída do programa para o Gnuplot (procurem um tutorial no Google). Aqueles que não são puros de coração podem gravar a saída em um arquivo texto e fazer os gráficos no Excel.

Em resposta à Andre Chalom

Re: Dúvidas EP2

por Jorge Luiz de Lima Matias -
eu não entendi essa matriz[3][MAX]
porque essa matriz tem só 3 linhas? quero dizer, porque o 3 está na posição das linhas e não nas colunas?
a não ser que essas linhas sejam as diagonais da matriz que está nas notas de aula, mas ai qual linha é cada diagonal? e a "diagonal do meio" tem um termo a mais do que as outras (pensando em splines naturais), começo as outras duas na posição 1?
Em resposta à Jorge Luiz de Lima Matias

Re: Dúvidas EP2

por Andre Chalom -
Oi, Jorge. Esses pontos estão explicados no enunciado do EP, inclusive com um exemplo. Se você tiver alguma dúvida sobre a implementação, me procure na monitoria.
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Gustavo Bighellini Machado Gonçalves Martins -

No enunciado do ep2 (.pdf), página 2:

...Erros de entrada...Se o sistema montado for de resolução impossível....

O que seria um sistema de reolução impossível?

Em resposta à Gustavo Bighellini Machado Gonçalves Martins

Re: Dúvidas EP2

por Andre Chalom -
Olá, Gustavo.

Tome Ax=b um sistema linear, com o determinante da matriz A valendo 0. Este sistema não tem solução única, e portanto é impossível resolve-lo unicamente.

No caso específico de splines, você pode esbarrar em um sistema impossível quando dois pontos têm a mesma coordenada x, mas coordenadas y diferentes. Tente escrever a função que no x=0 passa pelo y=1 e pelo y=2. Impossível.
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Gustavo Bighellini Machado Gonçalves Martins -

Ok, obrigado.

Mais uma dúvida:

O usuário eh obrigado a fornecer os valores de (tau, y) ordenados (em relação a tau)? Se sim, temos que fazer uma verificação disso?

Em resposta à Gustavo Bighellini Machado Gonçalves Martins

Re: Dúvidas EP2

por Andre Chalom -
O usuário deve fornecer os vetores ordenados em relação a tau. Você não é obrigado a verificar a ordenação, mas é sempre bem vindo.
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Daniel Amorim de Oliveira -
andre, estou tendo muita dificuldade em como resolver o sistema usando a matriz A[3][MAX]
sera que vc podia me ajuda???
Em resposta à Daniel Amorim de Oliveira

Re: Dúvidas EP2

por Andre Chalom -

Olá, Daniel.

A sugestão que eu dei para quem foi na monitoria semana passada foi escrever as regras de escalonamento para uma matriz escrita na forma usual:

A[i][j] = ....

e depois pense em como essa regra se transforma para a matriz "deitada". O que acontece com o i? E com o j?

Se você ainda tiver problemas, me procure na monitoria semana que vem.

Em resposta à Andre Chalom

Re: Dúvidas EP2

por Gustavo Bighellini Machado Gonçalves Martins -

Em GeraSpline temos:

.

.

.

/*Inicializa as primeiras posicoes da matriz:

 * A[...][0], A[...][1], b[1] */

não seria b[0]?pois é a primeira a ser adicionada...

.

.

.

/* Calcula os ultimos termos da Matriz A:

 *A[...][n-1], A[...][n] e b[n-1] */

não seria b[n]? pois é a última linha a ser adicionada...

;;;

se sim,

como a definição de MAX = 100 é o número de polinomios,

temos, ao lono do ep inteiro, atribuições tau[MAX], y[MAX] etc...

não seria tau[MAX+1], y[MAX+1] etc?

Em resposta à Gustavo Bighellini Machado Gonçalves Martins

Re: Dúvidas EP2

por Jorge Luiz de Lima Matias -
gustavo vc está certo em tudo o q vc disse, menos a ultima parte...
MAX é o numero de polinomios, e tau[] e y[] começam de 0 e vão até o numero de polinomios, assim tendo n+1 posições, logo deve ser tau[MAX] e y[MAX] mesmo... seria o q vc disse se esses vetores começassem na posição 1.
quanto ao resto eu fiz assim como vc estah pensando tbm, eu estou fazendo por splines naturais e eh isso mesmo
Em resposta à Jorge Luiz de Lima Matias

Re: Dúvidas EP2

por Daniel Bednarski -
Estou com dúvida nesta mesma parte também. Também fiz pensando desta maneira e ainda mais: estou impondo a condição Not-a-Knot, mas precisarão somente as 'linhas' A[...][0] e A[...][n] ser preenchidas através da condição de contorno (assim como b[0] e b[n]), não? Tanto Not-a-Knot quanto splines naturais, pelo que eu entendi pelas listas do professor, tem se de substituir na matriz A apenas estes elementos e não também os A[...][1] e A[...][n-1] que aparecem no código-fonte. Por favor, me ajudem se eu estiver errado.
Em resposta à Jorge Luiz de Lima Matias

Re: Dúvidas EP2

por Gustavo Bighellini Machado Gonçalves Martins -

em C, quando se  declara uma variável, tem-se:

vetor[numerodeposicoes];

portanto:

vetor[0], vetor[1], vetor[2], ..... vetor[numerodeposicoes-1].

Eu ACHO que deveria mudar o comentario de MAX (dizer que e numero maximo de pontos) ou colocar MAX+1 nos vetores declarados....

Em resposta à Andre Chalom

Re: Dúvidas EP2

por Bruno Calado -
Estou com dificuldade para plotar mesmo com suas dicas.

Aceita o c chamando um programa em python para plotar? E quanto o bonus sobe a nota?
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Andre Chalom -

Olá. Vamos por partes:

1) Na hora de plotar, vale tudo que eu possa reproduzir em casa, ou seja, pode chamar um programa em python para plotar. Não pode mandar pro MatLab plotar =)

2) Não esquentem a cabeça com o que significa o MAX. Se vocês esperam usar 100 pontos, declarem o MAX como 150 para dar uma folga. Isso seria um problema importante se vocês precisassem alocar memória dinamicamente no programa - como não é o caso, chutem sempre para cima.

3) Me perguntaram por e-mail a definição do Delta Tau[i]. Estou sem as notas de aula aqui, mas acredito que Delta Tau[i] = Tau[i+1] - Tau[i], alguém pode confirmar isso?

4) Condições de contorno: o que tem que ser preenchido fora do laço? Bom, essa pergunta exige que eu saiba como vocês estão implementando dentro do laço. Quando eu fiz o esqueleto, eu estava pensando em um jeito de correr o laço, mas já vi no código de vocês pelo menos outras duas formas... Sugestão: pensem em quais são as posições da matriz que vocês tem que preencher 'a mão' na matriz original, e depois vejam onde esses caras vão parar na matriz deitada. E ajustem os limites do laço que preenche o miolo de acordo.

Explicando os jeitos de correr o laço: um jeito é

para i = X até Y,

A[0][i] =...

A[1][i]=...

A[2][i]=...

Outro jeito:

para i de A até B,

A[0][i+1]=...

A[1][i]=...

A[2][i-1]=...

Vejam que o primeiro laço está mais direcionado à estrutura da matriz deitada, enquanto o segundo laço está de acordo com a estrutura da matriz original. Então tanto os limites quanto as condições de contorno para os dois laços vão ser diferentes!

Em resposta à Andre Chalom

Re: Dúvidas EP2

por André Defendi Arelaro -
André:

Pra fazer aquela tabela para o erro de interpolação usa o erro dado pela função de Runge??

Eu tava calculando o polinômio interpolador da função de Runge para x=0.5 , por exemplo. Aí conforme eu ia aumentando o valor de N, o erro se manteve em um certo valor....... mas não era pro erro ir mudando??
Ou eu tô fazendo algo errado (o q é bem provável) ??
Em resposta à André Defendi Arelaro

Re: Dúvidas EP2

por Gustavo Bighellini Machado Gonçalves Martins -

Andre (Defendi),

acho que vc não pode usar 0.5 para calcular o erro, pq esse ponto estah em -1 + 2i/N...ve em tarefa, no ep2.pdf, 4.Determinar.

mas tbm estou tendo problemas no calculo d alpha...

a expressão a =~ (log(en+k) - log(en)) / (log(n + k) - log( n )) não deveria fornecer o expoente para o primeiro N, e não para o último? na tabela tah um '-' no primeiro expoente...

e que valor alpha deve chegar?

Em resposta à Gustavo Bighellini Machado Gonçalves Martins

Re: Dúvidas EP2

por Andre Chalom -
De fato, o ponto onde você está calculando o erro não pode ser um dos pontos dados. Mas tente calcular o erro em um dos pontos dados: ele tem que ser zero de máquina (ou seja, perto de 1e-15 ou 1e-16). Para outros pontos, o erro deve ser menor que 1 e tem que diminuir conforme o seu N aumenta.

Tente plotar a sua saída (mesmo que seja no Excel) para ter uma idéia do que está acontecendo.

E o alfa está realmente sendo dado em relação ao menor n. Veja nas notas de aula que ele seria perto de 2 para splines de Hermite - então esperamos um número maior do que 2 para splines cúbicos (se não, podíamos todos ser felizes com Hermite que dá bem menos trabalho!).
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Camila Carroci Martins -
Meu ep precisa imprimir os valores calculados das diferenças divididas e do meu vetor b, ou só a solução do sistema?
Em resposta à Camila Carroci Martins

Re: Dúvidas EP2

por Andre Chalom -
Oi, Camila.

O EP só precisa imprimir o valor do spline em um ponto, que é o ValorEmX. Mas eu recomendo que você imprima outras coisas para debugar =)
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Andre Chalom -
ERRATA: Claramente, quanto menor o alfa encontrado (ou maior o módulo do alfa encontrado), melhor é o método.

Splines cúbicos tem os seguintes alfas, aproximadamente:
Completo (g' conhecida): -4
g'' conhecida: -4
natural: perto de -2, mas pode ficar um pouco melhor longe da borda
Not-a-knot: -4 (mas oscila um pouco)


Em resposta à Andre Chalom

Re: Dúvidas EP2

por Lucas Lima -
André não entendi aquela estrutura explicada no enunciado do EP

que quando a ordem é 5:

| 0 | A01 | A12 | A23 | A34 |
| A00 | A11 | A22 | A33 | A44 |
| A10 | A21 | A32 | A43 | 0 |

o que significa esses A's???
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Camila Carroci Martins -
Lembro que tinha uma errata na função de Runge no EP2, mas eu não estou achando ela, alguem poderia por favor falar qual eh?
Obrigada
Em resposta à Camila Carroci Martins

Re: Dúvidas EP2

por Camila Carroci Martins -
Estou com algumas dúvidas que creio ser meio bestas.
Para verificar se meu sistema montado tem resolução impossível, preciso verificar que não foram digitados taus iguais e verificar que o determinante da matriz seja diferente de zero; porem eh pedido que façamos estas verificaçòes na função GaussTridiag, entretanto o parâmetro de entrada desta função é a matriz A[3][MAX] que não eh uma matriz quadrada.

Duvida 1: Como eu calculo o determinante de uma matriz que não seja quadrada?

Duvida2: Posso fazer estas verificações no proprio main? Pois assim, verifico os valores dos taus logo após eles serem digitados e calculo o determinante da matriz A que eh quadrada?

Obrigada

Camila
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Rafael Garcia -
Olá André. No ep2, na parte 2, na qual são descritas as tarefas a serem realizadas, estou com uma dúvida na de número 4. Lá é dito que se deve determinar o erro de interpolação e o coeficiente de decaimento alfa. Pelo que eu entendi, o erro já está sendo calculado pelo próprio programa. Porém, na determinação de alfa, é preciso implementá-la também, ou só é necessário realizar o cálculo e colocar no relatório?
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Andre Chalom -
Vamos lá!

1. A errata da função é que eu escrevi que a função é dada por -i + 2.0*i*... Não, a função é dada por -1.0 +2.0*i*... . O tópico original está no fórum de notícias.
2. Não precisa implementar o cálculo de alpha, só calcular na mão. Claro, se você implementar é sempre mais divertido, mas precisa mudar algumas coisas na main (por exemplo, ao invés de gerar o spline uma vez só, vc vai precisar gerar o spline para 8, 16, 32, etc pontos)
3. Para verificar se o sistema é possível, existe mais de um jeito. Os três abaixo são equivalentes:
Jeito 1: verifique o determinante.
Jeito 2 (específico para splines): verifique se os taus são "suficientemente" diferentes.
Jeito 3: Tente fazer o escalonamento. Se der problema no meio, é porque o sistema era impossível.
Por isso que quem decide se o sistema é possível ou não é o GaussTridiag: vc tenta resolver, se se der um pivô muito pequeno, vc pára. (LEMBRE: testar se é 0 não é o melhor jeito, teste se A[...][...] é menor em módulo do que 1e-15, por exemplo)

Em resposta à Andre Chalom

Re: Dúvidas EP2

por Daniel Bednarski -
Posso declarar o IFLAG no main e passá-lo como parâmetro para a função geraSpline?
Assim ela retornará se a matriz é possível ou não para o próprio main. Do jeito que está, com o IFLAG interno ao geraSpline, o main do programa não saberá se o escalonamento deu certo, e pedirá o ponto x que se deseja interpolar, independente da matriz ser impossível ou não. Em seguida, tentará calcular a interpolação neste ponto mesmo se o sistema for impossível.
Em resposta à Daniel Bednarski

Re: Dúvidas EP2

por Jorge Luiz de Lima Matias -
Daniel, não sei se resolve o que vc quer fazer, mas acho que o programa pode ser encerrado dentro da própria função, usando o comando exit(1);
assim ele não voltaria pro main e não pediria o x

Em resposta à Daniel Bednarski

Re: Dúvidas EP2

por Andre Chalom -
OK, você tem um bom ponto. Pode fazer isso, e é de fato melhor do que o enunciado original. Quem mais quiser fazer essa alteração no programa, mande ver; mas também quem não quiser, deixe do jeito que está.

Usar exit(1) é uma saída um pouco suja. O ideal é mesmo responder pro main que deu pepino e deixar o main decidir o que fazer.
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Bruno Calado -
Hoje tem que dar para reenviar o EP. Por que a data diz dia 26 as 23:55

e o paca fechou dia 25 as 23:55


Em resposta à Bruno Calado

Re: Dúvidas EP2

por Andre Chalom -
Bruno, você pode me enviar o seu EP por e-mail.

Mais alguém está com problemas?
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Camila Carroci Martins -
Nem vi que o paca fechou, mas ele abriu de novo, hoje mandei duas versões do meu ep, e logo menos pretendo mandar a versão final.
Tenta entrar no paca de novo e tenta mandar Bruno.
Em resposta à Andre Chalom

Re: Dúvidas EP2

por Bruno Calado -
QUando as notas dos eps estarao disponiveis?
Em resposta à Bruno Calado

Re: Dúvidas EP2

por Andre Chalom -
Em breve =)

Estou corrigindo os EPs ainda, mas posso adiantar que a maior parte dos EPs entregues está com boas notas.