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 将安全信息用到以下对象时发生以下错误:c:dumpstack.log.tmp 另一个程序正在使用此文件,因此无法访问
  • ¥15 速度位置规划实现精确定位的问题
  • ¥15 代码问题:df = pd.read_excel('c:\User\18343\Desktop\wpsdata.xlxs')路径读不到
  • ¥15 为什么视频算法现在全是动作识别?
  • ¥15 编写一段matlab代码
  • ¥15 用Python做岩石类别鉴定软件
  • ¥15 关于调取、提交更新数据库记录的问题
  • ¥15 之前删了盘从下vs2022遇见这个问题 搞了一整天了
  • ¥15 从Freecad中宏下载的DesignSPHysics,出现如下问题是什么原因导致的(语言-python)
  • ¥30 notepad++ 自定义代码补全提示