Critérios de correção EP3

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: 8 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 constante [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
alfa = 0.0 (Sombreamento foi testado manualmente)

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:

R = [[(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)]],

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)).

Parâmetros da inspeção manual

Função: x ** 5 - 1
Derivada: 5 * x ** 4
x1 = -5;
y1 = -5;
x2 = 5;
y2 = 5;
N = 400;
eps = 1e-5;
maxiter = 100;
ro = 1e-5;
alfa = 0.8.

 

Descontos por inspeção [Desconto máximo: 2 pontos]

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

  • código muito complexo ou gastando recursos de forma muito desnecessária [0,5 ponto]
  • ausência de identificação (número USP, nome e turma) [0,5 ponto]
  • Sombreamento errado [1 ponto]
  • Erro de execução ou loop infinito [0.5 ponto]

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

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

Última atualização: sexta-feira, 7 jul. 2017, 16:38