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日

悬赏问题

  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持
  • ¥15 stata安慰剂检验作图但是真实值不出现在图上
  • ¥15 c程序不知道为什么得不到结果
  • ¥40 复杂的限制性的商函数处理
  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来