Critérios EP3
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.