原理参考丁丽娟的《数值计算方法》P273-277

%非线性方程及非线性方程组的解法
%Newton method 牛顿法
%author LijiaYi(foddcus) FaFu university 2022.3
%email:foddcus@163.com
%输入:单未知数的多次方程组 如x^3-4x-3=0输入[1,0,-4,-3],
%errorA:误差允许范围 ,numF、numE:设定区间的点,max:最大迭代次数
%输出:关于解的表格,第一列为迭代次数,第二列为当前迭代解,第三列为当前带入迭代解的值
%注意,如果无法收敛导致迭代过长会报错;clear all
syms input_c(x)
input_c=sin(x)-x;
%input_c=[1,0,10,-20]
errorA=0.1*10^-5;
numF=0;
numE=1;
maxN=20;
stef=0; %用于加速的steffensen方法的开关,为1时使用该方法
method=3;%1为牛顿法默认公式,2、3,为适合有多重根的另外两种计算公式
%如果是模式2,还需要得知多重根的个数
%一般使用method2或3就与steffensen方法可能会产生冲突%function output=simpleIM(input,errorA,numF,numE,maxN)
syms f(x);%定义函数
syms f_1(x)
if string(class(input_c))=='double'%对其进行判断,double属性和syms定义的输入建立不同的方程。[~,Mnum]=size(input_c)y=input_c(1,1)*x^(Mnum-1);%构造函数for i= 2:Mnumy=input_c(1,i)*x^(Mnum-i)+y;endf(x)=y;
elseif string(class(input_c))=='sym'f(x)=input_c;
end
if f(numF)*f(numE)>0disp('可能有多重根')
end
%检查其中多重根个数,看单调性,若为多重根自动转模式3
f_1(x)=diff(f(x));
x=numF:(numE-numF)/100:numE;
rangY=double(f_1(x));
logicY=max(max(rangY))*min(min(rangY));
if logicY<0method=3
end%%syms Xm(x)
syms stefF(x)if method==1Xm(x)=x-f(x)/f_1(x);%经典牛顿法,适用于唯一根,否则迭代速度太慢
elseif method==2rValue=input('多重根的值')Xm(x)=x-rValue*f(x)/f_1(x);%已知多重根数量迭代公式
elseif method==3Xm(x)=x-f(x)*f_1(x)/((f_1(x))^2-f(x)*diff(f_1(x)));%未知多重根数量
end
stefF(x)=x-((Xm(x)-x)^2)/(Xm(Xm(x))-2*Xm(x)+x);
%%
Xn=(numF+numE)/2;
output(1,1:3)=[0,Xn,double(f(Xn))];
for i=1:maxNif stef==0Xn=Xm(Xn);elseif stef==1Xn=stefF(Xn);%steffensen方法endoutput(i+1,1:3)=[i,Xn,f(Xn)];if abs(output(i,2)-Xn)<errorAbreakend
end

输出解释:

