nightcatNC 2022-08-24 17:04 采纳率: 100%
浏览 75
已结题

结果报错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函数计算结果?

  • 写回答

3条回答 默认 最新

  • chuifengde 2022-08-24 17:35
    关注

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

    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)
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 9月1日
  • 已采纳回答 8月24日
  • 创建了问题 8月24日

悬赏问题

  • ¥15 Stata链式中介效应代码修改
  • ¥15 latex投稿显示click download
  • ¥15 请问读取环境变量文件失败是什么原因?
  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错