MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根
MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根
作者:凯鲁嘎吉 - 博客园
http://www.cnblogs.com/kailugaji/
一、实验原理

二、实验步骤


三、实验过程
1.(程序)
(1)二分法:求
在区间(1,2)之间的根,取
(a)bipart.m:
function [x,m]=bipart(fun,a0,b0,tol)
a=a0;b=b0;
m=1+round(round(log((b-a)/tol))/log(2));
for k=1:m
p=(a+b)/2;
if fun(p)*fun(b)<0
a=p;
else
b=p;
end
x=p;
end
(b)fun1.m:
function f=fun1(x)
f=x^3+10*x-20;
(2)不动点迭代法:求方程
在
附近的根,取
(a)budong.m:
function [x,k]=budong(fun,x0,tol,m)
for k=1:m
x=fun(x0);
if abs(x-x0)<tol
break;
end
x0=x;
end
x=vpa(x,8);
(b)fun.m
function t=fun(x1)
syms x;
f=x^3-2*x-5;
s=subs(diff(f,x),x,x1);
x=x1;
f=x^3-2*x-5;
t=x-f/s;
(3)牛顿迭代法:求方程
在
附近的根,取
newton.m:
function x1=newton(t1,esp,m)
syms x;
fun=x^3+2*x-5;
for k=1:m
if abs(subs(diff(fun,'x'),x,t1))<esp
x1=t1;
break;
else
if subs(diff(fun,'x',2),x,t1)==0
break;
disp('解题失败!')
else
t0=t1;
t1=t0-subs(fun,x,t0)/subs(diff(fun,'x'),x,t0);
if abs(t1-t0)<esp
x1=t1;
break;
end
end
end
end
x1=vpa(x1,8);
2.(运算结果)
(1)二分法:
>> [x,m]=bipart(@fun1,1,2,0.0001)
x =
1.5945
m =
14
(2)不动点迭代法:
>> [x,k]=budong(@fun,2,1e-5,100)
x =
2.0945515
k =
4
(3)牛顿迭代法:
>> x1=newton(2,1e-4,20)
x1 =
1.3282689
3.(拓展(方法改进、体会等))
对于方程的根为重根的情形,newton法求重根只是线性收敛,迭代缓慢,如果对于求重根的情形,对newton法进行改进,取
,
则
。用迭代法

