牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

这篇具有很好参考价值的文章主要介绍了牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

必做题目比较简单,写得有些随意,主要还是第二个拓展题目的难度比较高

1.Newton迭代法解非线性方程

function [] = Newton_Die(x,tol,N)
f=cos(x)-x; %f(x)
df=-sin(x)-1; %f(x)的导数
for k=1:N
    x_old=x;
    x=x_old-f/df;
    f=cos(x)-x;   %更新f的值
    df=-sin(x)-1; %更新df的值
    fprintf('迭代次数=%d\tx=%.10f\n',k,x)
    if abs(x_old-x)<tol
        break
    end
    if k==N
        disp('达到最大迭代次数')
    end
end
end

2.Newton迭代法解非线性方程组

function [X] = Newton_Z(X,tol,N)
n = input('输入未知数的个数:');
syms x [1 n]  %创建n个未知数变量
ff=cell(n,1); %初始化f(xk)——带入Xk值之前为符号表达式——cell储存
F=zeros(n,1); %初始化f(xk)——带入Xk值之后为矩阵——数组储存
Jx=cell(n,n); %初始化J(xk)——带入Xk值之前为符号表达式——cell储存
J=zeros(n,n); %初始化J(xk)——带入Xk值之后为矩阵——数组储存
for i=1:n
    f=input('请输入方程:');
    ff{i,1}=f;
    for j=1:n
        Jx{i,j}=diff(f,x(j)); %求Jacobi矩阵
    end
end
Jx
for k=1:N %定义最大迭代次数
    X_old = X;
    for i=1:n
        ff_cpoy=ff{i,1};
        for u=1:n %求f(xk)的值
            if u~=n
                ff_cpoy=subs(ff_cpoy,x(u),X(u,1)); %对符号表达式逐个赋值
            else
                F(i,1)=vpa(subs(ff_cpoy,x(u),X(u,1)));%赋值完成后传给F
            end
        end
        for j=1:n
            Jx_copy=Jx{i,j};
            for v=1:n %求J(xk)的值
                if v~=n
                    Jx_copy=subs(Jx_copy,x(v),X(v,1));%对符号表达式逐个赋值
                else
                    J(i,j)=vpa(subs(Jx_copy,x(v),X(v,1)));%赋值完成后传给J
                end
            end
        end
    end
    X = X-J\F; %Newton迭代公式
    fprintf('迭代次数=%d  ',k)
    for i=1:n
        value=X(i,1);
        fprintf('x%d=%.8f ',i,value)
    end
    fprintf('\t')
    fprintf('精度:%.10f\n',norm(X_old-X, inf))
    if norm(X_old-X, inf)<tol %无穷范数定义终止条件
        break
    end
    if k==N
        disp('达到最大迭代次数')
    end
end

传入题设数据有:

>> Newton_Die(0.5,1e-5,100)
迭代次数=1	x=0.7552224171
迭代次数=2	x=0.7391416661
迭代次数=3	x=0.7390851339
迭代次数=4	x=0.7390851332
Newton_Z([1;1;1],1e-5,100)
输入未知数的个数:3
请输入方程:3*x1-cos(x2*x3)-0.5
请输入方程:x1^2-81*(x2+0.1)^2+sin(x3)+1.06
请输入方程:exp(-1*x1*x2)+20*x3+(10*pi-3)/3

Jx =

  3×3 cell 数组

    {[3              ]}    {[x3*sin(x2*x3)  ]}    {[x2*sin(x2*x3)]}
    {[2*x1           ]}    {[- 162*x2 - 81/5]}    {[cos(x3)      ]}
    {[-x2*exp(-x1*x2)]}    {[-x1*exp(-x1*x2)]}    {[20           ]}

迭代次数=1  x1=0.91968721 x2=0.46082246 x3=-0.50338764 	精度:1.5033876355
迭代次数=2  x1=0.50100049 x2=0.18743348 x3=-0.52086923 	精度:0.4186867278
迭代次数=3  x1=0.50054294 x2=0.06115345 x3=-0.52200096 	精度:0.1262800240
迭代次数=4  x1=0.50010444 x2=0.01161711 x3=-0.52329515 	精度:0.0495363479
迭代次数=5  x1=0.50000551 x2=0.00060562 x3=-0.52358294 	精度:0.0110114900
迭代次数=6  x1=0.50000002 x2=0.00000183 x3=-0.52359873 	精度:0.0006037894
迭代次数=7  x1=0.50000000 x2=0.00000000 x3=-0.52359878 	精度:0.0000018264

另附运行截图

牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现

 文章来源地址https://www.toymoban.com/news/detail-502113.html

到了这里,关于牛顿(Newton)迭代法求解非线性方程以及方程组的Matlab实现的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【数学】通俗理解泰勒公式(牛顿迭代法有用到)

    最近在看一些机器学习优化相关的方法(梯度下降、牛顿迭代等),里面又涉及到泰勒公式展开等,大学学的奈何都忘的差不多了,于是就看了一些博客,整理一下。 泰勒公式,也称泰勒展开式。是用一个函数在某点的信息,描述其附近取值的公式。如果函数足够平滑,在已

    2024年02月04日
    浏览(32)
  • 牛顿迭代法Python代码,全网最详细,教学向

                    代码功能包括函数图像展示,初始值选取收敛区间判断,迭代结果输出,迭代过程图像输出。         因讲解过于冗长,先将完整代码直接放在这里,只是想抄个模板方便修改的可以直接拿去用啦,有不了解的地方可以再翻下去看。 下面是纯新手向详细代

    2024年02月08日
    浏览(32)
  • C语言每日一练——第154天:牛顿迭代法求方程根

    🌟 前言 Wassup guys,我是Edison 😎 今天是C语言每日一练,第154天! Let’s get it! 编写用牛顿迭代法求方程根的函数。   方程为 a x 2 + b x 2 + c x + d = 0 ax^2+bx^2+cx+d=0 a x 2 + b x 2 + c x + d = 0 ,系数a,b,c,d 由主函数输入。   求 x x x 在 1 1 1 附近的一个实根。求出根后,由主函数输

    2024年01月23日
    浏览(35)
  • 【学习笔记】求解线性方程组的G-S迭代法

    matlab中调用上述函数结果显示: 哪里出问题了啊?

    2024年02月10日
    浏览(28)
  • 求解方程x^2=a的根,不使用库函数直接求解(不动点迭代法)

            首先可以将方程两边同时加上x, ,这时候两边同时再除以1+x,就得到了 ,变形为 。(变性后的 迭代式不唯一 ,这里随便选取一个)          当x是准确值的时候,两边应该是相等的,如果x是近似值,x误差很小很小,我们变可以认为x是可接受的近似解。 

    2024年02月15日
    浏览(40)
  • 非线性方程组——牛顿迭代求根

    三维曲面函数的参数方程 x(u,v),y(u,v) ,z(u,v),且曲面满足凸性质,u属于[0,1],v属于[0,1],则在xoy平面任给一点p,过点p做一条平行与z轴的直线,假如该直线与曲面相交与一点,求该点的u,v值。用c++程序编写该数学案例,考虑继承和多态,要求用户给定的曲面作为输入,输

    2023年04月17日
    浏览(35)
  • Matlab中求解线性方程组——高斯消元法、LU分解法、QR分解法、SVD分解法、迭代法等

    MATLAB迭代的三种方式以及相关案例举例 MATLAB矩阵的分解函数与案例举例 MATLAB当中线性方程组、不定方程组、奇异方程组、超定方程组的介绍 MATLAB语句实现方阵性质的验证 MATLAB绘图函数的相关介绍——海底测量、二维与三维图形绘制 MATLAB求函数极限的简单介绍 文章目录 前言

    2024年02月08日
    浏览(46)
  • 雅可比迭代和高斯—赛德尔迭代法

           对于线性方程组AX=b,我们首先将系数矩阵A分解为对角矩阵D、下三角矩阵L和上三角矩阵U:   在这里,我们求解下面的带状方程(以下程序均是以求解该带状方程为例): .............           高斯—赛德尔迭代法是再雅可比迭代法的基础上,在计算 时尽可能地用最

    2024年01月25日
    浏览(31)
  • 3.4 迭代法

        雅可比迭代法是一种用于求解线性方程组的迭代算法,其基本思想是将线性方程组中的系数矩阵拆分为对角线矩阵和非对角线矩阵两部分,并利用对角线矩阵的逆矩阵来迭代求解方程组。 具体地,设线性方程组为Ax=b,其中A为系数矩阵,b为常数向量,x为未知向量,雅可

    2024年02月08日
    浏览(33)
  • 松弛(SOR)迭代法

            松弛迭代法是在雅可比迭代法和高斯——赛德尔迭代法的基础上,以w0为松弛因子,建立迭代格式如下: 即         我们将线性方程组AX=b的系数矩阵A分解成一个对角矩阵D、一个下三角矩阵L和一个上三角矩阵D,即A=D-L-U,则有:                        当w=1时,

    2024年02月04日
    浏览(34)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包