[数值分析]不动点迭代法求解非线性方程

Promble1

求出 f(x)=3x2ex=0 f ( x ) = 3 x 2 − e x = 0 的根,精确到小数点后的第4位。


首先我们利用matlab绘图确定出根的大致区域。
这里写图片描述
由图可知存在三个有根区间 [1,0],[0,1],[3,4] [ − 1 , 0 ] , [ 0 , 1 ] , [ 3 , 4 ]


Step1 S t e p 1
利用不动点迭代法计算区间 [1,0] [ − 1 , 0 ] 上存在的根。

f(x)=3x2ex(1.1) (1.1) f ( x ) = 3 x 2 − e x

建立迭代方程
g(x)=±ex3(1.2) (1.2) g ( x ) = ± e x 3

g(x)=2lnx+ln3(1.3) (1.3) g ( x ) = 2 ln ⁡ x + ln ⁡ 3

对于式 (1.2) ( 1.2 ) 分析其在区间[-1,0]之间迭代的收敛性。

g(x)=36ex(1.4) (1.4) g ′ ( x ) = 3 6 e x

|g(x)| | g ′ ( x ) | 在区间[-1,0]上是递增的,则 |g(x)||g(1)|<12<1 | g ′ ( x ) | ≤ | g ′ ( 1 ) | < 1 2 < 1 ,于是是满足收敛性。
由于要求 1g(x)0 − 1 ≤ g ( x ) ≤ 0 ,于是取 g(x)=ex3 g ( x ) = − e x 3 。进行迭代得到 xk x k 序列。

代码

#include<bits/stdc++.h>
using namespace std;
double fun(double x) {
    return -sqrt(exp(x)/3.0);
}
int main()
{
    double l = 1,r = 0;
    int t = 0;
    while(fabs(r - l) >= 0.000001) {
        l = r;
        r = fun(r);
        printf("第%d次迭代:%.6f\n",++t,r);
    }
    return 0;
}

结果
这里写图片描述


然后我们考虑一下式子 (1.4) ( 1.4 ) 的收敛性。

g(x)=2x g ′ ( x ) = 2 x

显然不满足印内性,因为 g(1)=2<1 g ′ ( − 1 ) = − 2 < − 1


Step2 S t e p 2

  • 6
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值