python sympy 对函数求导

利用sympy对函数求导,并带值求计算结果

问题描述:

在写梯度下降法求最小值时,用pycharm写就一直报错
在这里插入图片描述

错误:raise TypeError(“Cannot convert expression to float”)
TypeError: Cannot convert expression to float

后面就直接用python自带的IDLE测试又发现可行,

from sympy import *
x = symbols('x')
f = 3*pow(x,2)-40*x-10
df = diff(f,x) #对x求导,获取的知识一个符号表达式
x1 = 100
eta = 0.1
x = x1 -eta*float(df.evalf(subs = {x:x1}))

图一

就觉得很奇怪,想不明白,于是又重新运行了一遍,出现了同样的错误。
在这里插入图片描述

解决:

后面发现问题出在了x身上,原来是x被重复覆盖,在IDLE上的测试,x并未覆盖,当运行后
x = x1 -eta*float(df.evalf(subs = {x:x1})) ,再运行一次时,subs = {x:x1} x就改变了,就不是原来的了,所以我的源代码问题就出在这,所以只需要让程序知道哪个x是函数的自变量,哪个是x是需要带入的值。也不用folat转换了,yes!

在这里插入图片描述

from sympy import *
def function():
    x = symbols('x')
    f = 3 * pow(x, 2) - 40 * x - 10
    df = diff(f,x) #对x求导
    return df

eta = 0.1
x = 100
d = function()
# print(type(d))
# print(d.evalf(subs={'x':100}))
for _ in range(100):
    x = x-eta*d.evalf(subs={'x':x})
    print(x)

结果:在这里插入图片描述
参考:python实现函数求导
PS:第一次使用sympy,多多指教>-<

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值