Revisão de nota

Pedidos de revisão devem ser encaminhados ao professor(a) responsável pela sua disciplina, acompanhados de explicação que suporte seu pedido, baseada nos critérios aqui descritos. Não são aceitos pedidos que discutam os critérios adotados.

Critérios de correção

Os descontos aplicados se dividem em dois tipos: descontos por teste de unidade e descontos por inspeção. O primeiro tipo de desconto é aplicado quando a implementação de uma função específica não retorna o valor desejado; esses descontos são aplicados automaticamente através de um programa corretor. O segundo tipo de desconto refere-se a critérios menos objetivos como implementação ruim (código muito complexo ou muito ineficiente) ou falta de identificação. Existe também a possibilidade de bônus acrescentados pela inspeção visual da imagem produzida. Esses bônus visam atribuir notas a EPs que, apesarem de falharem nos testes unitários, produziram uma imagem próxima a esperada em casos de teste estabelecidos.

Descontos por teste de unidade de funções [Desconto máximo: 9 pontos]

Esses testes verificam se uma determinada função se comporta como esperada, independentemente de sua implementação. Para isso, a função é chamada com um conjunto pré-determinado de entradas e sua saída (ou os valores modificados pela função) é (são) comparada(os) contra o gabarito. Se qualquer chamada da função resultar em um resultado diferente do esperado o desconto correspondente é aplicado. Note que quando a função falha vários casos do mesmo teste o desconto é aplicado apenas uma vez.

Teste da função newton com derivada constante [1 ponto]

Verifica se função retorna o valor esperado quando chamada com as funções f(x)=10 e f(x)=2x + 10. Os parâmetros utilizados são

x, eps, maxiter = 0, 1e-6, 50

para o primeiro caso, e

x, eps, maxiter = -0.5, 1e-8, 50

para o segundo.

Teste da função newton com derivada não variável [2 pontos]

Verifica se função retorna valor esperado para os seguintes casos :

(f,       fp,                      x,              eps,  maxiter)
('sin(x)','cos(x)',                0.0,            1e-6, 50)
('x**2-1','2*x',                  -0.5,            1e-8, 50)
('x**2-1','2*x',                   0.0,            1e-8, 50)
('x**2-1','2*x',                   0.5,            1e-8, 50)
('2*x**5 + 3*x**2','10*x**4 + 6*x',0.0,            1e-8, 50)
('x**5-1','5*x**4',                complex(-1,2),  1e-8, 50)
('x**5-1','5*x**4',                complex(2,-1),  1e-8, 50)
('x**5-1','5*x**4',                complex(2,1),   1e-8, 50)
('x**5-1','5*x**4',                complex(-2,-1), 1e-8, 50)

Teste da função faz_matriz [2 pontos]

Verifica se a função retorna as matrizes esperadas. A função é chamada com uma implementação correta da função newton, de forma que erros não se propaguem. Considera erro quando a função newton da pessoa retorna valores errados, e esses erros são compensados na função faz_matriz.

Casos testados:

(f,fp,x1, y1, x2, y2, epsilon, N)
('x**2+1','2*x',-2,-2,2,2,50,1e-8,10),
('x**5-1','5*x**4',-5,-5,5,5,50,1e-8,10),
('sin(complex(1,1)*x)+cos(complex(0,2)*x)','complex(1,1)*cos(complex(1,1)*x)-complex(0,2)*sin(complex(0,2)*x)',-3,-2,3,2,40,1e-8,50),
('x**8+3*x**4-4','8*x**7+12*x**2',0.09,0.08,0.1,0.091,10,1e-5,50)

Teste da função determina_cores [2 pontos]

Testa a função com a matriz obtida pela função faz_matriz para a função f(x)=x2 − 1 na região [ − 2, 2]×[−1, 1] com N = 5 pontos no lado menor, ϵ = 10−8 e número máximo de iterações igual a 50.

Parâmetros utilizados:

