import sympy
from sympy import diff
from sympy import symbols
x = 20
k = 1
x1 = x + k
x2 = x - k
def func(t):
return 2000 * sympy.log(14*10000/(14*10000-2100*t))-9.8*t
def for_difference():
a_for_diff = (func(x1) - func(x))/k
for_error = abs(a_for_diff - a_true)/a_true
print(f'{x}的一阶向前差分值:{a_for_diff}')
print(f'{x}的一阶向前差分的误差:{for_error*100}%')
if __name__ == '__main__':
t = symbols("t")
a_true = diff(func(t), t).subs(t, x)
for_difference()
def beh_difference():
a_beh_diff = (func(x) - func(x2))/k
beh_error = abs(a_beh_diff - a_true)/a_true
print(f'{x}的一阶向后差分值:{a_beh_diff}')
print(f'{x}的一阶向后差分的误差:{beh_error*100}%')
if __name__ == '__main__':
t = symbols("t")
a_true = diff(func(t), t).subs(t, x)
beh_difference()
def cen_difference():
a_cen_diff = (func(x1)-func(x2))/(k*2)
cen_error = abs(a_cen_diff - a_true)/a_true
print(f'{x}的一阶中心差分值:{a_cen_diff}')
print(f'{x}的一阶中心差分的误差:{cen_error*100}%')
if __name__ == '__main__':
t = symbols("t")
a_true = diff(func(t), t).subs(t, x)
cen_difference()
def two_cen_difference():
a_cen_diff = (func(x1)+func(x2)-2*func(x))/(k**2)
cen_error = abs(a_cen_diff - a_true)/a_true
print(f'{x}的二阶中心差分值:{a_cen_diff}')
print(f'{x}的二阶中心差分的误差:{cen_error*100}%')
if __name__ == '__main__':
t = symbols("t")
a_true = diff(func(t), t , 2).subs(t, x)
two_cen_difference()