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.
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.
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.
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.
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)
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)
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).
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]
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)
).
Esses descontos referem-se a implementações que não estavam em acordo com o especificado no enunciado tais como:
Esses pontos devem ser acrescentados a EPS que falharam nos testes de unidade mas produziram imagens que são visualmente próximas do esperado.