数值分析实验报告(实验五实验六).docVIP

  • 4
  • 0
  • 约5.2千字
  • 约 12页
  • 2024-02-01 发布于湖北
  • 举报

PAGE

PAGE7

《数值分析》

实验报告

姓名:

学号:

专业:

年级:

实验五

一、实验名称

方程求根

二、实验目的与要求:

通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点;

比较二者的计算速度和计算精度。

三、实验内容:

通过对二分法和牛顿迭代法作编程练习和上机运算,进一步体会它们在方程求根中的不同特点。

(一)二分法

算法:给定区间[a,b],并设与符号相反,取为根的容许误差,为的容许误差。

(1)令c=(a+b)/2

(2)如果(c-a)或,则输出,结束;否则执行(3)

(3)如果,则令;否则则令,重复(1),(2),(3)。

(二)牛顿迭代法:给定初值,为根的容许误差,为的容许误差,N为迭代次数的容许值。

(1)如果=0或迭代次数大于N,则算法失败,结束;否则执行(2)。

(2)计算=-

(3)若或,则输出,程序结束;否则执行(4)。

(4)令=,转向(1)。

四、实验题目:

1、用二分法求方程f(x)=x^3+4*x*x-10在区间[1,1.5]上的根,要求求出具有3位有效数的近似根。

2、用牛顿法求方程x^3-3x-1=0在x=2附近的根

五、程序设计

1、二分法

#includestdio.h

#includemath.h

doublef(doublex)

{

returnx*x*x+4*x*x-10;

}

intmain()

{

doublea=0,b=0,e=0.0005;

printf(输入ab:);

scanf(%lf%lf,a,b);

if(fabs(f(a))=e)

{

printf(结果为:%0.3f/n,a);

}

elseif(fabs(f(b))=e)

{

printf(结果为:%0.3f/n,b);

}

elseif(f(a)*f(b)0)

{

printf(f(%lf)*f(%lf)0不是=0!/n,a,b);

}

else

{while(fabs(b-a)e)

{doublec=(a+b)/2.0;

if(f(a)*f(c)0)

b=c;

else

a=c;}

printf(结果为:%0.3f/n,(a+b)/2.0);}

return0;

}

2、牛顿迭代法

#includestdio.h

#includemath.h

#defineF(x)x*x*x-3*x-1

#defineK(x)3*x*x-3

voidmain()

{

doublex1,x2,f,k;

x1=2;

f=F(x1);

k=K(x1);

x2=x1-f/k;

while((x1-x2)0.0005)

{

x1=x2;

f=F(x1);

k=K(x1);

x2=x1-f/k;

}

printf(x=%2.5f,x2);

}六、计算结果

1、二分法

2、牛顿迭代法

实验六

一、实验名称

线性方程组数值解法

二、实验目的与要求:

熟悉求解线性方程组的有关理论和方法;

会编制列主元消去法、LU分解法、雅可比及高斯—塞德尔迭代法德程序;

通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

三、实验内容:

会编制列主元消去法、LU分解法、雅可比及高斯—塞德尔迭代法德程序,进一步了解各种方法的优缺点。

四、实验题目:

1.用列主元消去法解方程组

2.用LU分解法求解方程组Ax=b

A=,b=

3.用雅可比迭代法解方程组

4.用高斯-塞尔德迭代法解方程组

五、程序设计

1、列主消元法解方程

#includestdio.h

#includestdlib.h

#includeconio.h

#includemath.h

#definen3

#defineprecision1e-16

Staticdoubleaa[n][n+1]={{0.101,2.304,3.555,1.183},

{-1.347,3.712,4.623,2.137},

{-2.835,1.072,5.643,3.035}};

intGaussh(doublea[][n+2],doublex[n+

文档评论(0)

1亿VIP精品文档

相关文档