matlab 牛顿法(Newton)与弦截法的迭代实现 解非线性方程相关推荐

  1. matlab二分法,单点弦截法,牛顿切线迭代法

    二分法 %p222task2_3 %二分法求f=@(x)1-x-sin(x)零点 clc,clear; f=@(x)1-x-sin(x) b=1;a=0; f(0) f(1) ezplot(f,[0, ...

  2. matlab求实根,用弦截法任意实数方程求实根 用matlab 语言编程

    由于y=0是一个没有意义的点,故从0.01开始. 输入: y=secant('0.15/y-y*sin(0.15^y)-1',0.01,5) 结果: y = 0.1369 其中secant.m内容为: ...

  3. 数值计算大作业:非线性方程求根(二分法、牛顿法、弦截法在Matlab实现)

    作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把二分法.牛顿法.弦截法求解非线性方程求根的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文章附录了,算法数学 ...

  4. 弦截法求方程根例题c语言,弦截法求方程根.ppt

    弦截法求方程根弦截法求方程弦截法求方程根弦截法求方程根 12 §3 迭代收敛的加速法 取g(x)=x3-1 , 则: 程序设计 function [f,k]= Steffensen(eps,x0) % ...

  5. MATLAB弦截法求解非线性方程

    MATLAB弦截法求解非线性方程 用Newton法解非线性方程时,当f比较复杂时就比较难以实现了,弦解法的好处可以用f(x)在两点上的值构造一次插值函数来回避微商的计算.其迭代格式: 1.弦截法的MA ...

  6. 用弦截法求方程的根matlab,matlab 语言 用弦截法任意实数方程求实根

    满意答案 dwgg2n0das8 2013.04.26 采纳率:45%    等级:12 已帮助:8202人 弦截法这个方法一般用作学习,实际用的很少.这里我提供一个较完整的弦截法求根的函数.func ...

  7. 牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数。若用差商代替导数,可得下列弦截法

    牛顿迭代法是一种速度很快的迭代方法,但是它需要预先求得导函数.若用差商代替导数,可得下列弦截法 这一迭代法需要两个初值,迭代过程和牛顿法类似,当时停止迭代.编写程序实现弦截法,要求输出方程的根.函数在 ...

  8. 单点、双点弦截法求解方程根

    弦截法: (a) 用牛顿法解方程f(x)=0,虽然在单根附近具有较快的收敛速度,但它有个明显的缺点,就是需要计算导数f'(x),当f(x)比较复杂时,计算f'(x)可能有困难. (b)弦截法和牛顿迭代 ...

  9. 弦截法c语言程序,高数介质定理——弦截法求根代码实践(C语言)

    在高等数学中,我们一开始接触概念时就接受了ε-δ(epsilon-delta)语言的洗礼,但即使到课程的结束,许多人依然会对各种抽象的数学符号.定理证明感到无所适从,我也不例外,尽管在写这篇博客以前已 ...

最新文章

  1. LeetCode 45. Jump Game II--Python解法--动态规划
  2. NLP领域最近比较火的Prompt,能否借鉴到多模态领域?一文跟进最新进展
  3. 多样性文本生成任务的研究进展
  4. (译文)在Ubuntu 14.04上成功运行ModelSim-Altera Starter Edition 10.1d
  5. 飞秋 一个程序员的老作品。
  6. python基础面试题1
  7. 语言设有某种十年期国债_孩子的语言敏感期,家长应该做些什么呢?
  8. 手把手教你用Java实现一个简易联网坦克对战小游戏
  9. 大规模图嵌入 示例_ICLR 2020 | 基于谱方法的高效多级图嵌入框架
  10. 【A little interesting】LeetCode 437. Path Sum III
  11. chrome 书签恢复_如何在Chrome和Firefox中恢复意外删除的书签
  12. 函数防抖(debounce)和节流(throttle)在H5编辑器项目中的应用
  13. git版本回退命令_刘先生
  14. python干货分享/网址总结
  15. 使用MPC设计控制器
  16. 分享2个在线图表制作工具
  17. NVCC Fatal
  18. 计算机网络实验1 网线、配线架与机柜
  19. Java多态的理解和应用
  20. Android 开启百度客户端的导航系统

热门文章

  1. Oracle 10G在fedora core4上的安装(转)
  2. 计蒜客 数独(简洁)
  3. 《人工智能导论》第二章:智能Agent(笔记一)
  4. Windows系统实现定时关闭、启动指定服务
  5. 以360家庭安全大脑为引擎,360IoT战略全景出炉
  6. 十分钟,快速理解JavaScript中的闭包概念
  7. 华为手机到底用了多少美国芯?
  8. 刮刮卡制作思路--canvas
  9. [Vue warn]: Error in mounted hook: “TypeError: handler.call is not a function“
  10. 震惊!马云再现神预言:疫情之后,最赚钱的不是股市,不是房地产,而是这个!...