栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

# python------牛顿法求解

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

# python------牛顿法求解

—编程用牛顿法解方程 x*e**x-1=0,初始点和终止准则等自行选择。
#---编程用牛顿法解方程 x*e**x-1=0,初始点和终止准则等自行选择。
import numpy as np
from numpy import sign
import sympy as sp
import easygui as g

#---------原始函数-------
def fun(x):
    f=x*sp.exp(x)-1
    #f=7*x**5-13*x**4-21*x**3-12*x**2+58*x+3
    return f

m=0
#---------求导,并判断在区间内任选初值是否使牛顿法生成的数列收敛到区间内的解-----
def ds_judge(a,b,fun):
    global m
    x=sp.symbols("x")
    ds1=fun(x).diff(x)
    ds2=sp.diff(ds1,x)
    ds1fza=float(ds1.evalf(subs={x:a}))   #ds1fza---导数1赋值a  以下类推
    ds1fzb=float(ds1.evalf(subs={x:b}))
    ds2fza=float(ds2.evalf(subs={x:a}))
    ds2fzb=float(ds2.evalf(subs={x:b}))
    if (ds1fza * ds2fza) >0 and  (ds1fzb * ds2fzb) >0  :
        m=1
        print("在[%f,%f]内任选的初值可以使牛顿法生成的数列收敛到区间内的解,是一个严格递减有下界的数列。"%(a,b))

    elif (ds1fza * ds2fza) <0 and  (ds1fzb * ds2fzb) <0  :
        m=1
        print("在[%f,%f]内任选的初值可以使牛顿法生成的数列收敛到区间内的解,是一个严格递减有上届的数列。"%(a,b))

    else:
        m=2
        print("不能断定在[%f,%f]内任选的初值可以使牛顿法生成的数列收敛到区间内的解,可以考虑缩小定义域。"%(a,b))
        

#--------牛顿法函数定义--------------
def nd_method(a,b,x0,esp,fun,ds_judge):
    """
     a0: return print("该区间内没有根,请重新换区间!")

    ds_judge(a,b,fun)

    if m==1:
        flag=1
    if m==2: return print("请重新更换区间!")

    while flag:
        n +=1
        ds1=fun(x).diff(x)
        ds1fz=float(ds1.evalf(subs={x:x0}))
        y=x0-(fun(x0) / ds1fz)
        if abs(y-x0)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/329565.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号