IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> 切线法(牛顿法)、割线法、抛物线法 -> 正文阅读

[C++知识库]切线法(牛顿法)、割线法、抛物线法

目录

一,牛顿法

二,牛顿法的局限性

三,牛顿下山法

四,割线法

五,抛物线法


一,牛顿法

牛顿法,也叫牛顿迭代法、切线法,是一种迭代求解函数零点的方法。

原理:

f(x)=f(x_0)+f'(x_0)(x-x_0)+o(x-x_0)^2

令f(x)=0则x=x_0 + \frac{o(x-x_0)^2-f(x_0)}{f'(x_0)}

x_1=x_0 - \frac{f(x_0)}{f'(x_0)},在一定的范围(x的足够小的邻域)内,x1比x0更接近所求的零点x

根据这个原理,不断的迭代,即可越来越接近x值。

double f(double x)
{
	return x * x + x * 5 - 8;
}
double df(double x)
{
	double eps = 0.001;
	return (f(x + eps) - f(x)) / eps;
}
double newton(double x)
{
	double eps = 0.000001;
	int times = 100;
	while (times--) {
		double x2 = x - f(x) / df(x);
		cout << x2 << "  ";
		if (abs(x - x2) < eps)return x2;
		x = x2;
	}
	return 0;
}

int main()
{
	double ans = newton(0);
	cout << endl << ans << "  " << f(ans);
	return 0;
}

输出:

1.59968 ?1.28782 ?1.27494 ?1.27492 ?1.27492
1.27492 ?3.2081e-12

可以看出收敛很快。

牛顿法开方:

double Sqrt(double x)
{
	double t = x / 2;
	x = 1;
	for (int i = 0; i < 100; i++)x = x / 2 + t / x;
	return x;
}

int main()
{
	cout << Sqrt(1000000);
	return 0;
}

输出1000

二,牛顿法的局限性

1,牛顿法对于初始值有要求,而且没有很简单的方法去判断一个邻域是否已经足够小。

2,序列{x0,x1,x2...}越来越接近x,单调有界必要极限,但是这个极限值是否一定是x,我个人不太确定,但是找到了一个课件中给出了答案:

牛顿法及其收敛性课件

结论是对于单根,|xi - x|平方收敛,但对于有重根的情况只是线性收敛。

如果知道是m重根,则可以改进公式为:

三,牛顿下山法

每取一个新值之前学习率设为1,每次取到新值之后,判断新的函数值是否更接近0,如果不是则降低学习率直到新的函数值更接近0。

在一定程度上降低对于初始值的范围要求。

double newton(double x)
{
	double eps = 0.000001;
	int times = 100;
	double learningRate = 1;
	while (times--) {
		double x2 = x - f(x) / df(x)*learningRate;
		cout << x2 << "  ";
		if (abs(x - x2) < eps)return x2;
		if (abs(f(x2)) < abs(f(x))) {
			x = x2, learningRate = 1;
		} else {
			learningRate /= 2;
		}
	}
	return 0;
}

四,割线法

在曲线上取AB两点,求切线AB和x轴的交点C,让BC取代AB进入下一轮迭代,直到两点间距达到精度要求。

收敛定理:

五,抛物线法

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-06-01 15:00:47  更:2022-06-01 15:01:54 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 17:10:21-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码