数值积分与线性方程组的解法

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

华北科技学院上机报告

系(部)建筑工程学院

专业、班级测绘B112 姓名学号 201105064226

课程名称数值分析

上机题目数值积分与线性方程组的解法

任课教师李慧

指导教师李慧

成绩(优、良、中、及格、不及格)

华北科技学院基础部

一.实验目的:

1)熟悉求解线性方程组以及数值积分的有关理论和方法;

2)会编制列主元消去法、LU分解法、平方根法、追赶法以及雅可比迭代和高斯-塞德尔迭代法的程序;

3)通过实际计算,进一步了解各种方法的优缺点,选择合适的数值方法,体会各种方法的精确度。

二.实验内容:

1.数值积分

梯形公式、辛普森公式、复化求积公式;

2.线性方程组求解

(1)高斯消去法、追赶法;

(2)雅可比迭代法、高斯塞德尔迭代法。

三、实验步骤与分析

1.数值积分的几种方法:

题目:已知积分精确值I=4.006994,分别用复化题型公式和复化辛普森公式计算其值。

I=⎰02)

+dx

1x

exp(

(1).复化梯形公式

代码:

function I=trapez_v(f,h)

I=h*(sum(f)-(f(1)+f(length(f)))/2);

功能:复化求积公式进行函数积分

调用格式:I=trapez_v(f,h)

%f:等距节点上的函数值序列

%h:步长

程序如下:

clear

lexact=4.006994;

a=0;b=2;

fprintf('\n Extended Trapezoidal Rule\n');

fprintf(' n I Error\n');

n=1;

for k=1:6,n=2 * n;

h=(b-a)/n;i=1:n+1;

x=a+(i-1)*h; f=sqrt(1+exp(x));

I=trapez_v(f,h);

I=h*(sum(f)-(f(1)+f(length(f)))/2);

fprintf('%3.0f %10.5f %10.5f\n',n,I,Iexact-I);

end

结果:

Extended Trapezoidal Rule

n I Error

2 4.08358 -0.07659

4 4.02619 -0.01919

8 4.01180 -0.00480

16 4.00819 -0.00120

32 4.00729 -0.00030

64 4.00707 -0.00008

(2).复化辛普森公式

代码:

M文件:

function I=Simps_v(f,h)

n=length(f)-1;

if n==1,...

fprintf('Data has only one interval'),return; end

if n==2,...

I=h/3*(f(1)+4*f(2)+f(3));

return;end

I=0;

if n==3,...

I=3/8*h*(f(1)+3*f(2)+3*f(3)+f(4));

return;end

I=0;

if 2*floor(n/2)~=n,

I=3/8 * h * (f(n-2)+3*f(n-1)+3*f(n)+f(n+1));

m=n-3;

else

m=n;

end

I=I+(h/3)*(f(1)+4*sum(f(2:2:m))+f(m+1));

if m>2,I=I+(h/3)*2*sum(f(3:2:m));

end

function I=Simps_n(f_name,a,b,n)

h=(b-a)/n;

x=a+(0:n)*h;

f=feval(f_name,x);

I=Simps_v(f,h)

调用格式为: I=Simps_n('f_name',0,2,20)

结果为:

I=

4.0070

2.线性方程组的数值解法

(1)高斯消去法

题目:⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎦

⎤⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎣⎡-2313122434024121 ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡4321x x x x =⎥

⎥⎥⎥⎦

⎤⎢⎢⎢⎢⎣⎡6202813 代码:

M 文件:

function x = gauss(A, b)

n = length(b);

for k = 1 : n-1

if A(k,k)==0

fprintf('Error: the %dth pivot element equal to zero!\n',k); return;

end

index = [k+1:n];

m = -A(index,k)/A(k,k);

A(index,index) = A(index,index) + m*A(k,index);

b(index) = b(index) + m*b(k);

end

x = zeros(n,1);

x(n) = b(n)/A(n,n);

for i = n-1:-1:1

x(i) = ( b(i) - A(i,[i+1:n])*x([i+1:n]) )/A(i,i);

end

在Command Window 输入

>>A=[1 2 1 4;

2 0 4 3;

4 2 2 1;

-3 1 3 2];

b=[13,28,20,6]'

b =

13

28

20

6

相关文档
最新文档