python牛顿迭代法求根例题_Python实例:Newton法求解单变量方程的根

#coding:utf-8

'''

Newton法求解方程的根

'''

from matplotlib import pyplot as plt

from pylab import mpl

mpl.rcParams['font.sans-serif'] = ['FangSong'] # 指定默认字体

mpl.rcParams['axes.unicode_minus'] = False # 解决保存图像是负号'-'显示为方块的问题

import numpy as np

import sympy

f = lambda x : np.exp(x) - 2

tol = 0.1

xk = 2

s_x = sympy.symbols('x')

s_f = sympy.exp(s_x) - 2

f = lambda x : sympy.lambdify(s_x,s_f,'numpy')(x)

fp = lambda x : sympy.lambdify(s_x,sympy.diff(s_f,s_x),'numpy')(x)

# 可视化方程求解过程

x = np.linspace(-2.1,2.1,1000)

fig,ax = plt.subplots(1,1,figsize = (12,4))

ax.plot(x,f(x))

ax.axhline(0,ls=':',color='k')

n = 0

while f(xk) > tol:

xk_new = xk - f(xk) / fp(xk)

ax.plot([xk, xk], [0, f(xk)], color='k', ls=':')

ax.plot(xk,f(xk),'ko')

ax.text(xk,-0.5,r'$x_%d$' % n,ha='center')

ax.plot([xk,xk_new],[f(xk),0],'k-')

xk = xk_new

n += 1

ax.plot(xk,f(xk),'r*',markersize=15)

ax.annotate("Root approximately at %.3f" % xk,

fontsize=14,family='serif',

xy = (xk,f(xk)),xycoords='data',

xytext=(-150,+50),textcoords='offset points',

arrowprops=dict(arrowstyle='->',connectionstyle='arc3,rad=-0.5'))

ax.set_title('Newton method')

ax.set_xticks([-1,0,1,2])

plt.show()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值