视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
二分法、简单迭代法的matlab代码实现
2025-09-26 11:04:09 责编:小OO
文档
实验一 非线性方程的数值解法(一)

信息与计算科学金融 崔振威 201002034031

一、实验目的:

熟悉二分法和简单迭代法的算法实现。

二、实验内容:

教材P40 2.1.5

三、实验要求

1 根据实验内容编写二分法和简单迭代法的算法实现

2 简单比较分析两种算法的误差

3 试构造不同的迭代格式,分析比较其收敛性

(一)、二分法程序:

function ef=bisect(fx,xa,xb,n,delta)

% fx是由方程转化的关于x的函数,有fx=0。

% xa 解区间上限

% xb 解区间下限

% n 最多循环步数,防止死循环。

%delta 为允许误差

x=xa;fa=eval(fx);

x=xb;fb=eval(fx);

disp('   [   n        xa          xb          xc        fc  ]');

for i=1:n

end

(二)、简单迭代法程序:

function [x0,k]=iterate (f,x0,eps,N)

if nargin<4

N=500;

end

if nargin<3

ep=1e-12;

end

x=x0;

x0=x+2*eps;

k=0;

while abs(x-x0)>eps & kx0=x;

x=feval(f,x0);

k=k+1;

end

x0=x;

if k==N

end

解:a、g(x)=x5-3x3-2x2+2

二分法求方程:

  (1)、 在matlab的命令窗口中输入命令:

 得下图:

 

