问题遇到的现象和发生背景
大家好 我是初学者 利用二分法求解函数近似解 在python实现过程中 想设计手动输入函数解析式并实现方程近似求解 但无法解决含参数的赋值与引用问题 请帮忙提供下思路 我查看了compile和eval函数用法 但最后显示报错 意思是浮点数类型求值无法计算 麻烦了麻烦了。
用代码块功能插入代码,请勿粘贴截图
##二分法
import numpy as np
import ast
u=input('请输入函数解析式f=')
c = compile(u,'','eval')
#x=2
#print(eval(c))
#print(c)
#print(type(eval(c)))
a=float(input('请输入区间左端点:a='))
b=float(input('请输入区间右端点:b='))
eps=float(input('输入停止精度要求:eps='))
k=0
x=(a+b)/2
def fun(t):
x=t
##print(x)
c = compile(u,'','eval')
##x=str(x)
z=eval(c)
return z
#return pow(2,t)+3*t-7 #pow(x,3)表示x的3次幂
print('k a f(a) b f(b) c f(c)')
T=[k,a,fun(a),b,fun(b),x,fun(x)]
T1=[k,a,fun(a),b,fun(b),x,fun(x)]
while abs(T1[3]-T1[1])>eps:
k+=1
if fun(x)*fun(a)==0:
a=a
b=x
x=(a+b)/2
T1=[k,a,fun(a),b,fun(b),x,fun(x)]
T=np.row_stack([T, T1])
break
elif fun(x)*fun(a)>0:
a=x
b=b
x=(a+b)/2
T1=[k,a,fun(a),b,fun(b),x,fun(x)]
T=np.row_stack([T, T1])
elif fun(x)*fun(a)<0:
a=a
b=x
x=(a+b)/2
T1=[k,a,fun(a),b,fun(b),x,fun(x)]
T=np.row_stack([T, T1])
print(T)
print('经过'+str(k)+'次迭代,方程的根为',a)
L=input('输入任意字符结束程序;')
我的解答思路和尝试过的方法
查看了compile和eval函数用法 ,无果
我想要达到的结果
手动输入函数解析式,并利用封装程序实现对函数零点的近似求解, 无法解决含参函数的赋值。