MATLAB数值分析实验三(线性方程求解及精度分析)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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) %从条件数就可以猜出其实微小变化就会对结果造成很大差异 %结果也验证了条件数大的方程的不稳定性很差。