计算方法实验报告

  • 格式:docx
  • 大小:89.84 KB
  • 文档页数:13

下载文档原格式

  / 13
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

计算方法实验报告(四)

(一)线性方程的迭代解法

一、实验问题

利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题5-1,5-2,5-3中的一题,并尽可能准确。

选取5-3:求x 3−x 2−1=0在x=1.5附近的根。

二、问题的分析(描述算法的步骤等)

(1)简单迭代法算法:

给定初始近似值p 0,求p =φ(p )的解。

Step 1 令i=0;

Step 2 令p i+1=φ(p i )(计算p i+1);

Step 3 如果p i+1=p i ,则迭代终止,否则重复Step 2。

(2)Aitken 加速法算法

Step 1 令k=0,利用简单迭代算法x k+1=φ(x k )得到迭代序列x k ;

Step 2 令x k ∗=x k -(x k −x k−1)2

x k −2x k−1+x k−2(计算x k ∗得到一个新的序列x k ∗,其中k=0,1,2…);

Step 3 如果x k+1∗=x k ∗,则迭代终止,否则重复Step 2。

(3)插值加速法算法

Step 1 令k=0,利用简单迭代算法x k+1=φ(x k )得到迭代序列x k ;

Step 2 令x k ∗=x k +(x k −x k−1)(x k −x k+1)

x k−1−2x k +x k+1(计算x k ∗得到一个新的序列x k ∗,其中k=1,2

,3…);

Step 3 如果x k+1∗=x k ∗,则迭代终止,否则重复Step 2。

(4)牛顿法算法

Step 1给定初始近似值x 0;

Step 2令x k+1=x k −f (x k

)f (x k ),其中k ∈N,计算得到x k 的 序列;

Step 3如果x k+1=x k ,则迭代终止,否则重复Step 2。

(5)改进牛顿法的算法

Step 1给定初始近似值x 0;

Step 2令x k+1=x k −k ′(k )′(k )√′2(k )"(k )(k ) ,其中

k ∈N,

迭代计算得到x k 的 序列;

Step 3如果x k+1=x k ,则迭代终止,否则重复Step 2。

(6)弦割法算法(双点弦割法)

Step 1给定初始近似值x 0,x 1;

Step 2令x k+1=x k −f (x k )(x k −x k−1)

f (x k )−f (x k−1)其中k ∈N,计算得到x k 的 序列;

Step 3如果x k+1=x k ,则迭代终止,否则重复Step 2。

三、程序设计

(1)简单迭代法

利用迭代公式x =√1+x 23进行迭代运算。

#include

#include

#include

double fun(double x)

{

double c=1+x*x;

return pow(c,1/3.0);

}

void main()

{

double x=1.5;

double y=0;

double D=1;

double e=0.001;

while(D>e)

{

D=0;

y=fun(x);

if(fabs(y-x)>=D)

{

D=fabs(y-x);

}

x=y;

}

cout<

}

(2) )Aitken加速法源程序如下:

x1=1.5;

eps=0.0001;

y1=(1+x1^2)^(1/3);

z1=(1+y1^2)^(1/3);

x=z1-(z1-y1)^2/(z1-2*y1+x1);

while eps

x=x2;

x1=y1;

y1=(1+x1^2)^(1/3);

z1=(1+y1^2)^(1/3);

x2=z1-(z1-y1)^2/(z1-2*y1+x1); n=n+1;

end

fprintf('迭代次数 n=%.0f\n',n);

fprintf('x2=%.5f\n',x2)

(3)插值加速法源程序如下:

x1=0;

x2=1.5;

eps=0.0000001;

y1=0;

z1=0;

n=0;

while eps

x1=x2;

y1=(1+x1^2)^(1/3);

z1=(1+y1^2)^(1/3);

x2=z1+(z1-y1)^2/(z1-2*y1+x1); n=n+1;

end

fprintf('迭代次数 n=%.0f\n',n);

fprintf('x2=%.5f\n',x2)

(4)牛顿法:

进行迭代运算

利用公式x k+1=x k−f(x k)

f(x k)

程序设计如下:

#include

#include

double fun(double x)

{

double a=2*pow(x,3.0)-pow(x,2.0)+1;

double b=3*pow(x,2.0)-2*x;

return a/b;

}

void main()

{

double x=1.5;

double y=0;

double D=1;

double e=0.001;

double f=0;

while(D>e)

{

D=0;

y=fun(x);

if(fabs(y-x)>=D)

{

D=fabs(y-x);

}

x=y;

f++;

}

cout<