我正在尝试计算以下函数的一阶和二阶导数,而pytest检查我的计算错误。

我试图更改h的值以通过pytest,但我无法通过。

def error_5_1_11(x):

    def f(x): return x ** 3 - 0.3 * x ** 2 - 8.56 * x + 8.448

    def f_1(f, x, h=10E-10):
        return (f(x + h) - f(x - h)) / (2 * h)

    def f_2(f, x, h=10E-4):
        return (f(x + h) - 2 * f(x) + f(x - h)) / h ** 2

    return f_1(f, x)-(-8.56), f_2(f, x)-(-0.6)


import pytest
from error import *
from numpy import allclose, array
from numpy import allclose

def test_error():
    (a, b) = error_5_1_11(0)
    assert(abs(a) < 10E-13 and abs(b) < 10E-14)


为了通过以下pytest,我需要进行哪些修改,谢谢。

最佳答案

一个简单的解决方法是在主函数上添加关键字参数。

def error_5_1_11(x, h1 = 10E-10, h2=10E-4):
    def f(x):
         return x ** 3 - 0.3 * x ** 2 - 8.56 * x + 8.448

     def f_1(f, x, h=h1):
           return (f(x + h) - f(x - h)) / (2 * h)

     def f_2(f, x, h=h2):
             return (f(x + h) - 2 * f(x) + f(x - h)) / h ** 2

     return f_1(f, x)-(-8.56), f_2(f, x)-(-0.6)

import pytest
from error import *
from numpy import allclose, array

def test_error():
    (a, b) = error_5_1_11(0, h1=10E-13, h2=10E-14)
    assert all(abs(a) < 10E-13 and abs(b) < 10E-14)

关于python - 如何通过以下pytest,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58773589/

10-10 08:23