MATLAB数值分析实验三(线性方程求解及精度分析)

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

佛山科学技术学院

实 验 报 告

课程名称 数值分析

实验项目 数值积分

专业班级 机械工程 姓 名 余红杰 学 号 2111505010 指导教师 陈剑 成 绩 日 期 月 日

一、实验目的

1、 掌握程序的录入和matlab 的使用和操作;

2、 了解影响线性方程组解的精度的因素——方法与问题的性态。

3、 学会Matlab 提供的“\”的求解线性方程组。

二、实验要求

1、按照题目要求完成实验内容;

2、写出相应的Matlab 程序;

3、给出实验结果(可以用表格展示实验结果);

4、分析和讨论实验结果并提出可能的优化实验。

5、写出实验报告。

三、实验步骤

1、用LU 分解及列主元高斯消去法解线性方程组

a)⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.2310

7104321x x x x , 输出b Ax =中系数LU A =分解的矩阵L 和U ,解向量x 和)det(A ;用列主元法的行交换次序解向量x 和求)det(A ;比较两种方法所得结果。

2、用列主高斯消元法解线性方程组b Ax =。

(1)、⎪⎪⎪⎭

⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427

.199.103.601.3321x x x

(2)、⎪⎪⎪⎭

⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4990.023.116.427

.199.103.600.3321x x x 分别输出)det(,,A b A ,解向量x ,(1)中A 的条件数。分析比较(1)、(2)的计算结果

3、线性方程组b Ax =的A 和b 分别为

⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=1095791068565778710A ,⎪⎪⎪⎪⎪⎭

⎫ ⎝⎛=31332332b 则解T x ),1,1,1,1(=. 用MATLAB 内部函数求)det(A 和A 的所有特征值和2)(A cond . 若令

⎪⎪⎪⎪⎪⎭

⎫ ⎝⎛=+98.99599.6989.998.585604.508.72.71.8710A A δ, 求解b x x A A =++))((δδ,输出向量x δ和2x δ,从理论结果和实际计算两方面分析线性

方程组b Ax =解的相对误差22/x x

δ以及A 的相对误差

/A A δ的关系。

四、实验结果

1:

%run311.m

clc,clear;

A = [10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];

b = [8;5.90001;5;1];

%L U 分解

format short

%小数点后四位,不然会受到后面的影响

[L U] = lu(A)

%解方程组,输出A ,det(A)

y = L\b;

format long

%小数点后15位显示

x = U\y

%V ol_xiao.m列主元消去,未用增广矩阵而把系数矩阵A和矩阵B分开对应来的function x=V ol_xiao(A,b)

%列主元消去

%x为解

%A为系数矩阵

n =length(A);

%A默认为方阵,求其大小,且默认和b长度一样

C =zeros(1,n);

%用于系数矩阵交换存放数据

b0 =0;

%用于b矩阵交换存放数据

x =zeros(n,1);

%建一个矩阵存放解

%下面对矩阵进行n-1次列主元交换得到上三角矩阵

for i=1:(n-1)

for j=(i+1):n

if abs(A(i,i))

C =A(i,1:n);

A(i,1:n)=A(j,1:n);

A(j,1:n)=C;

b0 = b(i);

b(i) =b(j);

b(j) =b0;

else continue;

end

end;

for j=(i+1):n

b(j) = b(j) + b(i)*(-A(j,i))/A(i,i);

A(j,1:n)=A(j,1:n)+A(i,1:n).*(-A(j,i)/A(i,i));

end

end

%以下为判断是否满秩然后从下往上求解:

if A(n,n)~=0

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

for i=(n-1):-1:1

sum = 0;

for j=(i+1):n

sum = sum + A(i,j)*x(j);

end

x(i) = (b(i)-sum)/A(i,i);

end

else x = ['err'];

end

%run312.m

clc,clear;

A = [10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];

b = [8;5.90001;5;1];

format long

x=V ol_xiao(A,b)

(其实可以看出,两种结果是一致的)

2.

%run321.m

clc;clear;

A = [3.01 6.03 1.99;1.27 4.16 -1.23;0.987 -4.81 9.34];

b = [1;1;1];

format bank

%格式转换为普通的,不然会用科学计数法表示

x = Vol_xiao(A,b)

T1 = cond(A,1)

T2 = cond(A,2)

T3 = cond(A,inf)

%可以看出条件数很大

%run322.m

clc;clear;

A = [3.01 6.03 1.99;1.27 4.16 -1.23;0.990 -4.81 9.34]

b = [1;1;1]

det1 = det(A)

format bank

x = Vol_xiao(A,b)

%从条件数就可以猜出其实微小变化就会对结果造成很大差异

%结果也验证了条件数大的方程的不稳定性很差。

相关文档
最新文档