matlab线性方程组求解实验报告
MATLAB上机实验报告:MATLAB求解线性方程组和矩阵的初等计算
MATLAB上机实验报告:MATLAB求解线性方程组和矩阵的初等计算MATLAB上机实验报告:MATLAB求解线性方程组和矩阵的初等计算计算机语言类课程实验报告课程名称院系学号MATLAB语言及应用电气信息工程学院实验机房计算机公修实验室三班级机器号实验学时2实验成绩专业电气工程及其自动化姓名任课教师实验日期一.实验名称:MATLAB求解线性方程组和矩阵的初等计算二.实验目的和要求1、掌握利用MATLAB程序编辑器编写应用程序的方法;2、掌握MATLAB 求解线性方程组的方法;3、掌握MATLAB进行矩阵的初等计算的方法三.实验内容教材(《MATLAB及其在理工课程中的应用指南,陈怀琛,西安电子科技大学出版社》)P93-1,2四.实验设计方案(实验步骤或开发过程)1、设a矩阵为各个方程的变量的系数,s为各个变量的列向量,b为等式右边的自然数的列向量,利用s=a\\b,即可求出该方程组的解。
2、利用转置和乘法,以及元素乘法分别算出C1,C2,C3,再通过求逆矩阵inv()这个函数求出C1,C2,C3的逆矩阵。
五.实验中存在问题及解决办法在第一题中当使用右除时,运行出现错误,只有使用左除,这与矩阵除法的定义有关。
六.实验结果1、该方程组的解为:s=[-1.4841-0.68160.5337-1.2429]2、C1=[19-8230d1=[0.00620.0400-0.010612273-0.00460.01690.0030-385429]0.0 1680.02090.0150]C2=[-1516-2436d2=1.0e+015*63-1793-105[-0.9553-0.2391-0.19970.2700226117-600.96670.24200.2021-0.2732194684-10]-0.4473-0.112 0-0.09350.1264-1.1259-0.2818-0.23530.3182]C3=[51624-26d3=不能求C3的逆矩阵-18-12-1572-2-21108-56]七.附录(源程序清单)第一题:求该方程组的解20xx.09.17clcclearalla=[34-7-12;5-742;108-5;-65-210]b=[4;-3;9;-8]s=a\ \b第二题:求出C1,C2,C3,以及它们的逆矩阵d1,d2,d320xx.09.17clcclearallA=[14813;-36-5-9;2-7-12-8]B=[543-2;6-23-8;-13-97]C1=A*B”C2=A”*BC3=A.*Bd1=inv(C1)d2=inv(C2)[m,n]=size(C3);if m==nd3=inv(C3)elsedisp不能求C3的逆矩阵end扩展阅读:袁越强MATLAB上机实验报告一平顶山学院计算机语言类课程实验报告(一)课程名称院系学号实验日期MATLAB语言及应用电气信息工程学院实验机房专业电气工程及其自动化姓名任课教师王凯实验学时23305班级机器号实验成绩二班一.实验名称:MATLAB求解线性方程组和矩阵的初等计算二.实验目的和要求1、掌握利用MATLAB程序编辑器编写应用程序的方法;2、掌握MATLAB求解线性方程组的方法;3、掌握MATLAB进行矩阵的初等计算的方法三.实验内容1、求线性方程组的解3x4y7z12w45x7y4z2w3x8z5w96x5y2z10w8481315432,B6238,求C1=A*B’;C2=A’*B;C3=A.*B,并592、设A36271281397求它们的逆阵。
MATLAB实验一 解线性方程组的直接法
没有了?
将每种情形的两个结果进行表格对比,如: n=6 时: GAUSS 列主消去法求得的 x
x 的有效数字
四、实验结果
五、讨论分析 (对上述算例的计算结果进行比较分析, 主要说清 matlab 的算符与消去法的适 用范围不同,自己补充)
A(index,:) = A(k,:); A(k,:) = temp; temp = b(index);b(index) = b(k); b(k) = temp; %消元过程 for i=k+1:n m=A(i,k)/A(k,k); %消除列元素 A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n); b(i)=b(i)-m*b(k); end end %回代过程 x(n)=b(n)/A(n,n); for k=n-1:-1:1; x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k); end x=x'; end 然后调用 gaussMethod 函数,来实现列主元的高斯消去法。在命令框中输入 下列命令:
输出结果如下:
利用 LU 分解法及 matlab 程序源代码: function [L,U]=myLU(A) %实现对矩阵 A 的 LU 分解,L 为下三角矩阵 A[n,n]=size(A);
L=zeros(n,n); U=zeros(n,n); for i=1:n L(i,i)=1; end for k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j)'); end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)'))/U(k,k); end end 在命令框中输入下列命令:
用MATLAB解决线性代数问题实验报告
实验三使用MATLAB解决线性代数问题学院:数计学院班级:1003班姓名:黄晓丹学号:1051020144实验目的:学习MATLAB有关线性代数运算的指令,主要学习运用MATLAB解决矩阵除法,线性方程组的通解,矩阵相似对角化问题,以及解决投入产出分析等应用问题。
实验内容:矩阵转置:A=[1 2;3 4];B=[4 3;2 1];>> A',B'ans =1 32 4ans =4 33 1矩阵加减:A-Bans=-3 -11 3矩阵乘法:A*B,A.*B(数组乘法)||比较矩阵乘法与数组乘法的区别ans=8 520 13ans=4 66 4矩阵除法:A\B,B./Aans=-6 -55 4ans=4 1.50.6667 0.25特殊矩阵生成:zeros(m,n)||生成m行n列的矩阵ones(m,n)||生成m行n列的元素全为一的矩阵eye(n)||生成n阶单位矩阵rand(m,n)||生成m行n列[0 ,1]上均匀分布随机数矩阵zeros(2,3)ans =0 0 00 0 0>> ones(3,3)ans =1 1 11 1 11 1 1>> eye(3)ans =1 0 00 1 00 0 1>> rand(2,4)ans =Columns 1 through 30.9501 0.6068 0.89130.2311 0.4860 0.7621Column 40.45650.0185矩阵处理:trace(A)||返回矩阵的迹diag(A)||返回矩阵对角线元素构成的向量tril(A)||提取矩阵的下三角部分triu(A)||提取矩阵的上三角部分flipud(A)||矩阵上下翻转fliplr(A)||矩阵左右翻转reshape(A,m,n)||将矩阵的元素重排成m行n列矩阵A=[1 2 3;4 5 6;7 8 9];>> t=trace(A),d=diag(A),u=triu(A)t =15d =159u =1 2 30 5 60 0 9 flipud(A),fliplr(A)ans =7 8 94 5 61 2 3 ans =3 2 16 5 49 8 7矩阵特征值与标准型:[V,D]=eig(A)||返回矩阵特征值与特征向量[V J]=Jordan(A)||返回矩阵的相似变换矩阵和若尔当标准型A=[1 2;3 4];>> [V,D]=eig(A)V =-0.8246 -0.41600.5658 -0.9094D =-0.3723 00 5.3723>> [V,J]=jordan(A)V =0.2389 0.76110.5222 -0.5222J =5.3723 00 -0.3723线性方程组求解A=[1 2 1;3 -2 1];B=[1;4];x=A\B x =1.2500 ||求一特解-0.1250>> A=[1 2;3 -2;1 -1];B=[1;4;2];x=A\Bx = ||求得一最小二乘近似解1.2838-0.1757:方阵的相似对角化及应用:A=[1 1/4 0;0 1/2 0;0 1/4 1];[P,T]=eig(A) P =1.0000 0 -0.40820 0 0.81650 1.0000 -0.4082T =1.0000 0 00 1.0000 00 0 0.5000求得三个特征值1,1,0.5,对应特征向量(1,0,0),(0,0,1),(-0.4028,0.8165,-0.4082),由于三个特征向量线性无关,从而A 可相似对角化,即p-1AP=T.那么A∧n=p[1 0 0;0 1 0;0 0 0]p-1,计算的P*diag([1,1,0])*inv(P)ans =1.0000 0.50000 00 0 00 0.5000 1.0000所以得到近似解。
实验一用matlab求解线性方程组
实验1.1 用matlab 求解线性方程组第一节 线性方程组的求解 一、齐次方程组的求解rref (A ) %将矩阵A 化为阶梯形的最简式null (A ) %求满足AX =0的解空间的一组基,即齐次线性方程组的基础解系【例1】 求下列齐次线性方程组的一个基础解系,并写出通解:我们可以通过两种方法来解: 解法1:>> A=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2]; >> rref(A) 执行后可得结果: ans=1 -1 0 0 0 0 -1 1 0 0 0 0 由最简行阶梯型矩阵,得化简后的方程⎪⎩⎪⎨⎧=+--=+--=-+-02200432143214321x x x x x x x x x x x x取x2,x4为自由未知量,扩充方程组为即提取自由未知量系数形成的列向量为基础解系,记所以齐次方程组的通解为解法2: clearA=[1 -1 1 -1;1 -1 -1 1;1 -1 -2 2];B=null(A, 'r') % help null 看看加个‘r ’是什么作用,若去掉r ,是什么结果?执行后可得结果: B=1 0 1 0 0 1 0 1⎩⎨⎧=-=-004321x x x x ⎪⎪⎩⎪⎪⎨⎧====44432221x x x x x x x x ⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡+⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡11000011424321x x x x x x ,00111⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε,11002⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε2211εεk k x +=易见,可直接得基础解系所以齐次方程组的通解为二、非齐次线性方程组的求解 Matlab 命令的基本格式:X =A\b %系数阵A 满秩时,用左除法求线性方程组AX =b 的解注意:A/B 即为AB -1, 而A\B 即为A -1B.C =[A,b];D =rref(C) % 求线性方程组AX =b 的特解,即D 的最后一列元素【例2】 求下列非齐次线性方程组的解:,00111⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε,11002⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=ε⎪⎪⎪⎩⎪⎪⎪⎨⎧=+=++=++=++=+150650650651655454354332121x x x x x x x x x x x x x 2211εεk k x +=解: clearA=[5 6 0 0 0;1 5 6 0 0;0 1 5 6 0;0 0 1 5 6;0 0 0 1 5]; b=[1;0;0;0;1];format rational %采用有理数近似输出格式,比较format short 看看x=A\b执行后可得所求方程组的解. 作业:【第一题】 求下列非齐次线性方程组的通解.A=[1 2 3 1;1 4 6 2;2 9 8 3;3 7 7 2] B=[3;2;7;12] format rational x=A\B x =⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++=+++1227737389222643324321432143214321x x x x x x x x x x x x x x x x42/31/2684838239393950-7/3【第二题】计算工资问题一个木工,一个电工,一个油漆工,三个人相互同意彼此装修他们自己的房子。
matlab线性方程组数值求解实验报告
湖南大学电气与信息工程学院 《数值计算》课程 上机实验报告一. 实验目的:了解gauss 消去法和迭代法matlab 算法实现求任意方程组的根。
二. 实验内容:用gauss 消去法和迭代法求解下列线性方程组:263234323923321321321=++=++=++x x x x x x x x x1.求出gauss 消去法的上三角矩阵和方程组的解321,,x x x ,并在命令窗口显示;2.显示迭代法求解过程中所有结果(,,,,,,,,,321131*********NN N x x x x x x x x x ⋯⋯)要求求解精度达到10^-5.三. 算法介绍或方法基础1) 消去法:消元过程:设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个方程+第i 个方程(i=2,3,.....n )则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++ 这样消去第2,3,。
,n 个方程的变元i x 后。
原线性方程组变为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。
回代过程:在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解: 其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk nk j j k kj k kk a x abx高斯赛德尔迭代法:由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k ix 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用,从直观上看,最新计算出的分量可能比旧的分量要好些.因此,对这些最新计算出来的第1+k 次近似()1+k x 的分量()1+k jx 加以利用,就得到所谓解方程组的高斯—塞德(Gauss-Seidel )迭代法.把矩阵A 分解成U L D A --= (6)其中()nn a ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成 ()b Ux x L D +=-即 22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法(公式),用 量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++ (9)由此看出,高斯—塞德尔迭代法的一个明显的优点是,在电算时,只需一组存储单元(计算出()1+k ix 后()k ix 不再使用,所以用()1+k ix 冲掉()k ix ,以便存放近似解.四.程序1)消去法:function x=gauss(A,b)n=length(b);A=[A,b];for k=1:(n-1)A((k+1):n,(k+1):(n+1))=A((k+1):n,(k+1):(n+1))... -A((k+1):n,k)/A(k,k)*A(k,(k+1):(n+1));A((k+1):n,k)=zeros(n-k,1);Aendx=zeros(n,1);x(n)=A(n,n+1)/A(n,n);for k=n-1:-1:1x(k,:)=(A(k,n+1)-A(k,(k+1):n)*x((k+1):n))/A(k,k);end2)迭代法:function EX()a=input('请输入系数矩阵a:');b=input('请输入矩阵b:');N=input('请输入最大迭代次数N:');esp=input('请输入近似解的误差限:');if any(diag(a))==0error('系数矩阵错误,迭代终止!')endD=diag(diag(a));X0=zeros(size(b));x1=0;x2=0;x3=0;X1=[x1;x2;x3];h=inv(D)*b;B=inv(D)*(D-a);B1=triu(B);B2=tril(B);k=1;fprintf('高斯-赛德尔迭代法');fprintf('第0次迭代得:')disp(X1');while k<=Nx1=h(1,1)+B1(1,:)*X0;X1=[x1;x2;x3];x2=h(2,1)+B1(2,:)*X0+B2(2,:)*X1;X1=[x1;x2;x3];x3=h(3,1)+B2(3,:)*X1;X1=[x1;x2;x3];if norm(X1-X0,inf)<espfprintf('已满足误差限。
matlab实验线性方程组的求解
实验一 线性方程组的求解学号: 姓名: 系别专业:实验目的学会用Matlab 软件求解线性方程组.实验内容线性方程组的求解.实验方法和步骤对于线性方程组:AX = b ,其中A 为此线性方程组的系数矩阵,b 为列向量,矩阵 C 为由 A ,b 构成的此方程组的增广矩阵:⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=m mnm m n n m n mn m m n n b a a a b a a a b a a a C b b b b x x x X a a a a a a a a a A 212222211112112121212222111211,,,则线性方程组AX=b 的解可分为以下三种个情况:①当m=n ,且rank(A) = rank(C) = n 时,线性方程组AX = b 有唯一解,可通过以下语句给出线性方程组的解:x = inv(A) * b %或者x = A \ b 也可求出方程组的解 x = inv(sym(A)) * b %得出线性方程组的精确解 例1 求解下面的线性方程组.⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡23452314323112344321X解 可验证rank(A) = rank(C) = 4,从而方程组有唯一解,在命令窗口中输入以下语句即可解出此线性方程组:A = [1 2 3 4;4 3 2 1;1 3 2 4;4 1 3 2];b = [5;4;3;2];x = inv(A) * b %利用x = A \ b 所产生的效果是一样的 x =-1.8000 1.8667 3.8667 -2.1333②当rank(A) = rank(C) = r < n 时,线性方程组 AX = b 有无穷多解.此时可以构造出线性方程组的(n - r)个化零向量i x (i = 1,2,…,n - r),则原线性方程组对应的齐次线性方程组的解^x 可以由i x 的线性组合来表示,即r n x x x x -+++=r -n 2211^ααα其中, αi (i = 1,2,…,n - r)为任意常数.在MATLAB 语言中可以由函数null 直接求出,其调用格式为:Z = null(A) Z = null(A,'r')例2 求下面的线性方程组的解⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡62312244864211224321X解 用下面语句输入矩阵A 与列向量b ,并输入其增广矩阵 C ,从而判定此线性方程组的可解性:A = [1 2 3 4;2 2 1 1;2 4 6 8;4 4 2 2];b = [1;3;2;6];C = [A b]; [rank(A),rank(C)] ans =2 2由于矩阵 A ,C 的秩相同,都等于2,小于未知数的个数4,所以原方程组有无穷多组解,如需求解原线性方程组,可以先求出化零空间Z ,得出满足方程组的一个特解x0:Z = null(A,'r') Z =2.00003.0000 -2.5000 -3.5000 1.0000 0 0 1.0000 x0 = pinv(A) * b x0 =0.9542 0.7328 -0.0763 -0.2977③若 rank(A)≤rank(C),则方程组 AX = b 无解.这时只能利用Moore-Penrose 广义逆求解出方程的最小二乘解x = pinv(A)*b ,该解不满足原方程组,只是使误差的范数测度||Ax - b||取最小值.例3 讨论下面线性方程组的求解.⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡=⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎣⎡43212244864211224321X解 输入以下语句,讨论方程组解的情况.A = [1 2 3 4;2 2 1 1;2 4 6 8;4 4 2 2];b = [1;2;3;4];C = [A b]; [rank(A),rank(C)] ans =2 3由于矩阵A 和C 的秩不相等,故原方程组无解,可以使用pinv 函数求解,从而求出原始方程的最小二乘解为:x=pinv(A)*b x =0.5466 0.4550 0.0443 -0.0473由以上语句可知,该解并不满足原线性方程组: norm(A * x - b)ans =0.4472。
MATLAB方程组求解实验报告
八、教师评语
签名:
日期: 年 月 日
成绩
14 -2 2
0 33 8
-2 7 38
3)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a-b
ans =
-10 4 0
2 -27 -6
4 -5 -30
4)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
方程A*X=b变形成QRX=b则X=R\(Q\b)
命令[Q,R]=qr(A)
2求线性齐次方程组的通解
在Matlab中,函数null用来求解零空间,即满足A·X=0的解空间,实际上是求出解空间的一组基(基础解系)。
格式:z=null %z的列向量为方程组的正交规范基,满足
% z的列向量是方程AX=0的有理基
1)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a*b
ans =
20 30 43
6 93 56
-1 51 144
2)
a=[2 1 1;1 3 1;1 1 4];
b=[12 -3 1;-1 30 7;-3 6 34];
>> a+b
ans =
-2.3529 12.5294 0.7059
-2.2353 0.3529 9.4706
Matlab实验2方程求解
线性方程(组)求解
MATLAB中求解线性方程常用到的命令:
rank(A) rref(A) null(A) null(A,’r’) 得到矩阵A的秩 得到矩阵A的行最简形 得到系数矩阵为A的齐次方程组基础 解系 得到系数矩阵为A的齐次方程组有理 数形式的基础解系
例一
已知矩阵A,求A的秩和行最简形。(t201.m)
求常微分方程特解:
dsolve(’eqn’, ’condition1’, … , ’conditi onn’, ’var’) eqn是常微分方程,condition是初始条件, var是变量
例一:求方程通解 (t211.m)
1 xy 'ln x y ax(ln x 1) 2 y '' 2 y ' 5 y sin 2 x 4 2 3 ( y 3x )dy xydx 0 x 4 y ''' y '' 2 y ' x(e 4)
例二:求方程组通解
dx y dt dy x dt
例三:求方程特解
y '' cos 2 x y, y(0) 1, y '(0) 0
上机实验
求下列方程的通解(t212.m)
dy 1 y ln y dx dy x y 1 3 dx x y 3
例一:方程(组)符号解
求一元二次方程的ax2+bx+c=0根 (t205.m)
例二:方程(组)符号解
求三次方程x3-2x+1=0的
(t207.m)
x y a x y b
2
研究报告用matlab解线性方程组
用matlab解线性方程组2008-04-12,17:00一。
高斯消去法1.顺序高斯消去法直接编写命令文件a=[]d=[]'[n,n]=size(a);c=n+1a(:,c)=d;,for,k=1:n-1a(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,%消去endx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end2.列主高斯消去法*由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m,改成真正的行的值。
该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。
直接编写命令文件a=[]d=[],'[n,n]=size(a);c=n+1a(:,c)=d;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(增广)for,k=1:n-1[r,m]=max(abs(a(k:n,k)));,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%选主m=m+k-1;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(修正操作行的值),,,if(a(m,k)~=0),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,if(m~=k)a([k,m],:)=a([m,k],:);,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%换行enda(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,,%消去endendx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end3.分别用顺序高斯消去法和列主高斯消去法解方程组a*x=d,并比较结果a=[0,1,2,3;9,11,23,34;62.5,23.4,15.5,17.2;192.01,124,25.1,59.3],d=[1;1;1;1]顺序高斯消去法:提示“Warning:,Divide,by,zero.”,x,=NaN,NaN,NaN,NaN 列主高斯消去法:x,=-1.2460,2.8796,5.5206,-4.3069由此可见列主高斯消去法可以解决顺序高斯消去法所不能解决的问题。
matlab实验5 线性方程组的解法
马千里 热动71 970669实验5 线性方程组的解法实验目的1. 用MA TLAB 软件掌握线性方程组的解法,对迭代法的收敛性和解的稳定性作初步分析。
2. 通过实例练习用线性方程组求解实际问题。
实验内容预备:编写雅可比迭代和高斯—塞得尔迭代的程序 雅可比迭代的程序:function xxx=ykb(A,b) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); B1=inv(D)*(L+U); f=inv(D)*b;x(1:length(b),1)=0; xx=x+1;while norm(x-xx)>1e-6 xx=x;x=B1*x+f; end xxx=x;1. 用MA TLAB 软件的“lu ”(LU 分解),“ \ ”,以及雅可比迭代和高斯—塞德尔迭代解方程组Ax=b (A 如下,b 任意,比较分析其结果包括迭代法收敛或不收敛的原因)。
a. A=[1,2,-1;1,1,1;2,2,1]; 设b=[1; 2; 1]在MA TLAB 下运行:》A=[1,2,-1;1,1,1;2,2,1];b=[1; 2; 1]; 用LU 分解方法: 》[L U p]=lu(A)L =1.0000 0 00.5000 1.0000 00.5000 0 1.0000》x=(L*U\p*b)’ x =-9 8 3 用除号“\”: 》x=(A\b)’ x =-9 8 3 用雅可比迭代法: 》x=ykb(A,b) x =高斯—塞得尔迭代的程序:function xxx=guass(A,b) D=diag(diag(A)); U=-triu(A,1); L=-tril(A,-1); B1=inv(D-L)*U; f=inv(D-L)*b;x(1:length(b),1)=0; xx=x+1;while norm(x-xx)>1e-8 xx=x;x=B1*x+f; end xxx=x;U = 2.0000 2.0000 1.0000 0 1.0000 -2.5000 0 0 0.5000 p = 0 0 1 1 0 0 0 1 0-9 8 3迭代公式中B1 = f=0 -2 2 1-1 0 -1 2-2 -2 0 1 因为ρ(B1)=0.126<1所以是收敛的用高斯—塞德尔迭代法:因为迭代公式中B1= f=0 -2 2 10 2 -3 10 0 2 3因为ρ(B1)=2>1所以迭代是不收敛的b.A为n阶Hilbert矩阵,n=3~10。
利用matlab解线性方程组
数值计算实验——解线性方程组西南交通大学2012级茅7班20123257 陈鼎摘要本报告主要介绍了基于求解线性方程组的高斯消元法和列主消元法两种数值分析方法的算法原理及实现方法。
运用matlab数学软件辅助求解。
实验内容1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证。
2.编写用列主消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证。
给定方程组如下:①0.325x1+2.564x2+3.888x3+5x4=1.521②-1.548x1+3.648x2+4.214x3-4.214x4=2.614③-2.154x1+1.647x2+5.364x3+x4=3.978④0x1+2.141x2-2.354x3-2x4=4.214A.高斯消元法一、算法介绍高斯消元法是一种规则化的加减消元法。
基本思想是通过逐次消元计算把需要求解的线性方程组转化成为上三角方程组,即把现形方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组的求解转化为等价的上三角方程组的求解。
二、matlab程序function [RA,RB,n,X]=gaus(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;if zhica>0,disp(‘因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp(‘因为RA=RB=n,所以此方程组有唯一解.')X=zeros(n,1); C=zeros(1,n+1);for p= 1:n-1for k=p+1:nm= B(k,p)/ B(p,p); B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp(‘因为RA=RB<n,所以此方程组有无穷多解.')endend三、实验过程与结果输入的量:系数矩阵A和常系数向量b;输出的量:系数矩阵A和增广矩阵B的秩RA、RB,方程中未知量的个数n和有关方程组解X及其解的信息。
线性代数的MATLAB软件实验报告
线性代数的MATLAB 软件实验一、实验目的1.熟悉矩阵代数主要MATLAB 指令。
2.掌握矩阵的转置、加、减、乘、除、乘方、除法等MATLAB 运算。
3.掌握特殊矩阵的MATLAB 生成。
4.掌握MATLAB 的矩阵处理方法。
5.掌握MATLAB 的矩阵分析方法。
6.掌握矩阵的特征值与标准形的MATLAB 验算。
7.掌握线性方程组的MATLAB 求解算法。
二、实验原理1.线性方程组 【基本观点】自然科学和工程实践很多问题的解决都涉及线性代数方程组的求解和矩阵运算.一方面,许多问题的数学模型本身就是一个线性方程组,例如结构应力分析问题、电子传输网分析问题和投入产出分析问题;另一方面,有些数值计算方法导致线性方程组求解,如数据拟合,非线性方程组求解和偏微分方程组数值解等.n 个未知量m 个方程的线性方程组一般形式为⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++.,,22112222212111212111m n mn m m n n n n b x a x a x a b x a x a x a b x a x a x a (3.1) 令,,,2121212222111211⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫⎝⎛=m n mn m m n n b b b b x x x x a a a a a aa a a A则得矩阵形式Ax=b. (3.2)若右端b=0,即Ax=0, (3.3)则称方程组为齐次的.方程组(3.1)可能有唯一解,可能有无穷多解,也可能无解,主要取决于系数矩阵A 及增广矩阵(A,b )的秩.若秩(A )=秩(A,b )=n,存在唯一解,其解理论上用Cramer 法则求出,但由于这种方法要计算n+1个n 阶行列式,计算量太大通常并不采用;若秩(A )=秩(A,b )<n,存在无穷多解,其通解可表示为对应齐次方程组(3.3)的一个基础解系与(3.2)的一个特解的叠加;若秩(A )≠秩(A,b ),则无解,这时一般寻求最小二乘近似解,即求x 使向量Ax-b 模最小.P50矩阵左除的数学思维:恒等变形Ax=b 方程两边的左边同时除以A ,得:b AAx A11=,即:b A b Ax 11-==MATLAB 的实现(左除):x=A\b 2.逆矩阵 【基本观点】方阵A 称为可逆的,如果存在方阵B ,使 AB=BA=E,这里E 表示单位阵.并称B 为A 的逆矩阵,记B=1-A .方阵A 可逆的充分必要条件是A 的行列式det A ≠0.求逆矩阵理论上的公式为*1det 1A AA =-, (3.4)这里*A 为A 的伴随矩阵.利用逆矩阵,当A 可逆时,(3.2)的解可表示为b A x 1-=.由于公式(3.4)涉及大量行列式计算,数值计算不采用.求逆矩阵的数值算法一般是基于矩阵分解的方法.3.特征值与特征向量 【基本观点】对于方阵A ,若存在数λ和非零向量x ,使,x Ax λ= (3.5) 则称λ为A 的一个特征值,x 为A 的一个对应于特征值λ的特征向量.特征值计算归结为特征多项式的求根.对于n 阶实数方阵,特征多项式在复数范围内总有n 个根。
matlab实验1:线性代数方法
奇异值分解: 奇异值分解: 其中U,V均为正交矩阵,S为一 个对角阵, 其中U,V均为正交矩阵,S为一 个对角阵,且对角线 U,V均为正交矩阵,S 元素恰好为A的奇异值(A’*A (A’*A的特征值的算术平方 元素恰好为A的奇异值(A’*A的特征值的算术平方 根). A=U*S*V’ 用于处理一些病态方程组的求解 格式一:只返回方阵A 格式一:只返回方阵A的特征值 格式二:其中D是由A 格式二:其中D是由A的特征值组成的对角 矩阵,V为对应特征向量组成的矩阵. ,V为对应特征向量组成的矩阵 矩阵,V为对应特征向量组成的矩阵. 求矩阵的迹: 求矩阵的迹:矩阵的迹等于矩阵的特征值之和
eig(A) [V,D]=eig(A) trace(A)
上机作业
找出你的代数书,利用 重做其中的几个作业。 找出你的代数书,利用Matlab重做其中的几个作业。 重做其中的几个作业源自函数 [Q,R]=qr(A)
功能 (QR分解 分解) 正交变换 (QR分解): 对A进行QR分解,就是把A分解为一个正交矩阵Q和 进行QR分解,就是把A分解为一个正交矩阵Q QR分解 一个上三角矩阵R的乘积形式. 其中Q*Q’=E, 一个上三角矩阵R的乘积形式. 其中Q*Q’=E, 正交 阵!
[U,S,V]=svd( A)
%对高阶的大方程组通常用:LU、QR和cholesky分解 对高阶的大方程组通常用: 、 对高阶的大方程组通常用 和 分解 等方法求方程组的解 其优点是运算速度快、 等方法求方程组的解 。其优点是运算速度快、可以节省 磁盘空间、节省内存。 磁盘空间、节省内存。
3 求线性方程组的通解
的通解。 例:求下面线性方程组Ax=B的通解。 求下面线性方程组 的通解 输出结果: 输出结果:
解法2 解法2:利用 rref 函数
线性代数-matlab实验报告
用matlab解决线性代数问题学号: 82120545 , 姓名: 于珊,1 求解线性方程组实验内容: 用MATLAB求解如下线性方程组Ax = b, 其中A =5600000015600000015600000015600000015600000015600000015600000015⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦, b = [1,4,6,0,7,1,2,4] T.实验目的:1. 了解MATLAB软件, 学会MATLAB软件的一些基本操作;2. 熟悉MATLAB软件的一些数值计算功能;3. 练习编写简单的MATLAB程序。
实验原理:1. 对于满足条件系数矩阵的行列式D=︱A︱≠0的方程组Ax= b,根据克拉默(Gramer)法则,此线性方程组有唯一解:,j=1,2,…,n。
2. 当线性方程组的系数矩阵A是可逆矩阵时, 方程组Ax = b的解为X = A\B。
3. 当系数矩阵A可逆时, 对增广矩阵[A, b]进行初等行变换, 把它化为行最简形矩阵B, 则B的最后一列就是该方程组的解向量。
实验方案: 1. 在MATLAB命令窗口中输入如下命令:>> a_1=[5;1;0;0;0;0;0;0];a_2=[6;5;1;0;0;0;0;0];>> a_3=[0;6;5;1;0;0;0;0];a_4=[0;0;6;5;1;0;0;0];>> a_5=[0;0;0;6;5;1;0;0];a_6=[0;0;0;0;6;5;1;0];>> a_7=[0;0;0;0;0;6;5;1];a_8=[0;0;0;0;0;0;6;5]; %输入矩阵A>> b=[1;4;6;0;7;1;2;4];>> D=det([a_1,a_2,a_3,a_4,a_5,a_6,a_7,a_8]);>> D_1=det([b,a_2,a_3,a_4,a_5,a_6,a_7,a_8]);>> D_2=det([a_1,b,a_3,a_4,a_5,a_6,a_7,a_8]);>> D_3=det([a_1,a_2,b,a_4,a_5,a_6,a_7,a_8]);>> D_4=det([a_1,a_2,a_3,b,a_5,a_6,a_7,a_8]);>> D_5=det([a_1,a_2,a_3,a_4,b,a_6,a_7,a_8]);>> D_6=det([a_1,a_2,a_3,a_4,a_5,b,a_7,a_8]);>> D_7=det([a_1,a_2,a_3,a_4,a_5,a_6,b,a_8]);>> D_8=det([a_1,a_2,a_3,a_4,a_5,a_6,a_7,b]);>> x_1=D_1/D;x_2=D_2/D;x_3=D_3/D;x_4=D_4/D;>> x_5=D_5/D;x_6=D_6/D;x_7=D_7/D;x_8=D_8/D;>> format rat,X=[x_1,x_2,x_3,x_4,x_5,x_6,x_7,x_8]%利用克拉默法则求解方程组2. 在MATLAB命令窗口中输入如下命令:>> %把该方程组记为AX=b,则X=A\b>> A=[5,6,0,0,0,0,0,0;1,5,6,0,0,0,0,0;0,1,5,6,0,0,0,0;0,0,1,5,6,0,0,0;0,0,0,1,5,6,0,0;0,0,0,0,1,5,6,0;0,0,0,0,0,1,5,6;0,0,0,0,0,0,1,5]; %输入矩阵A>> b=[1;4;6;0;7;1;2;4]; %输入矩阵b>>format rat,X=A\b%求解方程组3. 在MATLAB命令窗口中输入如下命令:>> A=[5,6,0,0,0,0,0,0;1,5,6,0,0,0,0,0;0,1,5,6,0,0,0,0;0,0,1,5,6,0,0,0;0,0,0,1,5,6,0,0;0,0,0,0,1,5,6,0;0,0,0,0,0,1,5,6;0,0,0,0,0,0,1,5];%输入矩阵A>> b=[1;4;6;0;7;1;2;4]; %输入矩阵b>> B=[A,b];%B为增广矩阵[A,b]>> format rat>> C=rref(B); %用初等行变换把B化为行最简形>> X=C(:,9) %利用高斯消元法求解方程组实验结果:1.方法一的计算结果为:X =Columns 1 through 6-3419/592 727/146 -2543/1009 697/307 -131/89 2033/1009 Columns 7 through 8-835/659 1913/18162方法二的计算结果为:.X =-3419/592727/146-2543/1009697/307-131/892033/1009-835/6591913/18163.方法三的计算结果为:X =-797/138727/146-310/123697/307-131/89542/269-204/161138/131对实验结果的分析:上述3种方案所得的结果不完全一致, 这是因为不同的计算方法在计算机中有不同的精度,导致计算数据结果的不同。
Matlab数学实验报告二
数学软件课程设计题目线性方程组求解班级数学081姓名曹曼伦实验目的:用Matlab语言实现Gauss算法和cholesky算法(chol)以及LU分解(lu),求解一般线性方程组。
用Matlab语言实现Jacobi迭代算法、Gauss-Seidel迭代算法和逐次超松弛迭代法,求解一般的线性代数方程组问题。
实验内容:一.直接法(1)Gauss消元法:function x=DelGauss(a,b)% Gauss消去法[n,m]=size(a);nb=length(b);det=1;%存储行列式值x=zeros(n,1);for k=1:n-1for i=k+1:nif a(k,k)==0returnendm=a(i,k)/a(k,k);for j=k+1:na(i,j)=a(i,j)-m*a(k,j);endb(i)=b(i)-m*b(k);enddet=det*a(k,k);enddet=det*a(n,n);for k=n:-1:1 %回代for j=k+1:nb(k)=b(k)-a(k,j)*x(j);endx(k)=b(k)/a(k,k);endExample:>> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]';>> x=DelGauss(A,b)x =0.9739-0.00471.0010(2)对称正定矩阵之Cholesky分解法:function L=Cholesky(A)%对对称正定矩阵A进行Cholesky分解n=length(A);L=zeros(n);for k=1:ndelta=A(k,k);for j=1:k-1delta=delta-L(k,j)^2;endif delta<1e-10return;endL(k,k)=sqrt(delta);for i=k+1:nL(i,k)=A(i,k);for j=1:k-1L(i,k)=L(i,k)-L(i,j)*L(k,j);endL(i,k)=L(i,k)/L(k,k);endendfunction x=Chol_Solve(A,b)%利用对称正定矩阵之Cholesky分解求解线性方程组Ax=b n=length(b);l=Cholesky(A);x=ones(1,n);y=ones(1,n);for i=1:nz=0;for k=1:i-1z=z+l(i,k)*y(k);endy(i)=(b(i)-z)/l(i,i);endfor i=n:-1:1z=0;for k=i+1:nz=z+l(k,i)*x(k);endx(i)=(y(i)-z)/l(i,i);endExample:>> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898];>> b=[1 0 1]';>> x=Chol_Solve(A,b)x =0.9739 -0.0047 1.0010(3)LU分解法:function [l,u]=lu(a)%LU分解n=length(a);l=eye(n);u=zeros(n);for i=1:nu(1,i)=a(1,i);endfor i=2:nl(i,1)=a(i,1)/u(1,1);endfor r=2:n%%%%for i=r:nuu=0;for k=1:r-1uu=uu+l(r,k)*u(k,i);endu(r,i)=a(r,i)-uu;end%%%%for i=r+1:nll=0;for k=1:r-1ll=ll+l(i,k)*u(k,r);endl(i,r)=(a(i,r)-ll)/u(r,r);end%%%%Endfunction x=lusolv(a,b)%LU分解求解线性方程组aX=b if length(a)~=length(b)error('Error in inputing!')return;endn=length(a);[l,u]=lu(a);y(1)=b(1);for i=2:nz=0;for k=1:i-1z=z+l(i,k)*y(k);endy(i)=b(i)-z;endx(n)=y(n)/u(n,n);for i=n-1:-1:1z=0;for k=i+1:nz=z+u(i,k)*x(k);endx(i)=(y(i)-z)/u(i,i);endExample:>> a=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]';>> x=Chol_Solve(a,b)x =0.9739 -0.0047 1.0010二.迭代法(1)Jacobi迭代法:function [x,n]=jacobi(A,b,x0,eps,varargin)if nargin==3eps= 1.0e-6;M = 200;elseif nargin<3errorreturnelseif nargin ==5M = varargin{1};D=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B=D\(L+U);f=D\b;x=B*x0+f;n=1; %迭代次数while norm(x-x0)>=epsx0=x;x=B*x0+f;n=n+1;if(n>=M)disp('Warning: 迭代次数太多,可能不收敛!');return;endendExample:>> x0=[0;0;0]x0 =>> [x,n]=Jacobi(A,b,x0)x =0.9739-0.00471.0010n =5(2)Gauss-Seidel迭代法:function [x,n]=gauseidel(A,b,x0,eps,M) if nargin==3eps= 1.0e-6;M = 200;elseif nargin == 4M = 200;elseif nargin<3errorreturn;endD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵f=(D-L)\b;x=G*x0+f;n=1; %迭代次数while norm(x-x0)>=epsx0=x;x=G*x0+f;n=n+1;if(n>=M)disp('Warning: 迭代次数太多,可能不收敛!');return;endendExample:>> x0=[0;0;0]x0 =>> [x,n]=gauseidel(A,b,x0)x =-0.00471.0010n =4(3)对称逐次超松驰迭代法:function [x,n]=SSOR(A,b,x0,w,eps,M) if nargin==4eps= 1.0e-6;M = 200;elseif nargin<4errorreturnelseif nargin ==5M = 200;endif(w<=0 || w>=2)error;return;endD=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵U=-triu(A,1); %求A的上三角阵B1=inv(D-L*w)*((1-w)*D+w*U);B2=inv(D-U*w)*((1-w)*D+w*L);f1=w*inv((D-L*w))*b;f2=w*inv((D-U*w))*b;x12=B1*x0+f1;x =B2*x12+f2;n=1; %迭代次数while norm(x-x0)>=epsx0=x;x12=B1*x0+f1;x =B2*x12+f2;n=n+1;if(n>=M)disp('Warning: 迭代次数太多,可能不收敛!');return;endendExample:>> [x,n]=SSOR(A,b,x0,1)x =0.9739-0.00471.0010n =3实验结果:一.直接法(1)Gauss消元法:>> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]';>> x=DelGauss(A,b)x =0.9739-0.00471.0010(2)对称正定矩阵之Cholesky分解法:>> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898];>> b=[1 0 1]';>> x=Chol_Solve(A,b)x =0.9739 -0.0047 1.0010(3)LU分解法:>> a=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]';>> x=Chol_Solve(a,b)x =0.9739 -0.0047 1.0010二.迭代法(1)Jacobi迭代法:>> [x,n]=Jacobi(A,b,x0)x =0.9739-0.00471.0010n =5(2)Gauss-Seidel迭代法:>> [x,n]=gauseidel(A,b,x0)x =0.9739-0.00471.0010n =4(3)对称逐次超松驰迭代法:>> [x,n]=SSOR(A,b,x0,1)x =0.9739-0.00471.0010n =3。
MATLAB方程组求解实验报告
MATLAB方程组求解实验报告实验报告:MATLAB方程组求解一、引言在工程和科学领域的研究中,常常需要求解一系列的线性或非线性方程组。
MATLAB是一种强大的数学软件,可以用于解决方程组求解的问题。
本实验旨在通过实例介绍MATLAB求解方程组的方法和应用。
二、方程组的定义与求解方法方程组是一组包含多个未知数的方程的集合。
求解方程组即求解方程组中的未知数,使得方程组中的每个方程都成立。
对于线性方程组,可以使用矩阵表示。
例如:Ax=b其中A是一个已知的mxn的矩阵,x是待求解的向量,b是已知的向量。
MATLAB提供了多种求解线性方程组的方法,如高斯消元法、LU分解法和迭代法等。
对于非线性方程组,一般使用数值方法求解。
常见的数值方法有牛顿法、割线法和迭代法等。
MATLAB中的fzero函数可以用于求解非线性方程组。
三、MATLAB求解线性方程组的实例1.高斯消元法考虑以下线性方程组:3x+2y-z=12x-2y+4z=-2-x+0.5y-z=0可以通过高斯消元法求解该方程组。
在MATLAB中,可以使用linsolve函数进行求解。
2.LU分解法LU分解是一种常用的求解线性方程组的方法。
通过将系数矩阵分解为上三角矩阵U和下三角矩阵L的乘积来求解方程组。
在MATLAB中,可以使用lu函数进行LU分解。
四、MATLAB求解非线性方程组的实例1.牛顿法考虑以下非线性方程组:x^2+y^2=1(x-1)^2+y^2=1可以通过牛顿法求解该方程组。
在MATLAB中,可以使用fsolve函数进行求解。
2.迭代法考虑以下非线性方程组:x^2+y^2=2x+y=1可以通过迭代法求解该方程组。
在MATLAB中,设置初始值,并使用循环迭代的方法逐步逼近方程的解。
五、实验步骤和结果1.线性方程组求解构建线性方程组Ax = b,并使用linsolve函数进行求解。
2.非线性方程组求解构建非线性方程组,并使用fsolve函数进行求解。
MATLAB实验报告2 - 第九讲+线性方程组
R_A=rank(A);
R_Ab=rank(Ab);
format rat
if R_A==R_Ab&R_A==n%判断有无唯一解
X=A\b
elseifR_A==R_Ab&R_A<n%判断有无无穷解
X=A\b%求特解
C=null(A,'r')%求AX=0的基础解系
同理,可建立描述电工,油漆工各自的收支平衡关系的另外两个等式,将三个等式联立,可得描述实际问题的方程组
整理,得
这是一个齐次线性方程组的问题。
(2)数学模型求解。在命令窗口输入以下命令。
clear
>>A=[-8 1 6;4 -5 1;4 4 -7 ];
>>format rat
>>z=null(A,’r’)
[Q,R]=qr(A)
正交分解.Q是正交矩阵,R是上三角矩阵,满足A=Q*R.
[U,S,V]=svd(A)
奇异值分解.U矩阵的列正交,V是正交矩阵,S是对角矩阵,满足A=U*S*V '.
L=chol(A)
Cholesky分解.下三角方阵L,满足A=LLT.
教师评语
成绩
教师签名
A=UDVT,
其中d0,d1,…,d(n-1)称为A的奇异值(其定义为:矩ห้องสมุดไป่ตู้ATA的特征值的算术平方根)。
(4)(Cholesky分解)设A是正定矩阵,则存在一个下三角方阵L,使得A=LLT。
矩阵分解的函数命令见表4-1。
表4-1矩阵分解的函数命令表
命令
功能说明
[L,U,P]=lu(A)
三角分解.L是下三角矩阵,U是阶梯形矩阵,P是置换矩阵,满足PA=L*U.
matlab实验报告
matlab实验报告实验名称:MATLAB数值分析实验报告摘要:本实验通过使用MATLAB软件,实现了一些数值分析中重要的算法,包括线性方程组求解、非线性方程求根、数值积分与微分以及常微分方程求解。
在算法实现的过程中,通过观察输出结果验证了算法的正确性和可靠性,并探讨了一些算法实现中需要注意的问题。
1.线性方程组求解线性方程组求解是数值分析中的重要算法之一,是很多数学问题的基础。
本实验中使用了三种求解线性方程组的算法:高斯消元法、LU分解法和共轭梯度法。
在实验中,我们需要注意选取矩阵的条件数,使用一些特殊矩阵,如对角矩阵、三对角矩阵和希尔伯特矩阵等来验证算法的正确性。
2.非线性方程求根非线性方程求根是MATLAB中一个非常实用的函数,能够快速解决大量的非线性方程。
本实验中,我们更深入地探讨了二分法、牛顿法和割线法等算法,通过实现代码,实现了对非线性方程的求解。
同时,对不同的算法进行比较,从而选择合适的算法。
3.数值积分与微分数值积分与微分是宏观物理中需要用到的重要数学问题之一。
本实验中,我们使用了梯形法、辛普森法和龙贝格法等多种数值积分算法实现了函数的数值积分。
同时,也对数值微分的误差和稳定性进行了研究和探讨。
4.常微分方程求解常微分方程求解是MATLAB中最常用的功能之一。
本实验中,我们实现了欧拉法、龙格-库塔法等常微分方程求解算法。
并不断尝试对算法进行改进,提高其效率和精度。
实验结果表明,使用MATLAB实现数值分析算法是非常可靠和高效的。
同时,也需要注意在算法实现中注意问题和选择合适的算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一. 实验目的
学习使用Guass 消去法和迭代法求解线性方程组
二. 算法介绍或方法基础
§3.1 Jacobi 迭代公式
设方程组AX=b , 通过分离变量的过程建立Jacobi 迭代公式,即
1
1,,0
(1,2,,)1()
(1,2,,)
n
ij
j i ii j n
i i ij j j j i
ii
a
x b a i n x b a x i n a ==≠=≠==-
=∑∑
由此我们可以得到Jacobi 迭代公式:
(1)
1,1()(1,2,,)
n
k k i i ij j j j i
ii x b a x i n a +=≠=-=∑ §3.2 高斯-塞德尔迭代法(AX=b)
(1)(1)(1)
121
,,,k k k i x x x +++- ()()()
121
,,,k k k i x x x - 的值,而Jacobi 迭代公式并不利用这些最新的近似值计算,仍用
(1(=11)
(1)
11
)(1,2,,)i n
k k k i
i ij j ij j j j i ii x
b a x a x i n a -++==+--=∑∑ 这启发我们可以对其加以改进,即在每个分量的计算中尽量利用最新的迭代值,得到
上式称为Gauss-Seidel 迭代法.
1.矩阵的乘法
>> a=[1 2;3 4];
>> b=[5 5;7 8];
>> a^2*b
2.矩阵的除法
>> a=[1 2 3;4 5 6;7 8 9];
>> b=[1 0 0;0 2 0;0 0 3];
>> a\b
>> a/b
3.使用冒号选出指定的元素
>> a=[1 2 3;4 5 6;7 8 9];
>> a(1:2,3)
>> a(2:3,:)
4. 线性方程组数值求解
(1)Guass消去法
clear;
clc;
%这个程序可适用于求解任何符合条件n元一次方程组A=input('请输入系数方阵A=');
[m,n]=size(A);
while m~=n | det(A)==0
A=input('请输入系数方阵且det(A)~=0 A='); end
B=input('请输入列向量B=');
c=[A B];
disp('合并后的增广矩阵为');
c
disp('开始进行列主元消元法');
for i=1:m-1
for k=i+1:m
if c(k,i)>c(i,i)|-c(k,i)>c(i,i)
b=c(k,:);
c(k,:)=c(i,:);
c(i,:)=b;
end
c
for j=i+1:m
c(j,:)=c(j,:)-c(j,i)/c(i,i)*c(i,:);
end
end
disp('消元后的矩阵C');
c
A=c(:,1:m)
B=c(:,m+1)
x=[];
sum=0;
x(m)=B(m)/A(m,m);
disp('开始回代');
for i=m-1:-1:1
for j=i+1:m
sum=sum+A(i,j)*x(j);
end
x(i)=(B(i)-sum)/A(i,i);
sum=0;
end
disp('方程的解x1 x2 x3 ...xm')
x
(2)迭代法
clear;
clc;
% A=[-0.1 -0.2;-0.1 -0.2;-0.2 -0.2];%课本上jacobi迭代法P41 的例子% B=[0.72;0.83;0.84];
A=[2/3 1/3;2/3 1/3;1/3 2/3];%第二次试验的方程组
B=[39/3;34/3;26/3];
c=[];d=[];e=[];
x=zeros(1,3);y=zeros(1,3);
y(1)=B(1)-A(1,1)*x(2)-A(1,2)*x(3);
y(2)=B(2)-A(2,1)*x(1)-A(2,2)*x(3);
y(3)=B(3)-A(3,1)*x(1)-A(3,2)*x(2);
c=[c;y(1)];d=[d;y(2)];e=[e;y(3)];
while i<20 %abs(x(1)-y(1))>0.001&abs(x(2)-y(2))>0.001&abs(x(3)-y(3))>0.001 x=y;
%x
y(1)=B(1)-A(1,1)*x(2)-A(1,2)*x(3);c=[c;y(1)];
y(2)=B(2)-A(2,1)*x(1)-A(2,2)*x(3);d=[d;y(2)];
y(3)=B(3)-A(3,1)*x(1)-A(3,2)*x(2);e=[e;y(3)];
i=i+1;
end
plot(c,'-r');
hold on;
plot(d,'-k');
plot(e,'-b');
hold off
legend('x1','x2','x3','Location','NorthWest');。