线性方程组的数值解法及其应用 下载本文

内容发布更新时间 : 2024/5/19 2:35:03星期一 下面是文章的全部内容请认真阅读。

线性方程组的数值解法及其应用

一、问题描述

现实中的问题大多数是连续的,例如工程中求解结构受力后的变形,空气动力学中计算机翼周围的流场,气象预报中计算大气的流动。这些现象大多是用若干个微分方程描述。用数值方法求解微分方程(组),不论是差分方法还是有限元方法, 通常都是通过对微分方程(连续的问题, 未知数的维数是无限的)进行离散,得到线性方程组(离散问题, 因为未知数的维数是有限的)。因此线性方程组的求解在科学与工程中的应用非常广泛。

经典的求解线性方程组的方法一般分为两类:直接法和迭代法。

二、基本要求

1)掌握用MATLAB软件求线性方程初值问题数值解的方法;

2)通过实例学习用线性方程组模型解决简化的实际问题;

3)了解用高斯赛德尔列主元消去法和雅可比迭代法解线性方程组。

三、测试数据

1) 直接法:A=[0.002 52.88;4.573 -7.290];

b=[52.90;38.44];

2) 迭代法:A=[10 -1 -2;-1 10 -2;-1 -1 5];

b=[7.2;8.3;4.2];

四、算法程序及结果

1)

function[RA,RB,n,x]=liezy1(A,b)

B=[A b];n=length(b);RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0,

disp('因为RA~=RB,所以此方程组无解.') return end if RA==RB if RA==n

disp('因为RA=RB=n,所以此方程组有唯一解.') x=zeros(n,1);C=zeros(1,n+1);

1

for p=1:n-1

[Y,j]=max(abs(B(p:n,p)));C=B(p,:); B(p,:)=B(j+p-1,:);B(j+p-1,:)=C; for k=p+1:n

m=B(k,p)/B(p,p);

B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end end

b=B(1:n,n+1);A=B(1:n,1:n);x(n)=b(n)/A(n,n); for q=n-1:-1:1

x(q)=(b(q)-sum(A(q,q+1:n)*x(q+1:n)))/A(q,q); end else

disp('因为RA=RB

测试:

A=[0.002 52.88;4.573 -7.290]; >> b=[52.90;38.44]; >> [RA,RB,n,x]=liezy1(A,b) 因为RA=RB=n,所以此方程组有唯一解. RA =

2

RB = 2 n = 2

x =

10.0000

1.0000

2

2)

function Jacobi(A,b,x0,P,error,max1) [n n]=size(A);

x=zeros(n,1); for k=1:max1

for j=1;n

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

errx=norm(x-x0,P); x0=x;x1=A\\b; if(errx

disp('迭代次数k,精确解x1和近似解x分别是:') k x1 x

return end end

if(errx>=error)

disp('请注意:Jacobi迭代次数已经超过最大迭代次数max1.') end 测试:

A=[10 -1 -2;-1 10 -2;-1 -1 5]; >>b=[7.2;8.3;4.2]; >>x0=[0;0;0];

>>Jacobi(A,b,x0,inf,0.001,100) n = 3 x =

0.7200 0 0

迭代次数k,精确解x1和近似解x分别是: k =

2

3

x1 =

1.1000 1.2000 1.3000 x =

0.7200 0 0

五、应用举例

1)营养学家配制一种具有1200卡,30g蛋白质及300mg维生素C的配餐。有3种食物可供选用:果冻、鲜鱼和牛肉。它们有下列每盎司(28.35g)的营养含量表 热量(卡) 蛋白质 维生素C 果冻 20 1 30 鲜鱼 100 3 20 牛肉 200 2 10 计算所需果冻、鲜鱼、牛肉的数量。 设果冻、鲜鱼、牛肉的数量为x1,x2,x3则 20x1+100x2+200x3=1200 x1+3x2+2x3=30 30x1+20x2+10x3=300

2)交通流量问题

下图给出了某城市部分单行街道的交通流量(每小时通过的车辆数)

4