【数值计算方法】非线性方程(组)和最优化问题的计算方法:非线性方程式求根的二分法、迭代法、Newton 迭代法及其Python实现

目录

一、非线性方程式求根

1、二分法(Bisection Method、对分法)

a. 理论简介

b. python实现

2、迭代法(Iterative Method)

a. 理论简介

b. python实现

3、Newton 迭代法(Newton's Method)

a. 理论简介

b. python实现


一、非线性方程式求根

        非线性方程举例:

f(x)=0

5x^4+3x+1=0

        非线性方程式求根是一个重要的数值计算问题,常用的方法包括二分法、迭代法和牛顿迭代法。

1、二分法(Bisection Method、对分法)

a. 理论简介

(连续函数介值定理)

        二分法是一种简单而直观的求根方法,适用于单调函数的根。它的基本思想是通过不断缩小根所在区间来逼近根的位置。具体步骤如下:

  • 首先,选择一个初始区间[a, b],确保函数在这个区间内连续且函数值异号(即f(a) * f(b) < 0)。
  • 然后,计算区间的中点c = (a + b) / 2,并计算函数在c处的值f(c)。
  • 接下来,根据f(c)与0的关系,确定新的区间[a, c]或[c, b],使得新的区间内仍满足函数值异号的条件。
  • 重复上述步骤,直到满足预设的精度要求,即根的近似值落在所选区间内。

b. python实现

def f(x):return 5 * x**4 + 3 * x + 1def bisection_method(a, b, tolerance=1e-6, max_iterations=100):if f(a) * f(b) >= 0:return Nonefor _ in range(max_iterations):c = (a + b) / 2if abs(f(c)) < tolerance:return cif f(c) * f(a) < 0:b = celse:a = creturn None# 调用二分法求解方程的根
root = bisection_method(a=-1, b=0)
if root is not None:print("方程的一个根为:", root)
else:print("未找到方程的根")

注意,二分法要求初始区间[a, b]满足f(a) * f(b) < 0,即方程在区间的两个端点上取值异号。

输出:

a=-0.5, b=1
方程的一个根为: -0.36193275451660156
a=-1, b=0
未找到方程的根

2、迭代法(Iterative Method)

a. 理论简介

        迭代法是一种通过不断迭代逼近根的方法,适用于任意函数的根。它的基本思想是从一个初始的近似值开始,通过不断更新逼近根的位置,直到满足预设的精度要求。具体步骤如下:

  • 首先,选择一个初始的近似值x0。
  • 然后,根据迭代公式x[i+1] = g(x[i]),计算下一个近似值x[i+1]。
  • 重复上述步骤,直到满足预设的精度要求,即近似值与根的差值足够小。

b. python实现

def g(x):return (-1) / (5 * x**3 + 3)def iterative_method(initial_guess, tolerance=1e-6, max_iterations=100):x = initial_guessfor _ in range(max_iterations):x_next = g(x)if abs(x_next - x) < tolerance:return x_nextx = x_nextreturn None# 调用迭代法求解方程的根
root = iterative_method(initial_guess=0)
if root is not None:print("方程的一个根为:", root)
else:print("未找到方程的根")

注意,迭代法的收敛性与迭代函数的选择密切相关,对于某些函数可能无法收敛或者收敛速度很慢。

输出:

方程的一个根为: -0.36193292438672897

3、Newton 迭代法(Newton's Method)

a. 理论简介

        牛顿迭代法是一种快速收敛的求根方法,适用于光滑函数的根。它利用函数的局部线性近似来逼近根的位置。具体步骤如下:

  • 首先,选择一个初始的近似值x0。
  • 然后,根据牛顿迭代公式x[i+1] = x[i] - f(x[i]) / f'(x[i]),计算下一个近似值x[i+1]。
  • 重复上述步骤,直到满足预设的精度要求,即近似值与根的差值足够小。

b. python实现

def f(x):return 5 * x**4 + 3 * x + 1def f_prime(x):return 20 * x**3 + 3def newton_method(initial_guess, tolerance=1e-6, max_iterations=100):x = initial_guessfor _ in range(max_iterations):delta_x = f(x) / f_prime(x)x -= delta_xif abs(delta_x) < tolerance:return xreturn None# 调用牛顿迭代法求解方程的根
root = newton_method(initial_guess=0)
if root is not None:print("方程的一个根为:", root)print(int(f(root)))
else:print("未找到方程的根")

注意,牛顿法要求2阶导不编号,1阶导不为0

输出:

方程的一个根为: -0.3619330489831212

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/88639.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑入门:电脑不认新硬盘时该怎么办?

电脑不认新硬盘时该怎么办? 当新硬盘加进后,正常工作时,没有什么问题。若电脑遇到特殊情况时,电脑对新硬盘“不认”,可采取以下措施让电脑重新“认”新硬盘,显示新分区(如G、H、I、J)。 咱的目的是保持S-ATA的开启,把控制板载S-ATA设定值由No变成Yes就可以。 首…

【数据结构与算法】链表的实现以及一些基本算法

目录 单选链表的基本实现 有序列表的合并&#xff08;双指针法&#xff09; 链表的反转 链表实现两数之和 判定链表是否有环 单选链表的基本实现 public class LinkedList1 {//头节点Node first;//尾节点Node last;//大小int size 0;//头插法public void addFirst(int…

微信小程序学习笔记3.0

第3章 资讯类:仿今日头条微信小程序 3.1 需求描述及交互分析 需求描述 仿今日头条微信小程序,要具有以下功能。 (1)首页新闻频道框架设计,包括底部标签导航设计、新闻检索框设计及新闻频道滑动效果设计。 (2)首页新闻内容设计,包括新闻标题、新闻图片及新闻评论设计…

TikTok的媒体革命:新闻业如何适应短视频时代?

在数字时代&#xff0c;媒体行业一直在不断演变和创新&#xff0c;以适应观众的变化需求和技术的发展。而在这个进化的过程中&#xff0c;短视频应用TikTok已经崭露头角&#xff0c;成为了一个重要的信息传播平台。 这篇文章将深入探讨TikTok如何引领了媒体的一场革命&#xf…

转载-C#学习笔记-基本概念(CLR、CTS、CLS...)

1. CLR(Common Language Runtime&#xff0c;公共语言运行时(库)) 可由多种.NET语言使用的运行时环境&#xff0c;其主要作用是定位、加载和管理.NET类型、内存管理、安全检查、线程管理等。.NET运行库提供了一个定义明确的运行库层&#xff0c;可以被支持.NET的所有语言和平台…

2、Linux中静态IP与动态IP的修改

修改为静态IP 打开文件 sudo vim /etc/network/interfaces修改如下 # interfaces(5) file used by ifup(8) and ifdown(8) auto lo iface lo inet loopbackauto ens33#配置网络为DHCP模式 #iface ens33 inet dhcp#配置网络 ens33为静态IP模式 iface ens33 inet static #设置…

基于Vue+ELement搭建动态树与数据表格实现分页

基于VueELement搭建动态树与数据表格实现分页 一、前言二、左侧动态树实现2.1.后台数据接口定义2.2.前端导航菜单绑定2.3.根据数据渲染页面 3.分页 一、前言 在上一篇博文我们搭建了首页导航和左侧菜单&#xff0c;但是我们的左侧菜单是死数据今天我们就来把死的变成活的&#…

自学WEB后端01-安装Express+Node.js框架完成Hello World!

一、前言&#xff0c;网站开发扫盲知识 1.网站搭建开发包括什么&#xff1f; 前端 前端开发主要涉及用户界面&#xff08;UI&#xff09;和用户体验&#xff08;UX&#xff09;&#xff0c;负责实现网站的外观和交互逻辑。前端开发使用HTML、CSS和JavaScript等技术来构建网页…

Leetcode 386. 字典序排数

文章目录 题目代码&#xff08;9.22 首刷看解析&#xff09; 题目 Leetcode 386. 字典序排数 代码&#xff08;9.22 首刷看解析&#xff09; 迭代DFS class Solution { public:vector<int> lexicalOrder(int n) {vector<int> ret(n);int number 1;for(int i 0…

Flink--6、输出算子(连接到外部系统、文件、kafka、MySQL、自定义Sink)

星光下的赶路人star的个人主页 世间真正温煦的春色&#xff0c;都熨帖着大地&#xff0c;潜伏在深谷 文章目录 1、输出算子&#xff08;Sink&#xff09;1.1 连接到外部系统1.2 输出到文件1.3 输出到Kafka1.4 输出到MySQL&#xff08;JDBC&#xff09;1.4 自定义Sink输出 1、输…

【数学建模】2023华为杯研究生数学建模F题思路详解

强对流降水临近预报 我国地域辽阔&#xff0c;自然条件复杂&#xff0c;因此灾害性天气种类繁多&#xff0c;地区差异大。其中&#xff0c;雷雨大风、冰雹、龙卷、短时强降水等强对流天气是造成经济损失、危害生命安全最严重的一类灾害性天气[1]。以2022年为例&#xff0c;我国…

vue_Delete `␍`eslint(prettier/prettier)

Delete ␍eslint(prettier/prettier) 错误的解决方案 问题背景 在Windows笔记本上新拉完代码&#xff0c;在执行pre-commit时&#xff0c;出现如下错误&#xff1a; Delete ␍eslint(prettier/prettier)问题根源 罪魁祸首是git的一个配置属性&#xff1a;core.autocrlf 由于…

MATLAB实战 | 粮食储仓的通风控制问题

粮食储仓的通风控制问题 01、应用实战 【例1】粮食储仓的通风控制问题。在粮食储备中&#xff0c;合适的湿度是保证粮食质量的前提。一般来说&#xff0c;若粮食水分的吸收和蒸发量相等&#xff0c;这个湿度称为平衡点湿度。只有实际湿度处于平衡点湿度以下&#xff0c;粮食质…

CSS笔记——基本语法及相关知识

CSS层叠样式表是用于定义 HTML 或 XML 文档的样式和布局的语言。它可以让开发者更加灵活地控制页面元素的样式和排版&#xff0c;从而提高页面的可读性和用户体验 一、css样式书写顺序和规范 CSS样式的书写顺序和规范是为了让代码更易读、易维护和易扩展。下面是一些常见的规…

【空间-光谱联合注意网络:多时相遥感图像】

A Spatial–Spectral Joint Attention Network for Change Detection in Multispectral Imagery &#xff08;一种用于多光谱图像变化检测的空间-光谱联合注意网络&#xff09; 变化检测是通过比较双时相图像来确定和评估变化&#xff0c;这是遥感领域的一项具有挑战性的任务…

MySQL强制使用索引的两种方式及优化索引,使用MySQL存储过程创建测试数据。

一、MySQL强制使用索引的两种方式 1、使用 FORCE INDEX 语句&#xff1a; explainselect*fromtbl_test force index (index_item_code)where(item_code between 1 and 1000) and (random between 50000 and 1000000)order byrandomlimit 1; 使用 FORCE INDEX&#xff08;索引…

链表(单链表、双链表)

前言&#xff1a;链表是算法中比较难理解的部分&#xff0c;本博客记录单链表、双链表学习&#xff0c;理解节点和指针的使用&#xff0c;主要内容包括&#xff1a;使用python创建链表、实现链表常见的操作。 目录 单链表 双链表 单链表 引入链表的背景&#xff1a; 先来看…

使用ElementUI结合Vue完善主页的导航菜单和书籍管理以及后台数据分页查询

目录 动态树 数据表 案列 书籍管理 动态树 动态树&#xff08;Dynamic tree&#xff09;是一种数据结构&#xff0c;它可以在树中动态地插入、删除和修改节点。与静态树不同&#xff0c;静态树的节点是固定的&#xff0c;一旦构建完成就无法再进行修改。而动态树可以在运行时…

任意文件的上传和下载

1.任意文件下载&#xff08;高危&#xff09; 定义 一些网站由于业务需求&#xff0c;往往需要提供文件查看或文件下载功能&#xff0c;但若对用户查看或下载的文件不做限制&#xff0c;则恶意用户就能够查看或下载任意敏感文件&#xff0c;这就是文件查看与下载漏洞。 可以下载…

OpenCV显示10bit Raw数据

参考&#xff1a;10 12 14bit图像存储格式&#xff0c;利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现&#xff1a; #include<opencv2/opencv.hpp> #include<iostream> #include<opencv/highgu…