计算方法与实习的实验报告

更新时间:2023-11-26 13:15:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1舍入误差与数值稳定性

1.1目的与要求

(1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; (2)通过上机计算,了解舍入误差所引起的数值不稳定性。

1.2舍入误差和数值稳定性

1.2.1概要

舍入误差在计算方法中是一个很重要的概念。在实际计算中如果选用了不同的算法,由于舍入误差的影响,将会得到截然不同的结果。因此,选取稳定的算法在实际计算中是十分重要的。

1.2.2程序和实例

对n=0,1,2,…,40计算定积分

?1xnx?5n

0dx。

算法 利用递推公式 yn=ln6-ln5?0.182322。 程序如下: #include #include void main() {

double y_0=log(6.0/5.0),y_1; int n=1;

printf(\ while(1) {

y_1=1.0/n-5*y_0; printf(\ if(n>=40)break; y_0=y_1; n++; if(n%2==0)printf(\ } }

1n?5y(n=1,2,…,40) 取y0=

?11x?50dx=

2 方程求根

2.1实验目的

(1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点;

(2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法作比较。

2.2二分法

2.2.1算法

给定区间[a,b],并设f(a)与f(b)符号相反,取ε为根的容许误差,δ为|f(x)|的容许误差。 1令c=(a+b)/2;

2如果(c-a)<ε或|f(x)|<δ,则输出c,结束;否则执行3; 3如果f(a)f(c)>0,则令a=c;否则令b=c,重复1,2,3。 2.2.2程序与实例

求方程f(x)=x?4x?10?0在1.5附近的根。 程序如下:

#include #include #define eps 5e-6 #define delta 1e-6

float Bisection(float a,float b,float(*f)(float)) {

float c,fc,fa=(*f)(a),fb=(*f)(b); int n=1;

printf(\二分次数\\t\\tc\\t\\t f(c)\\n\ while(1) { if(fa*fb>0){printf(\不能用二分法求解\ c=(a+b)/2,fc=(*f)(c); printf(\ if(fabs(fc)

return c; }

float f(float x) {

return x*x*x+4*x*x-10;

32}

int main() {

float a=1,b=2; float x;

x=Bisection(a,b,f);

printf(\方程的根为%f\ return 0; }

3线性方程组数值解法

3.1目的与要求

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

(2)会编制列主元消去法、LU分解法、雅克比及高斯赛德尔迭代法的程序; (3)通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法。

3.3矩阵直接三角分解法

3.3.1算法

将方程组Ax=b中的A分解为A=LU,其中L为单位下三角矩阵,U为上三角矩阵,则方程组Ax=b化为解两个方程组Ly=b,Ux=y,具体算法如下。 1.对j=1,2,3,…,n计算

u1j?a1j

对i=2,3,…,n计算 2.对k=2,3,…,n:

li1?ai1a

11 a)对j=k,k+1,…,n计算

ukj?akj??lkquqi

q?1k?1 b)对i=k,k+1,…,n计算

lik?(aik??liquqk)q?1k?1ukqq

kk 3.y1=b1,对k=2,3,…,n计算

y?b??lynnq?1k?1

4.xn?yunnn, 对k=n-1,n-2,…,2,1计算

xk?(y?kq?k?1?ux)ukqqnkk

3.3.2程序和实例

2?1?54求解方程组Ax=b,其中 A=???34??6?12

程序如下:

#include void main() {

?1277?38??27?????24?,b=??

?11??2????3??49?

本文来源:https://www.bwwdw.com/article/8unt.html

Top