结果报错ValueError: cannot derive by this array

结果报错ValueError: cannot derive by this array

from sympy import *      #用于函数定义求导
from scipy.optimize import fsolve   #用于方程求解
import numpy as np                  #用于数组定义等
import matplotlib.pyplot as plt     #用于画图

x=symbols('x')  #定义自变量
P=0.00008   #核酸检测为阳性的概率
def f(x):
    E_x = diff(1+1/x-(1-P)**x, x)
    return E_x
result = fsolve(f, [1])

结果报错:
ValueError: cannot derive by this array

将程序修改为如下:

from sympy import *      #用于函数定义求导
import numpy as np                  #用于数组定义等
import matplotlib.pyplot as plt     #用于画图

x=symbols('x')  #定义自变量
P=0.00008   #核酸检测为阳性的概率
def func(x):
    return 1+1/x-(1-P)**x   #期望定义函数
E_x=diff(func(x),x)
print(E_x)
def f(x):
    return 8.00032001706459*(10**(-5))*(0.99992**x)-1/(x**2)
result = fsolve(f, [1])
print(result)

结果如下:
[112.30454383]

先将diff(func(x),x)的结果打印出来,再手动输入进f(x)的返回值中,再运用fsolve函数便可得到结果

问题:
请问为什么手动输入就可以得到答案?
该如何直接使用diff(func(x),x)结果,不用手动输入就可以运用fsolve函数计算结果?

既然手动输入可以,那就用动态函数:

from sympy import *      #用于函数定义求导
from scipy.optimize import fsolve   #用于方程求解

x=symbols('x')  #定义自变量
P=0.00008   #核酸检测为阳性的概率
def f(x):    
    E_x = diff((1+1/x-(1-P)**x), x)
    return E_x

ss = f"""def ff(x):
    return {f(x)}
"""
exec(ss)
res=fsolve(ff,[1])
print(res)

函数定义替换为

 f=lambdify(x,diff(1+1/x-(1-P)**x, x),'numpy')
文章:关于ValueError: Expected 2-D array, got 1-D array instead:的报错原因及解决办法 中也许有你想要的答案,请看下吧