我是靠谱客的博主 忧心帽子,这篇文章主要介绍牛顿迭代法-matlab实现,现在分享给大家,希望可以做个参考。

牛顿迭代法-matlab实现

牛顿迭代法简介:

牛顿迭代法又称为切线法,简单来说就是不断求切线与x轴的交点,来逐渐接近解的迭代过程。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。具体迭代的方法可以看度娘的解释,或者相关的教材。今天来介绍下简单的matlab的实现。

代码实现:

使用了三个.m文件来实现,分别是原函数(需要迭代的函数)文件、牛顿迭代函数文件、和实现的主文件。

1.原函数的输入:

复制代码
1
2
3
4
5
function y = newton(x) y = exp(-x/4)*(2-x)-1;%任意函数 end %function的自定义函数用来保存咱们要进行牛顿迭代的函数

2.牛顿迭代函数:

复制代码
1
2
把你要进行牛顿迭代的函数进行变化,变成牛顿迭代函数。先要了解牛顿迭代函数的基本格式,

牛顿迭代公式:

复制代码
1
2
3
**???? (????) = ???? − ???? ???? ????′**

代码:`

复制代码
1
2
3
4
5
6
7
function y = newton1(x) syms a; f = a - (newton(a)./diff(newton(a))); y = subs(f,x);%牛顿迭代公式 end %如果直接用y和x来实现的话,在掉用原函数的时候就算出了具体数值,公式中的求导就会变为0, 无法求解,所以先用f,a来代替y和x,最后再进行替换,实现牛顿迭代公式。

3.主程序(进行牛顿迭代)

代码:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
x = input('x=');%开始迭代最初的x eps = input('eps=');%定义所要求解的精度 syms x1;%定义两Xk+1和Xk的差,一次来限制精度的要求 x1=100; syms xa; xa=x; syms xb;%记录上一个x和下一个x while x1>eps xb = xa; xa = newton1(xb); x1 = abs(xa-xb);%得到▲x end disp('该函数符合规定精度的解是:'); double(xa) xa即为所求的值

总结:

代码用来限制精度的方面只是简单的用前后两次的x进行做差来限制,还有很多不足,有时候是不成立的,像这两次的x误差很小,但是第三个x的时候开始发散,那xa所求的就不是正确答案,牛顿迭代法也有很多的限制,例如开始迭代的x如果取得不好也无法实现迭代过程,求最开始的迭代x值,可以结合二分法迭代来解决,进一步缩小有根区间,在进行牛顿迭代,代码可能还有很多不足和错误,欢迎大家指正。

最后

以上就是忧心帽子最近收集整理的关于牛顿迭代法-matlab实现的全部内容,更多相关牛顿迭代法-matlab实现内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部