5 matlab详解牛顿下山法求解复杂函数代数方程和超越方程

5.1 题目

 

5.2 问题背景

在工程和科学技术中,许多问题常归结为求解函数方程:

f(x) = 0

如何求方程 f(x) = 0 的根是一个古老的数学问题,5 次以上的代数方程和超越方程一般没有求根公式,很难或无法求得精确解,而实际应用中只要得到满足一定精确度的近似解就可以了。

牛顿(Newton)迭代法是最为著名的方程求根的数值方法,它的优点是收敛速度快。牛顿下山法 (Newton down-hill method) 是牛顿法的一种变形。Newton法的收敛性依赖于初始点的选取,如果偏离所求根较远,则Newton法可能会发散,Newton下山法它是为减弱牛顿法对初始近似值的限制而提出的一种算法。即牛顿法和下山法的综合运用。下山法即要求将每次迭代过程得到的值与其前一步进行绝对值的比较,确保每一次迭代后的近似值的绝对值小于前一项。

5.3 算法

5.4 matlab编程实现

主程序:

clear;

format long;

fun1=@(x)sqrt(x)-x^3+2;   %f(x)表达式

fun2=@(x)1/2/sqrt(x)-3*x^2;   %f(x)一阶导数表达式

% fun2='3*x^2-1';  %课本例题测试数据

x0=1;eps=0.00001; %迭代初值与允许误差

[x,k,z,fx]=newton(x0,fun1,fun2,eps)  %输出:x为零点近似值,k为终止时迭代次数,z矩阵存储迭代过程中的xfx为零点近似值的函数值

函数:

function [x2,k,z,fx]=newton(x0,fun1,fun2,eps)

%fun1是原函数,fun2是导函数,eps是允许误差,x0是迭代初始点, z矩阵存储迭代过程中的x fx为零点近似值的函数值

format long;

x=x0;i=0;k=1;

z=zeros(8,1);z(1)=x;

error=1;

while error>eps

    lamda=1;

    x2=x-lamda*fun1(x)/fun2(x);

    while abs(fun1(x2))>abs(fun1(x))  %试取适当下山因子以使得迭代法收敛

        lamda=lamda/2;

        x2=x-lamda*fun1(x)/fun2(x);

        i=i+1;

        if i>20

            disp('为了保证迭代法收敛,请更换初始值以满足单调性条件');

            break;

        end

    end

    error=abs(x2-x);

    z(k+1)=x2;  %z矩阵存储迭代过程中的xk

    x=x2;

    k=k+1;

end

fx=fun1(x)

end

5.5 结果展示

>> work5

x =

   1.475890462601969

k =

     5

z =

   1.000000000000000

   1.400000000000000

   1.480480469787711

   1.475905863685759

   1.475890462776181

   1.475890462601969

                   0

                   0

fx=

     0

5.6 讨论

(1) Newton下山法可以有效减弱牛顿法对初始近似值的限制,且收敛较快;

(2)本程序用数值解代入f(x)验证计算结果,结果显示误差极小;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Linhua090

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值