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日

悬赏问题

  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
  • ¥500 火焰左右视图、视差(基于双目相机)