由上图可得知:方程在[-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.0000         0   -1.5000    0.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.5015    0.0150

   13.0000   -1.5029   -1.5015   -1.5022    0.0068

   14.0000   -1.5029   -1.5022   -1.5026    0.0027

   15.0000   -1.5029   -1.5026   -1.5027    0.0007

   16.0000   -1.5029   -1.5027   -1.5028   -0.0003

   17.0000   -1.5028   -1.5027   -1.5028    0.0002

   18.0000   -1.5028   -1.5028   -1.5028   -0.0001

   19.0000   -1.5028   -1.5028   -1.5028    0.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 =

k =

>> [x0,k]=iterate(fun1,1.5)

x0 =

k =

>> [x0,k]=iterate(fun1,2.5)

x0 =

k =

(3)、误差分析:由二分法和迭代法输出结果可知,通过定点迭代法得出方程的解误差比二分法大,而利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。

b、g(x)=cos(sin(x))

二分法求方程:

  (1)、 在matlab的命令窗口中输入命令:

 得下图:

 

由上图可得知:方程在[-4,4]区间无根。

(2)、二分法输出结果

>>f='cos(sin(x))'

f =

cos(sin(x))

>> bisect(f,-4,4,20,10^(-12))

    2.0000         0    4.0000    2.0000    0.6143

    3.0000    2.0000    4.0000    3.0000    0.9901

    4.0000    3.0000    4.0000    3.5000    0.9391

    5.0000    3.5000    4.0000    3.7500    0.8411

    6.0000    3.7500    4.0000    3.8750    0.7842

    7.0000    3.8750    4.0000    3.9375    0.7554

    8.0000    3.9375    4.0000    3.9688    0.7412

    9.0000    3.9688    4.0000    3.9844    0.7341

   10.0000    3.9844    4.0000    3.9922    0.7305

   11.0000    3.9922    4.0000    3.9961    0.7288

   12.0000    3.9961    4.0000    3.9980    0.7279

   13.0000    3.9980    4.0000    3.9990    0.7275

   14.0000    3.9990    4.0000    3.9995    0.7273

   15.0000    3.9995    4.0000    3.9998    0.7271

   16.0000    3.9998    4.0000    3.9999    0.7271

   17.0000    3.9999    4.0000    3.9999    0.7271

   18.0000    3.9999    4.0000    4.0000    0.7270

   19.0000    4.0000    4.0000    4.0000    0.7270

   20.0000    4.0000    4.0000    4.0000    0.7270

2、迭代法求方程:

迭代法输出结果:

>> f=inline('cos(sin(x))');

>> [x0,k]=iterate(f,0.5)

x0 =

k =

>> [x0,k]=iterate(f,1)

x0 =

k =

>> [x0,k]=iterate(f,1.5)

x0 =

k =

>> [x0,k]=iterate(f,2)

x0 =

k =

>> [x0,k]=iterate(f,2.5)

x0 =

k =

14

(3)、由于该方程无解,所以无法比较误差。

c、g(x)=x2-sin(x+0.15)

二分法求方程:

  (1)、 在matlab的命令窗口中输入命令:

 得下图:

 

由上图可得知:方程在[-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.0000    3.0000         0   -0.1494

    2.0000   -3.0000         0   -1.5000    3.2257

    3.0000   -1.5000         0   -0.7500    1.1271

    4.0000   -0.7500         0   -0.3750    0.3637

    5.0000   -0.3750         0   -0.1875    0.0726

    6.0000   -0.1875         0   -0.0938   -0.0474

    7.0000   -0.1875   -0.0938   -0.1406    0.0104

    8.0000   -0.1406   -0.0938   -0.1172   -0.0191

    9.0000   -0.1406   -0.1172   -0.12   -0.0045

   10.0000   -0.1406   -0.12   -0.1348    0.0029

   11.0000   -0.1348   -0.12   -0.1318   -0.0008

   12.0000   -0.1348   -0.1318   -0.1333    0.0011

   13.0000   -0.1333   -0.1318   -0.1326    0.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.1325    0.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.1325    0.0000

   20.0000   -0.1325   -0.1325   -0.1325    0.0000

   21.0000   -0.1325   -0.1325   -0.1325    0.0000

   22.0000   -0.1325   -0.1325   -0.1325    0.0000

   23.0000   -0.1325   -0.1325   -0.1325   -0.0000

   24.0000   -0.1325   -0.1325   -0.1325    0.0000

   25.0000   -0.1325   -0.1325   -0.1325   -0.0000

   26.0000   -0.1325   -0.1325   -0.1325    0.0000

   27.0000   -0.1325   -0.1325   -0.1325    0.0000

   28.0000   -0.1325   -0.1325   -0.1325    0.0000

   29.0000   -0.1325   -0.1325   -0.1325    0.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 =

k =

>> [x0,k]=iterate(f,0,2)

x0 =

k =

>> [x0,k]=iterate(f,0.2)

x0 =

k =

>> [x0,k]=iterate(f,0.3)

x0 =

k =

>> [x0,k]=iterate(f,0.001)

x0 =

k =

(3)、误差分析:由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。

d、g(x)=xx-cos(x)

二分法求方程:

  (1)、 在matlab的命令窗口中输入命令:

 得下图:

 

由上图可得知:方程在[-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.1000    0.1000         0       Inf

   2.0000            -0.1000                  0            -0.0500           -22.8740 + 3.5309i

   3.0000            -0.0500                  0            -0.0250           -43.6821 + 3.3947i

   4.0000            -0.0250                  0            -0.0125           -84.4110 + 3.2958i

  1.0e+002 *

   0.0500            -0.0001                  0            -0.0001            -1.6511 + 0.0323i

  1.0e+002 *

   0.0600            -0.0001                  0            -0.0000            -3.2580 + 0.0319i

  1.0e+002 *

   0.0700            -0.0000                  0            -0.0000            -6.48 + 0.0317i

  1.0e+003 *

   0.0080            -0.0000                  0            -0.0000            -1.2872 + 0.0032i

  1.0e+003 *

   0.0090            -0.0000                  0            -0.0000            -2.5679 + 0.0032i

  1.0e+003 *

   0.0100            -0.0000                  0            -0.0000            -5.1285 + 0.0031i

  1.0e+004 *

   0.0011            -0.0000                  0            -0.0000            -1.0249 + 0.0003i

  1.0e+004 *

   0.0012            -0.0000                  0            -0.0000            -2.0490 + 0.0003i

  1.0e+004 *

   0.0013            -0.0000                  0            -0.0000            -4.0971 + 0.0003i

  1.0e+004 *

   0.0014            -0.0000                  0            -0.0000            -8.1931 + 0.0003i

  1.0e+005 *

   0.0001            -0.0000                  0            -0.0000            -1.6385 + 0.0000i

  1.0e+005 *

   0.0002            -0.0000                  0            -0.0000            -3.2769 + 0.0000i

  1.0e+005 *

   0.0002            -0.0000                  0            -0.0000            -6.5537 + 0.0000i

  1.0e+006 *

   0.0000            -0.0000                  0            -0.0000            -1.3107 + 0.0000i

  1.0e+006 *

   0.0000            -0.0000                  0            -0.0000            -2.6215 + 0.0000i

  1.0e+006 *

   0.0000            -0.0000                  0            -0.0000            -5.2429 + 0.0000i

2、迭代法求方程:

迭代法输出结果:

>> f=inline('x^2-sin(x+0.15)');

x0 =

k =

>> [x0,k]=iterate(f,0.01)

x0 =

k =

>> [x0,k]=iterate(f,0.81)

x0 =

k =

>> [x0,k]=iterate(f,0.61)

x0 =

k =

(3)、误差分析:由二分法和迭代法输出结果可知,利用二分法求出的结果中,可以清楚看出方程等于零时的解,其误差比迭代法小。下载本文

显示全文
专题