I = [[5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5]]
 R = [[(-0.9999999999915605+1.002868300115946e-11j), (-0.9999999999988611+1.101423693368098e-12j), (-1.000000000000893-1.8410969685513914e-12j), (-0.9999999996963806+1.6028007900057198e-10j), (-1.0000000000120222+2.8696331032243756e-11j), 0, (1.0000000000120222+2.8696331032243756e-11j), (0.9999999996963806+1.6028007900057198e-10j), (1.000000000000893-1.8410969685513914e-12j), (0.9999999999988611+1.101423693368098e-12j), (0.9999999999915605+1.002868300115946e-11j)],
      [(-0.9999999999999984-7.89154668219525e-14j), (-1.0000000000000002-1.9786121540215755e-16j), (-0.9999999975485538-4.103197839280207e-11j), (-1.000000000000001+0j), (-1-7.71486715617761e-17j), 0, (1-7.71486715617761e-17j), (1.000000000000001-1.0651421008959062e-29j), (0.9999999975485538-4.103197839280207e-11j), (1.0000000000000002-1.9786121540215755e-16j), (0.9999999999999984-7.89154668219525e-14j)],
      [(-0.999999999999999-1.628611602180537e-15j), (-0.9999999997957864-2.0124070333450922e-10j), (-1.000000000000001-1.035724807994537e-14j), (-0.9999999999999504-2.4549317481084646e-13j), (-0.9999999999915605-1.002868300115946e-11j), 0, (0.9999999999915605-1.002868300115946e-11j), (0.9999999999999504-2.4549317481084646e-13j), (1.000000000000001-1.035724807994537e-14j), (0.9999999997957864-2.0124070333450922e-10j), (0.999999999999999-1.628611602180537e-15j)],
      [(-0.999999999999999+1.628611602180537e-15j), (-0.9999999997957864+2.0124070333450922e-10j), (-1.000000000000001+1.035724807994537e-14j), (-0.9999999999999504+2.4549317481084646e-13j), (-0.9999999999915605+1.002868300115946e-11j), 0, (0.9999999999915605+1.002868300115946e-11j), (0.9999999999999504+2.4549317481084646e-13j),  (1.000000000000001+1.035724807994537e-14j),  (0.9999999997957864+2.0124070333450922e-10j),  (0.999999999999999+1.628611602180537e-15j)],
      [(-0.9999999999999984+7.89154668219525e-14j), (-1.0000000000000002+1.9786121540215755e-16j),  (-0.9999999975485538+4.103197839280207e-11j),  (-1.000000000000001-1.0651421008959062e-29j),  (-1+7.71486715617761e-17j), 0,  (1+7.71486715617761e-17j),  (1.000000000000001+2.1302842017918123e-29j),  (0.9999999975485538+4.103197839280207e-11j),  (1.0000000000000002+1.9786121540215755e-16j), (0.9999999999999984+7.89154668219525e-14j)],
      [(-0.9999999999915605-1.002868300115946e-11j),  (-0.9999999999988611-1.101423693368098e-12j),  (-1.000000000000893+1.8410969685513914e-12j),  (-0.9999999996963806-1.6028007900057198e-10j),   (-1.0000000000120222-2.8696331032243756e-11j),  0,  (1.0000000000120222-2.8696331032243756e-11j),  (0.9999999996963806-1.6028007900057198e-10j),  (1.000000000000893+1.8410969685513914e-12j),  (0.9999999999988611-1.101423693368098e-12j),  (0.9999999999915605-1.002868300115946e-11j)]]
rho = 1.0

A função deve gerar cores como na figura abaixo:

Note que a figura contém duas “regiões” coloridas e uma linha central escura indicando os pontos de não convergência. A função é considerada correta se pelo menos 90% dos pontos são coloridos corretamente. Um ponto é considerado colorido corretamente se ele é atribuído a mesma cor da sua região independentemente da cor escolhida. As cores de cada região são escolhidas como os pontos extremos à esquerda e à direita da matriz. Os pontos na linha vertical central são considerados corretos se eles possuem valor −1 ou (0, 0, 0).

Teste da função calcula_sombras [1 ponto]

Verifica se a função retorna a lista correta. O último elemento da lista não é verificado. Os valores são comparados com uma precisão de 10−6.

Parâmetros utilizados:

I = [[5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5]]

Retorno esperado:

s = [1.0, 1.0, 1.0, 1.0, 1.0, 0.7333333333333334, 0.1333333333333333]

Teste da função grava_imagem [1 ponto]

Verifica se uma imagem no formato ppm foi corretamente gerada. Ignora espaços adicionais no começo e fim de cada e linha, e linhas em branco ao final.

Parâmetros utilizados:

I = [[5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 4, 4, 4, 5, -1, 5, 4, 4, 4, 5],
     [5, 5, 4, 5, 6, -1, 6, 5, 4, 5, 5],
     [5, 5, 5, 5, 6, -1, 6, 5, 5, 5, 5]],
C = [[(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)],
     [(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)],
     [(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)],
     [(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)],
     [(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)],
     [(154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (154, 205, 50),  (0, 0, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0),  (127, 255, 0)]],
alpha = 0.0

Os valores das cores são comparados com uma tolerância de 1 unidade (assim, um valor de (153,206,51) seria considerado correto para (154,205,50)).

Descontos por inspeção [Desconto máximo: 1 ponto]

Esses descontos referem-se a implementações que não estavam em acordo com o especificado no enunciado tais como:

Bônus por inspeção [Acréscimo máximo: 2 pontos]

Esses pontos devem ser acrescentados a EPS que falharam nos testes de unidade mas produziram imagens que são visualmente próximas do esperado.