开放法求取方程的根

本文探讨了使用迭代法、牛顿切线法和弦截法等开放法求解方程根的算法实现,通过具体代码示例展示了如何在Python中运用这些方法找到方程的根,特别注意了精度误差的处理。

前言

之前我们讨论了划界法求取方程根(二分、试位),本次我们来讨论开放法求取方程根(迭代法、牛顿切线法、弦截法),本次代码熬夜赶工,有不足之处希望给我指正,本篇内容今后还会修改,图像和流程图会在以后补上。

 

补充

下面的所有判0,严格意义上不应该是完全的0,应该改为1e-10或-1e-10,因为可能存在精度误差,如果不判,那就把maxn的计数范围跑完。

 

代码

1.迭代


# -*- coding: utf-8 -*-

import math

maxn = 99999

def f(x) :
    return x**3 - x - 1.0
      
def g(x) :
    return pow(x + 1, 1/3)

def g_(x) :
    return 1/3 * pow(x + 1, -(2/3))


x = 1.5

if (math.fabs(g_(x)) < 1.0) :
    
    for i in range(maxn) :
        
        x = g(x)
        
        if (f(x) == 0) :
            break
        
    print("f(%.6lf) = %.3lf" %(x, f(x)))
    
else :
    print("Can not output solution\n")
    

2.牛顿切线


# -*- coding: utf-8 -*-

import math

maxn = 9999

def f(x) :
    return math.exp(x) - 3


def f_(x) :
    return math.exp(x)


x = -2

for i in range(maxn) :
    
    temp = f(x)
    
    if (temp > 0 and temp <= 1e-10) or (temp < 0 and temp >= -1e-10) :
        break
    
    x = x - f(x) / f_(x)
       
print("f(%.5lf) = %.3lf\n" %(x, f(x) ) )

3.弦截


# -*- coding: utf-8 -*-

import math

maxn = 9999

def f(x) :
    return x**3 - 0.2 * x**2 - 1.2


def Y(x, a, b) :
    
    temp = f(b)
    return ((temp - f(a)) / (b - a)) * (x - b) + temp


def f_(x) :
    return 3 * x**2 - 0.4 * x

      
a = 1.0
b = 1.5
mid = (a + b) / 2

if (f_(a) > 0 and Y(mid, a, b) > f(mid)) or (f_(a) < 0 and Y(mid, a, b) < f(mid)) :
    
    for i in range(maxn) :
        
        temp = f(a)
        
        if (math.fabs(temp) <= 1e-5) :
            break
        
        a = a - (a - b) * temp / (temp - f(b))
        
    ans = a
    
else :
    
    for i in range(maxn) :
        
        temp = f(b)
        
        if (math.fabs(temp) <= 1e-5) :
            break
        
        b = b - (b - a) * temp / (temp - f(a))
        
    ans = b
    
print("f(%.5lf) = %.3lf\n" %(ans, math.fabs(f(ans)) ) )

 

基于51单片机,实现对直流电机的调速、测速以及正反转控制。项目包含完整的仿真文件、源程序、原理图和PCB设计文件,适合学习和实践51单片机在电机控制方面的应用。 功能特点 调速控制:通过按键调整PWM占空比,实现电机的速度调节。 测速功能:采用霍尔传感器非接触式测速,实时显示电机转速。 正反转控制:通过按键切换电机的正转和反转状态。 LCD显示:使用LCD1602液晶显示屏,显示当前的转速和PWM占空比。 硬件组成 主控制器:STC89C51/52单片机(与AT89S51/52、AT89C51/52通用)。 测速传感器:霍尔传感器,用于非接触式测速。 显示模块:LCD1602液晶显示屏,显示转速和占空比。 电机驱动:采用双H桥电路,控制电机的正反转和调速。 软件设计 编程语言:C语言。 开发环境:Keil uVision。 仿真工具:Proteus。 使用说明 液晶屏显示: 第一行显示电机转速(单位:转/分)。 第二行显示PWM占空比(0~100%)。 按键功能: 1键:加速键,短按占空比加1,长按连续加。 2键:减速键,短按占空比减1,长按连续减。 3键:反转切换键,按下后电机反转。 4键:正转切换键,按下后电机正转。 5键:开始暂停键,按一下开始,再按一下暂停。 注意事项 磁铁和霍尔元件的距离应保持在2mm左右,过近可能会在电机转动时碰到霍尔元件,过远则可能导致霍尔元件无检测到磁铁。 资源文件 仿真文件:Proteus仿真文件,用于模拟电机控制系统的运行。 源程序:Keil uVision项目文件,包含完整的C语言源代码。 原理图:电路设计原理图,详细展示了各模块的连接方式。 PCB设计:PCB布局文件,可用于实际电路板的制作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

水能zai舟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值