Promble1
求出 f(x)=3x2−ex=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
]
上存在的根。
建立迭代方程
对于式
(1.2)
(
1.2
)
分析其在区间[-1,0]之间迭代的收敛性。
|g′(x)| | g ′ ( x ) | 在区间[-1,0]上是递增的,则 |g′(x)|≤|g′(1)|<12<1 | g ′ ( x ) | ≤ | g ′ ( 1 ) | < 1 2 < 1 ,于是是满足收敛性。
由于要求 −1≤g(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′(−1)=−2<−1 g ′ ( − 1 ) = − 2 < − 1 。
Step2 S t e p 2