基于C++的非线性方程的解法研究及实现

本文探讨了非线性方程f(x) = x^2 - 2x的解法,包括二分法、试值法和不动点迭代法。通过C++编程实现,寻找该方程在[-1, 3]区间内精度为0.05以内的实根。三种方法均能得出近似根,其中不动点迭代法的g1只能找到根x = 0,而g2和g3能找出两个根x = 0和x = 2。" 78646429,5742274,Spring Boot整合MyBatis多数据源与分页插件配置实战,"['Spring Boot', 'MyBatis', '数据库配置', '分页', '多数据源管理']
摘要由CSDN通过智能技术生成

【基于C++的非线性方程的解法研究及实现】

【前言】

关于非线性方程f(x) = 0的根的解法目前分为三类,二分法,试值法和不动点迭代法

本文实例为寻找f(x) = x2 - 2x在区间[-1, 3]内精度在0.05以内的实根

代码中的set用于保存答案

【1.二分法】

二分法又称二分区间法,是求解非线性方程近似根的一种常用的简单方法。

在这里插入图片描述
算法:
在这里插入图片描述
【代码实现】

inline float f(float x) {
    return x * x - 2 * x; }
inline float binary_search(float l, float r, float k) {
   
	float left = l, right = r;
	while (true) {
   
		float x = (left + right) / 2;
		float fa = f(left), fx = f(x);
		if (fa * fx < 0) right = x;
		else left = x;
		if (abs(right - left) <= 2 * k) return x;
	}
}
inline void solve_division(float l, float r, float k) {
   
	set<float> ans;
	for (float i = l; i < r; i += k) {
     //将区间分为(r - l) / k个分别进行查找
		float fa = f(i), fb = f(i + k);
		if (fa == 0) ans.insert(i);
		else if (fb == 0) ans.insert(i + k);
		else if (fa * fb < 0)  ans.insert(binary_search(i, i + k, k));
	}
	cout << "The root of the equation is(division):" << endl;
	for (auto& it : ans) {
   
		printf("%.2f\n", it);
	}
}

【2.试值法】

在这里插入图片描述

该算法与二分法的不同点在于将二分法中x = (a + b) / 2换做如下操作

在这里插入图片描述

【代码实现】

inline float tryvalue_search(float l, float r, float k) {
   
	float left = l, right = r;
	while (true) {
   
		float x = right - (right - left) * f(right) / (f(right) - f(left));  // 不同点
		
  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当前非线性拟合和多元拟合的工具较少,这是针对常用的拟合算法,开发的一款数据拟合为主的软件。包括线性拟合的各种算法,非线性拟合的各种算法,以及多元拟合的各种算法。其中提供了很多非线性方程的模型,以满足不同的需求,也可以制定自己所需要的指定非线性方程模型的,采用最先进的初始值估算算法,无需初始值就可以拟合自己想要的非线性方程模型各个模块的介绍如下。 1.线性拟合算法模块 根据最小二乘拟合算法,对输入的数据进行变量指定次方的拟合。同时可对自变量或因变量进行自然对数和常用对数的转换后再拟合。根据实际情况,开发了单调性拟合以针对各种定量分析的用途。同时开发了,针对一组数据,得到最高相关系数的自动拟合功能,由程序自动选择拟合次数以及自变量和因变量的数据格式。 2.非线性拟合算法模块 根据非线性方程的特点,开发了最先进的智能初始值估算算法,配合LM迭代算法,进行非线性方程的拟合。只需要输入自变量和因变量,就可以拟合出所需要的非线性方程。拟合相关系数高,方便快捷。并借助微粒群算法,开发了基于微粒群的智能非线性拟合算法,拟合出方程的相关系数相当高,甚至会出现过拟合现象。 3.多元拟合算法模块 根据最小二乘算法的原理开发了多元线性拟合算法,同时开发了能够指定变元次数的高次多元线性拟合。由于多元变量的情况下函数关系复杂,采用高次多元线性拟合能有效提高拟合效果而不会出现过拟合现象。同时针对每个变元可能最合适的拟合次数不一定都一样,开发了自适应高次多元拟合算法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值