x0=x;
x=feval(f,x0);
k=k+1;
end
x0=x;
ifk==N
end
解:
a、g(x)=x5-3x3-2x2+2
二分法求方程:
(1)、在matlab的命令窗口中输入命令:
>>fplot('[x^5-3*x^3-2*x^2+2]',[-3,3]);grid
得下图:
由上图可得知:
方程在[-3,3]区间有根。
(2)、二分法输出结果
>>f='x^5-3*x^3-2*x^2+2'
f=
x^5-3*x^3-2*x^2+2
>>bisect(f,-3,3,20,10^(-12))
2.0000-3.00000-1.50000.0313
3.0000-3.0000-1.5000-2.2500-31.6182
4.0000-2.2500-1.5000-1.8750-8.4301
5.0000-1.8750-1.5000-1.6875-2.9632
6.0000-1.6875-1.5000-1.5938-1.2181
7.0000-1.5938-1.5000-1.5469-0.5382
8.0000-1.5469-1.5000-1.5234-0.2405
9.0000-1.5234-1.5000-1.5117-0.1015
10.0000-1.5117-1.5000-1.5059-0.0343
11.0000-1.5059-1.5000-1.5029-0.0014
12.0000-1.5029-1.5000-1.50150.0150
13.0000-1.5029-1.5015-1.50220.0068
14.0000-1.5029-1.5022-1.50260.0027
15.0000-1.5029-1.5026-1.50270.0007
16.0000-1.5029-1.5027-1.5028-0.0003
17.0000-1.5028-1.5027-1.50280.0002
18.0000-1.5028-1.5028-1.5028-0.0001
19.0000-1.5028-1.5028-1.50280.0001
20.0000-1.5028-1.5028-1.5028-0.0000
2、迭代法求方程:
迭代法输出结果:
>>f=inline('x^5-3*x^3-2*x^2+2');
>>[x0,k]=iterate(fun1,2)
x0=
2
k=
1
>>[x0,k]=iterate(fun1,1.5)
x0=
NaN
k=
6
>>[x0,k]=iterate(fun1,2.5)
x0=
NaN
k=
5
(3)、误差分析:
由二分法和迭代法输出结果可知,通过定点迭代法得出方程的解误差比二分法大,而利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。
b、g(x)=cos(sin(x))
二分法求方程:
(1)、在matlab的命令窗口中输入命令:
>>fplot('[cos(sin(x))]',[-4,4]);grid
得下图:
由上图可得知:
方程在[-4,4]区间无根。
(2)、二分法输出结果
>>f='cos(sin(x))'
f=
cos(sin(x))
>>bisect(f,-4,4,20,10^(-12))
2.000004.00002.00000.6143
3.00002.00004.00003.00000.9901
4.00003.00004.00003.50000.9391
5.00003.50004.00003.75000.8411
6.00003.75004.00003.87500.7842
7.00003.87504.00003.93750.7554
8.00003.93754.00003.96880.7412
9.00003.96884.00003.98440.7341
10.00003.98444.00003.99220.7305
11.00003.99224.00003.99610.7288
12.00003.99614.00003.99800.7279
13.00003.99804.00003.99900.7275
14.00003.99904.00003.99950.7273
15.00003.99954.00003.99980.7271
16.00003.99984.00003.99990.7271
17.00003.99994.00003.99990.7271
18.00003.99994.00004.00000.7270
19.00004.00004.00004.00000.7270
20.00004.00004.00004.00000.7270
2、迭代法求方程:
迭代法输出结果:
>>f=inline('cos(sin(x))');
>>[x0,k]=iterate(f,0.5)
x0=
0.7682
k=
15
>>[x0,k]=iterate(f,1)
x0=
0.7682
k=
15
>>[x0,k]=iterate(f,1.5)
x0=
0.7682
k=
16
>>[x0,k]=iterate(f,2)
x0=
0.7682
k=
15
>>[x0,k]=iterate(f,2.5)
x0=
0.7682
k=
14
(3)、由于该方程无解,所以无法比较误差。
c、g(x)=x2-sin(x+0.15)
二分法求方程:
(1)、在matlab的命令窗口中输入命令:
>>fplot('[x^2-sin(x+0.15)]',[-10,10]);grid
得下图:
由上图可得知:
方程在[-3,3]区间有根。
(2)、二分法输出结果
>>f='x^2-sin(x+0.15)'
f=
x^2-sin(x+0.15)
>>bisect(f,-3,3,30,10^(-12))
1.0000-3.00003.00000-0.1494
2.0000-3.00000-1.50003.2257
3.0000-1.50000-0.75001.1271
4.0000-0.75000-0.37500.3637
5.0000-0.37500-0.18750.0726
6.0000-0.18750-0.0938-0.0474
7.0000-0.1875-0.0938-0.14060.0104
8.0000-0.1406-0.0938-0.1172-0.0191
9.0000-0.1406-0.1172-0.1289-0.0045
10.0000-0.1406-0.1289-0.13480.0029
11.0000-0.1348-0.1289-0.1318-0.0008
12.0000-0.1348-0.1318-0.13330.0011
13.0000-0.1333-0.1318-0.13260.0001
14.0000-0.1326-0.1318-0.1322-0.0003
15.0000-0.1326-0.1322-0.1324-0.0001
16.0000-0.1326-0.1324-0.13250.0000
17.0000-0.1325-0.1324-0.1324-0.0000
18.0000-0.1325-0.1324-0.1325-0.0000
19.0000-0.1325-0.1325-0.13250.0000
20.0000-0.1325-0.1325-0.13250.0000
21.0000-0.1325-0.1325-0.13250.0000
22.0000-0.1325-0.1325-0.13250.0000
23.0000-0.1325-0.1325-0.1325-0.0000
24.0000-0.1325-0.1325-0.13250.0000
25.0000-0.1325-0.1325-0.1325-0.0000
26.0000-0.1325-0.1325-0.13250.0000
27.0000-0.1325-0.1325-0.13250.0000
28.0000-0.1325-0.1325-0.13250.0000
29.0000-0.1325-0.1325-0.13250.0000
30.0000-0.1325-0.1325-0.1325-0.0000
2、迭代法求方程:
迭代法输出结果:
>>f=inline('x^2-sin(x+0.15)');
>>[x0,k]=iterate(f,1.96)
x0=
NaN
k=
12
>>[x0,k]=iterate(f,0,2)
x0=
-0.1494
k=
1
>>[x0,k]=iterate(f,0.2)
x0=
0.3234
k=
500
>>[x0,k]=iterate(f,0.3)
x0=
0.3234
k=
500
>>[x0,k]=iterate(f,0.001)
x0=
0.3234
k=
500
(3)、误差分析:
由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。
d、g(x)=xx-cos(x)
二分法求方程:
(1)、在matlab的命令窗口中输入命令:
>>fplot('[x^(x-cos(x))]',[-1,1]);grid
得下图:
由上图可得知:
方程在[-1,1]区间有根。
(2)、二分法输出结果
>>f='x^(x-cos(x))'
f=
x^(x-cos(x))
>>bisect(f,-0.1,0.1,20,10^(-12))
1.0000-0.10000.10000Inf
2.0000-0.10000-0.0500-22.8740+3.5309i
3.0000-0.05000-0.0250-43.6821+3.3947i
4.0000-0.02500-0.0125-84.4110+3.2958i
1.0e+002*
0.0500-0.00010-0.0001-1.6511+0.0323i
1.0e+002*
0.0600-0.00010-0.0000-3.2580+0.0319i
1.0e+002*
0.0700-0.00000-0.0000-6.4648+0.0317i
1.0e+003*
0.0080-0.00000-0.0000-1.2872+0.0032i
1.0e+003*
0.0090-0.00000-0.0000-2.5679+0.0032i
1.0e+003*
0.0100-0.00000-0.0000-5.1285+0.0031i
1.0e+004*
0.0011-0.00000-0.0000-1.0249+0.0003i
1.0e+004*
0.0012-0.00000-0.0000-2.0490+0.0003i
1.0e+004*
0.0013-0.00000-0.0000-4.0971+0.0003i
1.0e+004*
0.0014-0.00000-0.0000-8.1931+0.0003i
1.0e+005*
0.0001-0.00000-0.0000-1.6385+0.0000i
1.0e+005*
0.0002-0.00000-0.0000-3.2769+0.0000i
1.0e+005*
0.0002-0.00000-0.0000-6.5537+0.0000i
1.0e+006*
0.0000-0.00000-0.0000-1.3107+0.0000i
1.0e+006*
0.0000-0.00000-0.0000-2.6215+0.0000i
1.0e+006*
0.0000-0.00000-0.0000-5.2429+0.0000i
2、迭代法求方程:
迭代法输出结果:
>>f=inline('x^2-sin(x+0.15)');
x0=
0.3234
k=
500
>>[x0,k]=iterate(f,0.01)
x0=
0.3234
k=
500
>>[x0,k]=iterate(f,0.81)
x0=
0.3234
k=
500
>>[x0,k]=iterate(f,0.61)
x0=
0.3234
k=
500
(3)、误差分析:
由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。