求m重根,则具有二阶收敛性,但要知道的重数m。
计算方程
的根
是二重根,用newton法与改进方法求根。
源程序:
newton_biroot.m:
function t=newton_biroot(x1) syms x; f=x^4-4*(x^2)+4; s=subs(diff(f,x),x,x1); x=x1; f=x^4-4*(x^2)+4; t=x-f/s;
biroot1.m:
function t=biroot1(x1) syms x; f=x^4-4*(x^2)+4; s=subs(diff(f,x),x,x1); x=x1; f=x^4-4*(x^2)+4; t=x-2*f/s;
budong.m:
function [x,k]=budong(fun,x0,tol,m)
for k=1:m
x=fun(x0);
if abs(x-x0)<tol
break;
end
x0=x;
x=vpa(x,8)
end
x=vpa(x,8);
运行结果:取初值为2
|
k |
xk |
newton法 |
改进方法 |
|
1 |
x1 |
1.75 |
1.5 |
|
2 |
x2 |
1.5982143 |
1.4166667 |
|
3 |
x3 |
1.5115099 |
1.4142157 |
|
4 |
x4 |
1.4644275 |
1.4142157 |
计算4步,改进方法就已经收敛,而newton法只是线性收敛,要达到同样精度需迭代17次。
附结果:
>> [x,k]=budong(@biroot1,2,1e-5,3)
x =
1.5
x =
1.4166667
x =
1.4142157
x =
1.4142157
k =
3
>> [x,k]=budong(@biroot1,2,1e-5,10)
x =
1.5
x =
1.4166667
x =
1.4142157
x =
1.4142136
k =
4
>> [x,k]=budong(@newton_biroot,2,1e-5,50)
x =
1.75
x =
1.5982143
x =
1.5115099
x =
1.4644275
x =
1.439751
x =
1.4270955
x =
1.4206836
x =
1.4174559
x =
1.4158366
x =
1.4150256
x =
1.4146197
x =
1.4144166
x =
1.4143151
x =
1.4142643
x =
1.414239
x =
1.4142263
x =
1.4142199
k =
17
MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根的更多相关文章
- 七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 【转】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
http://blog.csdn.net/xw20084898/article/details/17564957 一.工具:VC+OpenCV 二.语言:C++ 三.原理 otsu法(最大类间方差法, ...
- 牛顿迭代法(Newton's method)
关键词:牛顿法.牛顿迭代法.牛顿切线法.牛顿-拉弗森方法 参考:牛顿迭代法-百度百科.牛顿切线法-百度文库数学学院.牛顿切线法数值分析.非线性方程(组)的数值解法.Latex入门 https://bl ...
- matlab运行出现“变量似乎会随着迭代次数改变而变化,请预分配内存,以提高运行速度”问题
这句话大致意思就是: b = 0;for i = 1:3 a(i) = b;end是说变量的长度是变化的,经常在循环里出现,比如上面这个例子,这样会影响计算速度,最好的办法是预先定义a的长度,比 ...
- 【图像算法】七种常见阈值分割代码(Otsu、最大熵、迭代法、自适应阀值、手动、迭代法、基本全局阈值法)
图像算法:图像阈值分割 SkySeraph Dec 21st 2010 HQU Email:zgzhaobo@gmail.com QQ:452728574 Latest Modified Da ...
- 【清橙A1094】【牛顿迭代法】牛顿迭代法求方程的根
问题描述 给定三次函数f(x)=ax3+bx2+cx+d的4个系数a,b,c,d,以及一个数z,请用牛顿迭代法求出函数f(x)=0在z附近的根,并给出迭代所需要次数. 牛顿迭代法的原理如下(参考下图) ...
- matlab练习程序(对应点集配准的四元数法)
这个算是ICP算法中的一个关键步骤,单独拿出来看一下. 算法流程如下: 1.首先得到同名点集P和X. 2.计算P和X的均值up和ux. 3.由P和X构造协方差矩阵sigma. 4.由协方差矩阵sigm ...
- 牛顿迭代,多项式求逆,除法,开方,exp,ln,求幂
牛顿迭代 若 \[G(F_0(x))\equiv 0(mod\ x^{2^t})\] 牛顿迭代 \[F(x)\equiv F_0(x)-\frac{G(F_0(x))}{G'(F_0(x))}(mod ...
- C语言之基本算法25—牛顿迭代法求方程近似根
//牛顿迭代法! /* ============================================================ 题目:用牛顿迭代法求解3*x*x*x-2*x*x-16 ...
随机推荐
- SSH, 整合分页功能,连带DAO经典封装
任何一个封装讲究的是,使用,多状态.Action: 任何一个Action继承分页有关参数类PageManage,自然考虑的到分页效果,我们必须定义下几个分页的参数.并根据这个参数进行查值. 然 ...
- 无法启动MYSQL服务”1067 进程意外终止”解决的方法
自己一開始依照百度经验里的方法——<MySQL下载安装.配置与使用(win7x64)>去安装和配置,可是到后面步骤总是出现1067代号的错误. 慢慢折腾去解决. 这里汇总各种导致mysql ...
- [Luogu 3787] 冰精冻西瓜
Description 琪露诺是拥有操纵冷气程度的能力的妖精,一天她发现了一片西瓜地.这里有n个西瓜,由n-1条西瓜蔓连接,形成一个有根树,琪露诺想要把它们冷冻起来慢慢吃. 这些西瓜蔓具有神奇的性质, ...
- [转]npm、 cnpm、yarn
本文转自:https://blog.csdn.net/sinat_34682450/article/details/79473658 终于搞懂了三者之间的关系- 要知道三者之间的关系首先要了解三个包管 ...
- ef学习一
学习内容:https://www.cnblogs.com/5ishare/p/5801229.html 注意点: 1.NuGet程序包引入ef,使用DbSet<>必须引入ef.本例EFCo ...
- LeetCode子域名访问计数-Python3.7<五>
上一篇:LeetCode 键盘行<四> 题目:https://leetcode-cn.com/problems/subdomain-visit-count/description/ 一个网 ...
- [PHP] 数据结构-线性表的顺序存储结构PHP实现
1.PHP中的数组实际上是有序映射,可以当成数组,列表,散列表,字典,集合,栈,队列,不是固定的长度2.数组定义中多个单元都使用了同一个键名,则只使用了最后一个,之前的都被覆盖了3.想要函数的一个参数 ...
- [android] 手机卫士欢迎细节和主界面
splash界面的细节 ctrl + O 搜索 在去标题的时候,对话框主题被去掉了,有点丑,现在既要有新版本的对话框又不显示标题 把清单文件中activity节点的主题去掉 进入到applicatio ...
- 快速排序 java详解
1.快速排序简介: 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此 ...
- Cylinder Candy(积分)
Cylinder Candy Time Limit: 2 Seconds Memory Limit: 65536 KB Special Judge Edward the confectioner is ...