重根的二阶迭代法matlab,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
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)
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))
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)
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)
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,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...相关推荐
- matlab牛顿法求区间根程序,MATLAB用二分法、不动点迭代法及Newton迭代(切线)法求非线性方程的根...
一.实验原理 二.实验步骤 三.实验过程 1.(程序) (1)二分法:求 在区间(1,2)之间的根,取 (a)bipart.m: function [x,m]=bipart(fun,a0,b0,to ...
- python 拟牛顿法 求非线性方程_C语言实现迭代法求非线性方程的根
迭代法求非线性方程的根 迭代法是一种逐次逼近法.它是求解代数方程,超越方程及方程组的一种基本方法,但存在收敛性及收敛快慢的问题. 为了用迭代法求非线性方程f(x) = 0的近似根: 1.首先需要将此方 ...
- 【Python】Python用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根。提示:牛顿迭代法求非线性方程的根的迭代公式为x`(n+1)`=x`n`-f(x)/f'(x) 。
用牛顿迭代法求方程2x3-4x2+3x-6=0在1.5附近的根.提示:牛顿迭代法求非线性方程的根的迭代公式为x(n+1)=xn-f(x)/f'(x) . 算法源码 def f(x): ##原函数ret ...
- 用弦截法求方程的根matlab,matlab 语言 用弦截法任意实数方程求实根
满意答案 dwgg2n0das8 2013.04.26 采纳率:45% 等级:12 已帮助:8202人 弦截法这个方法一般用作学习,实际用的很少.这里我提供一个较完整的弦截法求根的函数.func ...
- 不动点迭代法matlab视频,不动点迭代法matlab
不动点迭代法的 MATLAB 程序代码如下: Function [root,n]=StablePoint(f,x0,eps) %用不动点迭代法求函数的一个零点 %初始迭代向量:x0 %根的精度:eps ...
- matlab编jacobi方法,jacobi迭代法matlab
h Matlab 线性方程组的迭代解法(Jacobi 迭代法 Gauss-Seidel 迭代法)实验报告 2008年11月09日 星期日 12:49 1.熟悉 Jacobi 迭代法,并编写 Matla ...
- 数值分析2-解非线性方程的不动点迭代法,斯蒂芬森(steffensen)迭代法,牛顿法以及简化牛顿法的matlab程序
对于形如f(x)=0的单变量非线性方程,可以构造不同的迭代函数进行迭代求根,以f(x)=x3-x-1为例,我们可以简单的通过等式变形构造出x=x3-1和x=(x+1)(1/3)两种等价形式:也可以自己 ...
- matlab求方程实根,matlab怎么求方程的根
MATLAB解方程_IT/计算机_专业资料.一般的代数方程函数solve用于求解一般代数方程的根,假定S为符 号表达式,命令solve (S)求解表达式等于0的根,也 可以再输入一个...... MA ...
- 单个方程的不动点迭代法
1. 不动点和不动点迭代法 设 f 是连续函数,为了解方程 把方程变换为等价的方程 其中φ 是连续函数.若x* 是f 的零点,即f(x*)=0 则有 x*称为函数φ 的一个不动点.构造的迭代法 这称为 ...
最新文章
- 第三章| 3.1文件处理
- Dora.Interception,为.NET Core度身打造的AOP框架 [1]:更加简练的编程体验
- 使用FFmpeg生成HLS
- linux常用命令解析
- artTemplate的使用总结
- mybatis一对一联表查询的两种常见方式
- linux c 文件拷贝函数,Linux C函数库参考手册
- Rosenbrock函数的梯度与海瑟矩阵
- 关于CSP-J/S2019准考证下载、考点查询等问题的说明
- 神舟计算机主板bios,最详细的各种主板bios设置方法
- python爬楼梯多少种_LeetCode70爬楼梯-Python3-两种方法实现
- 局域网互传文件工具_如何在 iOS、Android、macOS、Windows 之间快速文件互传?
- VMware无法启动虚拟机的解决办法
- AWS云迁移工具方法汇总
- 知物由学 | SO VMP 加壳与混淆,为移动应用提供函数级保护
- MySQL的数据类型 .
- android显示通知图标大全,Android应用开发之android 桌面APP应用图标显示通知消息的数量显示与去除...
- 【FAQ】软件保护系统Themida常见问题集锦(一)—Themida和WinLicense有什么区别?...
- js 回车与空格转义
- jmeter 聚合报告的吞吐量与常数吞吐量定时器吞吐量的关系
热门文章
- JZ18_二叉树的镜像
- C++11中的智能指针unique_ptr、shared_ptr和weak_ptr详解
- c++系列 —— 智能指针auto_ptr和unique_ptr
- 分治算法——快速幂(平方求幂)
- “信号声源定位实验”
- Flag Engine(动画系统)学习笔记(六)——动画片段
- matlab 自定义的snr,Matlab信号添加噪声及信噪比SNR的计算
- win2012R2安装KB2919355 补丁的问题
- Redis高可用之哨兵模式
- 腾讯云优惠券-腾讯云优惠券领取