python制图一元迭代函数_使用牛顿迭代法求解一阶导数方程 python

用一个给定边长 4 的正方形来折一个没有盖的纸盒,设纸盒的底部边长为 l,则纸盒的高为 (4-l)/2,那么纸盒的体积为:

怎样才能使纸盒的容积最大?也就是在 l>0,4-l>0 的限制条件下,函数 V(l) 的最大值是多少?

1、绘图

import numpy as np

import matplotlib.pyplot as plt

l = np.linspace(0,4,100)

V = lambda l: 0.5*l**2*(4-l)

plt.plot(l,V(l))

plt.show()

由图可知,f(x)只存在一个极值,并且是改点为所求的极大值点,即相当于求解方程f'(x)=0

PS D:\yunke\script\test> cat .\test_niu.py

import numpy as np

h=0.0001

def get_num(x,maxiter=10):   //默认使用牛顿法迭代10次

#f=lambda x: x**2-c

#f=lambda x: x**2-2*x-4

F=lambda x: 0.5*x**2*(4-x)

def df(x,f=F):                      //使用导数定义法求解导数

return (f(x+h)-f(x))/h

for i in range(maxiter):

#x=x-F(x)/df(x)   //计算一阶导数,即是求解  f(x)=0

x=x-df(x)/df(x,df)  //计算二阶导数,即是求解  f'(x)=0

print i+1,x

return x

print get_num(10)

##############################

输出结果

1 5.7692303736

2 3.75166276899

3 2.91004604198

4 2.68541477646

5 2.66674802777

6 2.66661667775

7 2.66661666635

8 2.66661666635

9 2.66661666635

10 2.66661666635

2.66661666635

#######################################

还可以使用  sympy进行求解

详见:http://www.cnblogs.com/NaughtyBaby/p/5427779.html

from sympy.abc import l

V = 0.5*l**2*(4-l)

# 看看一次导函数:

print V.diff(l)

# output is : -0.5*l**2 + 1.0*l*(-l + 4)

# 一次导函数的定义域为(-oo,oo),因此关键点为V'(l)=0的根

cp = sympy.solve(V.diff(l),l)

print cp

# output is: [0.0, 2.66666666666667]

# 找到关键点后,使用二次导数测试:

for p in cp:

print V.diff(l,2).subs(l,p)

# output is: 4, -4

# 因此知道在l=2.666666处时,纸盒的体积最大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值