第四章 线性代数问题求解 矩阵 线性方程组的直接解法 线性方程组的迭代法 线性方程组的符号解法 稀疏矩阵技术 特征值与特征向量.

Slides:



Advertisements
Similar presentations
完美殺人筆記簿 【爸!我受夠了!】 第七組組員: 林正敏 陳筱涵 李蓓宇 許純宜 羅玉芬 謝文軒.
Advertisements

高考数学专题之概率 高考数学冲刺 主讲人 : 北京大学光华管理学院 何洋. 北京师范大学京师大厦 9810 室 电话 : 传真 : 写在前面的话 概率是高中数学新教材中新增的内容, 在 实际生活中应用非常广泛, 并且由于概率 论是统计学的基础,
林園高中適性入學 高雄區免試入學 及 特色招生介紹 1. 國中學生 國中教育會考 1 ( 每年五月 ) 特色招生 術科考試 五專 免試入學 ( 每年六月 ) 特色招生 甄選入學 高中高職 免試入學 擇一報到 林園高中適性入學  入學管道流程 2.
人的性别遗传 合肥市第四十九中学 丁 艳. 男女成对染色体排序图 1 、男性和女性各 23 对染色体有何异同 ? 哪 一对被称为性染色体 ? 2 、这两幅图中,哪幅 图显示的是男性的染色 体?哪幅图显示的是女 性染色体? 3 、图中哪条染色体是 Y 染色体?它与 X 染色体 在形态上的主要区别是.
Matlab 教學 Speaker :陳珮妮 Date : 2013/03/14 1. Outline  MATLAB 簡介  算術邏輯運算  Matlab 陣列  Matlab 矩陣 2.
第 5 章 中國的都市.
淺談學校差勤事宜 報告人 臺中市北屯區文心國小 王賜壽 102年6月13日.
第四章:长期股权投资 长期股权投资效果 1、控制:50%以上 有权决定对方财务和经营.
中小学教育网课程推荐网络课程 小学:剑桥少儿英语 小学数学思维训练 初中:初一、初二、初三强化提高班 人大附中同步课程
1、一般地说,在生物的体细胞中, 和 都是成对存在的。
辨性别 A B. 辨性别 A B 第三节人类染色体与性别决定 昌邑市龙池初中 杨伟红 学习目标 1.理解人的染色体组成和传递规律。 2.解释人类性别决定的原理。 3.通过探究活动,解读数据了解生男生女的比例。
第六课 遗传与变异 第六课时 性别决定和伴性遗传.
空间解析几何与线性代数 (向量组的线性相关性及线性方程组) 成都信息工程学院 计算科学系
第二节 金融资产的计量 一、金融资产的初始计量 二、公允价值的确定 三、金融资产的后续计量 四、以公允价值计量且其变动计入当期损益的金融
—— matlab 具有出色的数值计算能力,占据世界上数值计算软件的主导地位
第4章 线性代数 4.1 矩阵的生成 通过元素列表榆入 通过外部数据加载 在M文件中创建矩阵
5.1 二元一次不等式(组)与平面区域 神木职教中心数学组:杨荣.
彰化縣教師會 導護問題知多少? 理事長:許麗芳老師 報告人:廖銘潭老師   .
06学年度工作意见 2006年8月30日.
第1章 矩阵与行列式 【矩阵与行列式简介】 在计算机日益发展的今天,线性代数起着越来越重要的作用。线性代数起源于解线性方程组的问题,而利用矩阵来求解线性方程组的Gauss消元法至今仍是十分有效的计算机求解线性方程组的方法。矩阵是数学研究和应用的一个重要工具,利用矩阵的运算及初等变换可以解决求解线性方程组等问题。特殊的矩阵方阵的数字特征之一是方阵的行列式,使用行列式可以描述方阵的一些重要的性质。通过计算行列式可求逆矩阵,n个.
MATLAB小结、 经典迭代法、CG.
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
清仓处理 跳楼价 满200返160 5折酬宾.
电话联系.
迎宾员礼仪 包头机电工业职业学校管理系 白琳 1.
Matlab教學 Speaker:林昱志 Date:2012/10/18.
命题的四种形式 高二数学.
1.1.2 四 种 命 题.
色 弱 與 色 盲.
認識拿破崙˙波拿巴 關於一位運氣很差的矮子的趣事兩三件 我不是矮子!! 本日主角 重點不是這個吧? 惡搞人員:橘蘋3顆和一隻小精靈.
第八組 組員:07黃佩瑄 13吳姿毅 14葉芷芸 26黃欣蓮 34林思妤 48潘婷蓉
邵阳文化.
宠物之家 我的宠物性别? 雌(♀) or 雄(♂) 第一阶段:我的宠物我做主 第二阶段:宠物“相亲记” 第三阶段:家族诞生
课标教材下教研工作的 实践与思考 山东临沂市教育科学研究中心 郭允远.
财 务 会 计 第四篇:供应链会计实务 制作人:谌君、熊瑜.
第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案. 第4章 种群和群落 第3节 群落的结构 自主学习案   合作探究案 课后练习案.
小平故里,魅力广安 小平故里 旅游名城 “吃货”天堂 主讲:张晨曦.
XX信托 ·天鑫 9号集合资金信托计划 扬州广陵
文化生活第三单元 中华文化和民族精神.
Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所
學校教職員退休條例修正草案重點報告 報告人:徐創晃.
第3章 矩阵、数组和符号运算 一、矩阵和数组运算 要求内容: ( 1)熟练掌握矩阵的创建。 ( 2)掌握矩阵运算和数组运算。
張智星 清大資工系 補充內容:方煒 台大生機系 小幅修改:吳俊仲 長庚機械系
張智星 清大資工系 補充內容:方煒 台大生機系
范洪源 臺灣師範大學數學系 MATLAB 基本功能介紹 范洪源 臺灣師範大學數學系.
第2章 MATLAB矩阵及其运算 2. 1 变量和数据操作 2. 2 MATLAB矩阵 2. 3 MATLAB运算 2. 4 矩阵分析 2
知识点7---矩阵初等变换的应用 1. 求矩阵的秩 2. 求矩阵的逆 3. 解矩阵方程.
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
Z Mathematical Model ‡ ' MATLAB简介.
第一讲 MATLAB简介 1.1 MATLAB与通信仿真 1.1.1 通信电路与系统仿真 1.1.2 MATLAB的发展史
University of Electronic Science and Technology, China
張智星 清大資工系 多媒體檢索實驗室 第九章: 矩陣的處理與運算 張智星 清大資工系 多媒體檢索實驗室.
黃聰明 國立臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 國立臺灣師範大學數學系
引 言.
第九章: 矩陣的處理與運算 張智星 (Roger Jang)
《2015考试说明》新增考点:“江苏省地级市名称”简析
§1.5 分块矩阵.
数学建模 江西财经大学 数学与管理决策系 制作:华长生 华长生制作.
MATLAB 入门教程.
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
微分方程之应用 ----恶狼追兔问题 恶狼 追 小兔 主讲人:曹怀火 数学与计算机科学系
本章學習目標 認識陣列裡元素的結構 學習多維陣列的建立 學習編修矩陣的內容 學習基本的矩陣數學運算
实验教学 MATLAB在行列式和矩阵中的应用 授课教师:杨梦云.
复旦大学通信科学与工程系 光华楼东主楼1109 Tel:
第7章 MATLAB工程计算.
分配律 ~ 觀念 15 × 15 × + 15 × 乘法公式 蘇德宙 老師 台灣數位學習科技股份有限公司
教学大纲(甲型,54学时 ) 教学大纲(乙型, 36学时 )
第2章 线性代数方程组.
“E 保 通” 电 子 保 函 平 台 操 作 手 册.
Presentation transcript:

第四章 线性代数问题求解 矩阵 线性方程组的直接解法 线性方程组的迭代法 线性方程组的符号解法 稀疏矩阵技术 特征值与特征向量

4.1 矩阵 4.1.1特殊矩阵的输入 数值矩阵的输入 零矩阵、幺矩阵及单位矩阵 生成nn方阵: 4.1 矩阵 4.1.1特殊矩阵的输入 数值矩阵的输入 零矩阵、幺矩阵及单位矩阵 生成nn方阵: A=zeros(n), B=ones(n), C=eye(n) 生成mn矩阵: A=zeros(m,n), B=ones(m,n), C=eye(m,n) 生成和矩阵B同样位数的矩阵: A=zeros(size(B))

随机元素矩阵 若矩阵随机元素满足[0,1]区间上的均匀分布 生成nm阶标准均匀分布为随机数矩阵: A=rand(n,m) 生成nn阶标准均匀分布为随机数方阵: A=rand(n)

对角元素矩阵 已知向量生成对角矩阵: A=diag(V) 已知矩阵提取对角元素列向量: V=diag(A) 生成主对角线上第k条对角线为V的矩阵: A=diag(V,k)

例:diag( )函数的不同调用格式 >> C=[1 2 3]; V=diag(C) % 生成对角矩阵 V = 1 0 0 1 0 0 0 2 0 0 0 3 >> V1=diag(V)' % 将列向量通过转置变换成行向量 V1 = 1 2 3 >> C=[1 2 3]; V=diag(C,2) % 主对角线上第 k条对角线为C的矩阵 0 0 1 0 0 0 0 0 2 0 0 0 0 0 3 0 0 0 0 0

生成三对角矩阵: >> V=diag([1 2 3 4])+diag([2 3 4],1)+diag([5 4 3],-1) V = 1 2 0 0 5 2 3 0 0 4 3 4 0 0 3 4

Hilbert矩阵及逆Hilbert矩阵 生成n阶的Hilbert矩阵: A=hilb(n) 求取逆Hilbert矩阵: B=invhilb(n)

Hankel(汉克 ) 矩阵 其中:第一列的各个元素定义为C向量,最后一行各个元素定义为R。H为对称阵。 H1=hankel(C) 由 Hankel 矩阵反对角线上元素相等得出一下三角阵均为零的Hankel 矩阵

Vandermonde(范德蒙)矩阵

伴随矩阵 其中:P(s)为首项系数为一的多向式。

符号矩阵的输入 数值矩阵A转换成符号矩阵: B=sym(A) 例: >> A=hilb(3) A = 1.0000 0.5000 0.3333 0.5000 0.3333 0.2500 0.3333 0.2500 0.2000 >> B=sym(A) B = [ 1, 1/2, 1/3] [ 1/2, 1/3, 1/4] [ 1/3, 1/4, 1/5]

4.1.2 矩阵基本概念与性质 行列式 格式 :d=det(A) 例:求行列式 >> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; det(A) ans =

例: >> tic, A=sym(hilb(20)); det(A), toc ans = 1/2377454716768534509091644243427616440175419837753486493033185331234419759310644585187585766816573773440565759867265558971765638419710793303386582324149811241023554489166154717809635257797836800000000000000000000000000000000000 elapsed_time = 2.3140 高阶的Hilbert矩阵是接近奇异的矩阵。

格式:r=rank(A) %用默认的精度求数值秩 r=rank(A, ) %给定精度下求数值秩 矩阵的迹 格式: t=trace(A) 矩阵的秩 格式:r=rank(A) %用默认的精度求数值秩 r=rank(A, ) %给定精度下求数值秩 矩阵的秩也表示该矩阵中行列式不等于0的子式的最大阶次。可证行秩和列秩(线性无关的)应相等。

例 >> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; rank(A) ans = 3 该矩阵的秩为3,小于矩阵的阶次,故为非满秩矩阵。 >> H=hilb(20); rank(H) %数值方法 13 >> H=sym(hilb(20)); rank(H) % 解析方法,原矩阵为非奇异矩阵 20

矩阵范数

矩阵的范数定义: 格式: N=norm(A) %求解默认的2范数 N=norm(A,选项) %选项可为1,2,inf等

例:求一向量、矩阵的范数 >> a=[16 2 3 13]; >> [norm(a), norm(a,2), norm(a,1), norm(a,Inf)] ans = 2.092844953645635e+001 2.092844953645635e+001 3.400000000000000e+001 1.600000000000000e+001 >> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; >> [norm(A), norm(A,2), norm(A,1), norm(A,Inf)] 34 34 34 34 符号运算工具箱未提供norm( )函数,需先用double( )函数转换成双精度数值矩阵,再调用norm( )函数。

特征多项式 格式: C=poly(A) 例:>> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; >> poly(A) %直接求取 ans = 1.000000000000000e+000 -3.399999999999999e+001 -7.999999999999986e+001 2.719999999999999e+003 -2.819840539024018e-012 >> A=sym(A); poly(A) %运用符号工具箱 x^4-34*x^3-80*x^2+2720*x

矩阵多项式的求解

符号多项式与数值多项式的转换 格式: f=poly2sym(P) 或 f=poly2sym(P,x) 格式: P=sym2poly(f)

例: >> P=[1 2 3 4 5 6]; % 先由系数按降幂顺序排列表示多项式 >> f=poly2sym(P,'v') % 以 v 为算子表示多项式 f = v^5+2*v^4+3*v^3+4*v^2+5*v+6 >> P=sym2poly(f) P = 1 2 3 4 5 6

矩阵的逆矩阵 格式: C=inv(A) 例: >> format long; H=hilb(4); H1=inv(H) H1 = 1.0e+003 * 0.01600000000000 -0.11999999999999 0.23999999999998 -0.13999999999999 -0.11999999999999 1.19999999999990 -2.69999999999976 1.67999999999984 0.23999999999998 -2.69999999999976 6.47999999999940 -4.19999999999961 -0.13999999999999 1.67999999999984 -4.19999999999961 2.79999999999974

>> norm(H*inv(H)-eye(size(H))) 检验: >> H*H1 ans = 1.00000000000001 0.00000000000023 -0.00000000000045 0.00000000000023 0.00000000000001 1.00000000000011 -0.00000000000011 0.00000000000011 0.00000000000001 0 1.00000000000011 0 0.00000000000000 0.00000000000011 -0.00000000000011 1.00000000000011 计算误差范数: >> norm(H*inv(H)-eye(size(H))) 6.235798190375727e-013 >> H2=invhilb(4); norm(H*H2-eye(size(H))) 5.684341886080802e-014

>> H=hilb(10); H1=inv(H); norm(H*H1-eye(size(H))) ans = 0.00264500826202 >> H2=invhilb(10); norm(H*H2-eye(size(H))) 1.612897415528547e-005 >> H=hilb(13); H1=inv(H); norm(H*H1-eye(size(H))) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.339949e-018. 53.23696008570294 >> H2=invhilb(13); norm(H*H2-eye(size(H))) 11.37062973181391 对接近于奇异矩阵,高阶一般不建议用inv( ),可用符号工具箱。

>> H=sym(hilb(7)); inv(H) ans = [ 49, -1176, 8820, -29400, 48510, -38808, 12012] [-1176, 37632, -317520, 1128960, -1940400, 1596672, -504504] [8820, -317520, 2857680, -10584000, 18711000, -15717240, 5045040] [-29400, 1128960, -10584000, 40320000, -72765000, 62092800, -20180160] [48510, -1940400, 18711000, -72765000, 133402500, -115259760, 37837800] [-38808, 1596672, -15717240, 62092800, -115259760, 100590336, -33297264] [12012, -504504, 5045040, -20180160, 37837800, -33297264, 11099088] >> H=sym(hilb(30)); norm(double(H*inv(H)-eye(size(H))))

例:奇异阵求逆 >> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; >> format long; B = inv(A) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 1.306145e-017. B = 1.0e+014 * 0.93824992236885 2.81474976710656 -2.81474976710656 -0.93824992236885 2.81474976710656 8.44424930131968 -8.44424930131968 -2.81474976710656 -2.81474976710656 -8.44424930131968 8.44424930131968 2.81474976710656 -0.93824992236885 -2.81474976710656 2.81474976710656 0.93824992236885 >> norm(A*B-eye(size(A))) %检验 ans = 1.64081513306419 >> A=sym(A); inv(A) %奇异矩阵不存在一个相应的逆矩阵,用符号工具箱的函数也不行 ??? Error using ==> sym/inv Error, (in inverse) singular matrix

同样适用于含有变量的矩阵求逆。 例: >> syms a1 a2 a3 a4; >> C=[a1 a2;a3 a4]; >> inv(C) ans = [ -a4/(-a1*a4+a2*a3), a2/(-a1*a4+a2*a3)] [ a3/(-a1*a4+a2*a3), -a1/(-a1*a4+a2*a3)]

矩阵的相似变换与正交矩阵 其中:A为一方阵,B矩阵非奇异。 相似变换后,X矩阵的秩、迹、行列式与特征值等均不发生变化,其值与A矩阵完全一致。 对于一类特殊的相似变换满足如下条件,称为正交基矩阵。

例: >> A=[5,9,8,3; 0,3,2,4; 2,3,5,9; 3,4,5,8]; >> Q=orth(A) -0.6197 0.7738 -0.0262 -0.1286 -0.2548 -0.1551 0.9490 0.1017 -0.5198 -0.5298 -0.1563 -0.6517 -0.5300 -0.3106 -0.2725 0.7406 >> norm(Q'*Q-eye(4)) ans = 4.6395e-016 >> norm(Q*Q'-eye(4)) 4.9270e-016

例: >> A=[16,2,3,13; 5,11,10,8; 9,7,6,12; 4,14,15,1]; >> Q=orth(A) %A为奇异矩阵,故得出的Q为长方形矩阵 Q = -0.5000 0.6708 0.5000 -0.5000 -0.2236 -0.5000 -0.5000 0.2236 -0.5000 -0.5000 -0.6708 0.5000 >> norm(Q'*Q-eye(3)) ans = 1.0140e-015

4.2 线性方程组直接解法 4.2.1线性方程组直接求解-矩阵除法 关于线性方程组的直接解法,如Gauss消去法、选主元消去法、平方根法、追赶法等等,在MATLAB中,只需用“/”或“\”就解决问题。它内部实际包含着许许多多的自适应算法,如对超定方程用最小二乘法,对欠定方程时它将给出范数最小的一个解,解三对角阵方程组时用追赶法等等。 格式: x=A\b

例:解方程组 >> A=[.4096,.1234,.3678,.2943;.2246,.3872,.4015,.1129; .3645,.1920,.3781,.0643;.1784,.4002,.2786,.3927]; >> b=[0.4043 0.1550 0.4240 -0.2557]'; >> x=A\b; x' ans = -0.1819 -1.6630 2.2172 -0.4467

4.2.2线性方程组直接求解-判定求解

例: >> A=[1 2 3 4; 4 3 2 1; 1 3 2 4; 4 1 3 2]; B=[5 1; 4 2; 3 3; 2 4]; >> C=[A B]; rank(A), rank(C) ans = 4 >> x=inv(A)*B x = -1.8000 2.4000 1.8667 -1.2667 3.8667 -3.2667 -2.1333 2.7333

检验 精确解 >> norm(A*x-B) ans = 7.4738e-015 >> x1=inv(sym(A))*B x1 = [ -9/5, 12/5] [ 28/15, -19/15] [ 58/15, -49/15] [ -32/15, 41/15] >> norm(double(A*x1-B))

原方程组对应的齐次方程组的解 求取A矩阵的化零矩阵: 格式: Z=null(A) 求取A矩阵的化零矩阵的规范形式: 格式: Z=null(A, ‘ r ’)

例: 判断可解性 >> 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 >> Z=null(A,'r') % 解出规范化的化零空间 Z = 2.0000 3.0000 -2.5000 -3.5000 % 1.0000 0 0 1.0000

>> x0=pinv(A)*B % 得出一个特解 0.9542 0.7328 %全部解 -0.0763 -0.2977 验证得出的解 >> a1=randn(1); a2=rand(1); % 取不同分布的随机数 >> x=a1*Z(:,1)+a2*Z(:,2)+x0; norm(A*x-B) ans = 4.4409e-015

解析解 >> Z=null(sym(A)) Z = [ 2, 3] [ -5/2, -7/2] [ 1, 0] [ 0, 1] >> x0=sym(pinv(A)*B) x0 = [ 125/131] [ 96/131] [ -10/131] % [ -39/131]

验证得出的解 >> a1=randn(1); a2=rand(1); % 取不同分布的随机数 >> x=a1*Z(:,1)+a2*Z(:,2)+x0; norm(double(A*x-B)) ans = 通解 >> syms a1 a2; >> x=a1*Z(:,1)+a2*Z(:,2)+x0 x = [ 2*a1+3*a2+125/131] [ -5/2*a1-7/2*a2+96/131] [ a1-10/131] [ a2-39/131]

摩尔-彭罗斯广义逆求解出的方程最小二乘解不满足原始代数方程。

4.2.3 线性方程组的直接求解分析 LU分解

L是一个单位下三角矩阵,u是一个上三角矩阵, p是代表选主元的置换矩阵。 故:Ax=y => PAx=Py 格式 [l,u,p]=lu(A) L是一个单位下三角矩阵,u是一个上三角矩阵, p是代表选主元的置换矩阵。 故:Ax=y => PAx=Py => LUx=Py => PA=LU [l,u]=lu(A) 其中l等于P-1 L,u等于U,所以(P-1 L)U=A

例:对A进行LU分解 >> A=[1 2 3; 2 4 1; 4 6 7]; >> [l,u,p]=lu(A) 1.0000 0 0 0.5000 1.0000 0 0.2500 0.5000 1.0000 u = 4.0000 6.0000 7.0000 0 1.0000 -2.5000 0 0 2.5000 p = 0 0 1 0 1 0 1 0 0

>> [l,u]=lu(A) % l=P-1 L 0.2500 0.5000 1.0000 0.5000 1.0000 0 1.0000 0 0 u = 4.0000 6.0000 7.0000 0 1.0000 -2.5000 0 0 2.5000

QR分解 将矩阵A分解成一个正交矩阵与一个上三角矩阵的乘积。 求得正交矩阵Q和上三角阵R,Q和R满足A=QR。 格式: [Q,R] = qr(A)

例: >> A =[ 1 2 3;4 5 6; 7 8 9; 10 11 12]; >> [Q,R] = qr(A) Q = -0.0776 -0.8331 0.5456 -0.0478 -0.3105 -0.4512 -0.6919 0.4704 -0.5433 -0.0694 -0.2531 -0.7975 -0.7762 0.3124 0.3994 0.3748 R = -12.8841 -14.5916 -16.2992 0 -1.0413 -2.0826 0 0 -0.0000 0 0 0

Cholesky(乔里斯基 )分解 若矩阵A为 n阶对称正定阵,则存在唯一的对角元素为正的三角阵D,使得

格式: D=chol(A)

例:进行Cholesky分解。 >> A=[16 4 8; 4 5 -4; 8 -4 22]; >> D=chol(A) D = 4 1 2 0 2 -3 0 0 3

利用矩阵的LU、QR和cholesky分解求方程组的解 A*X=b 变成 L*U*X=b 所以 X=U\(L\b) 这样可以大大提高运算速度。 例:求方程组 的一个特解。 解: >> A=[4 2 -1;3 -1 2;11 3 0]; >> B=[2 10 8]'; >> D=det(A) D =

>> [L,U]=lu(A) L = 0.3636 -0.5000 1.0000 0.2727 1.0000 0 1.0000 0 0 U = 11.0000 3.0000 0 0 -1.8182 2.0000 0 0 0.0000

>> X=U\(L\B) Warning: Matrix is close to singular or badly scaled. Results may be inaccurate. RCOND = 2.018587e-017. X = 1.0e+016 * % 结果中的警告是由于系数行列式为零产生的。 -0.4053 % 可以通过A*X验证其正确性。 1.4862 1.3511 >> A*X ans = 8

(2)Cholesky分解 若A为对称正定矩阵,则Cholesky分解可将矩阵A分解成上三角矩阵和其转置的乘积, 方程 A*X=b 变成 R’*R*X=b 所以 X=R\(R’\b) (3)QR分解 对于任何长方矩阵A,都可以进行QR分解,其中Q为正交矩阵,R为上三角矩阵的初等变换形式,即:A=QR 方程 A*X=b 变形成 QRX=b 所以 X=R\(Q\b) 这三种分解,在求解大型方程组时很有用。其优点是运算速度快、可以节省磁盘空间、节省内存。

在线性方程组的迭代求解中,要用到系数矩阵A的上三角矩阵、对角阵和下三角矩阵。此三个变换在MATLAB中可由以下函数实现。 上三角变换: 格式 triu(A,1) 对角变换: 格式 diag(A) 下三角变换: 格式 tril(A,-1) 例:对此矩阵做三种变换。

>> A=[1 2 -2;1 1 1;2 2 1]; % >> triu(A,1) ans = 0 2 -2 0 0 1 0 0 0 >> tril(A,-1) 1 0 0 2 2 0 >> b=diag(A); b' 1 1 1

4.3 迭代解法的几种形式 5.3.1 Jacobi迭代法 方程组 Ax=b A可写成 A=D-L-U 其中:D=diag[a11,a22,…,ann], -L、-U分别为A的严格下、上三角部分(不包括对角线元素). 由 Ax=b => x=Bx+f 由此可构造迭代法: x(k+1)=Bx(k)+f 其中:B=D-1(L+U)=I-D-1A, f=D-1b.

function y=jacobi(a,b,x0) D=diag(diag(a)); U=-triu(a,1); L=-tril(a,-1); B=D\(L+U); f=D\b; y=B*x0+f; n=1; while norm(y-x0)>=1.0e-6 x0=y; n=n+1; end n

例:用Jacobi方法求解, 设x(0)=0,精度为10-6。 >> a=[10 -1 0; -1 10 -2; 0 -2 10]; >> b=[9; 7; 6]; >> jacobi(a,b,[0;0;0]) n = 11 ans = 0.9958 0.9579 0.7916

4.3.2 Gauss-Seidel迭代法 由原方程构造迭代方程 x(k+1)=G x(k)+f 其中:G=(D-L)-1 U, f=(D-L)-1 b D=diag[a11,a22,…,ann], -L、-U分别为A的严格下、上三角部分(不包括对角线元素).

function y=seidel(a,b,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1); G=(D-L)\U ;f=(D-L)\b; y=G*x0+f; n=1; while norm(y-x0)>=1.0e-6 x0=y; y=G*x0+f; n=n+1; end n

例:对上例用Gauss-Seidel迭代法求解 >> b=[9; 7; 6]; >> seidel(a,b,[0;0;0]) n = 7 ans = 0.9958 0.9579 0.7916 例:分别用Jacobi和G-S 法迭代求解,看是否收敛。

>> a=[1 2 -2; 1 1 1; 2 2 1]; b=[9; 7; 6]; >> jacobi(a,b,[0;0;0]) n = 4 ans = -27 26 8 >> seidel(a,b,[0;0;0]) 1011 1.0e+305 * -Inf Inf -1.7556

4.3.3 SOR迭代法 在很多情况下,J法和G-S法收敛较慢,所以考虑对G-S法进行改进。于是引入一种新的迭代法-逐次超松弛迭代法(Succesise Over-Relaxation),记为SQR法。 迭代公式为: X(k+1)= (D-wL)-1((1-w)D+wU)x(k) + w(D-wL)-1 b 其中:w最佳值在[1, 2)之间,不易计算得到,因此 w通常有经验给出。

function y=sor(a,b,w,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1); M=(D-w*L)\((1-w)*D+w*U); f=(D-w*L)\b*w; y=M*x0+f; n=1; while norm(y-x0)>=1.0e-6 x0=y; y=M*x0+f; n=n+1; end n

例:上例中,当w=1.103时,用SOR法求解原方程。 >> a=[10 -1 0; -1 10 -2; 0 -2 10]; >> b=[9; 7; 6]; >> sor(a,b,1.103,[0;0;0]) n = 8 ans = 0.9958 0.9579 0.7916

4.3.4 两步迭代法 当线性方程系数矩阵为对称正定时,可用一种特殊的迭代法来解决,其迭代公式为: 4.3.4 两步迭代法 当线性方程系数矩阵为对称正定时,可用一种特殊的迭代法来解决,其迭代公式为: (D-L)x(k+1/2) =U x(k) +b (D-U)x(k+1)=Lx(k+1/2) +b => x(k+1/2) =(D-L)-1 U x(k) + (D-L)-1 b x(k+1)= (D-U)-1 Lx(k+1/2) + (D-U)-1 b

function y=twostp(a,b,x0) D=diag(diag(a));U=-triu(a,1);L=-tril(a,-1); G1==(D-L)\U; f1=(D-L)\b; G2==(D-U)\L; f1=(D-U)\b; y=G1*x0+f1; y=G2*y+f2; n=1; while norm(y-x0)>=1.0e-6 x0=y; y=G1*x0+f1; y=G2*y+f2; n=n+1; end n

例:求解方程组 >> a=[10 -1 2 0; -1 11 -1 3; 2 -1 10 3; 0 3 -1 8]; >> b=[6; 25; -11; 15]; >> twostp(a, b, [0; 0; 0; 0]) n = 7 ans = 1.0791 1.9824 -1.4044 0.9560

4.4 线性方程组的符号解法 在MATLAB的Symbolic Toolbox中提供了线性方程的符号求解函数,如 linsolve(A,b) 等同于 X = sym(A)\sym(b). solve('eqn1','eqn2',...,'eqnN','var1,var2,...,varN ')

例: >> A=sym('[10,-1,0;-1,10,-2;0,-2,10]'); >> b=('[9; 7; 6]'); >> linsolve(A,b) ans = [ 473/475] [ 91/95] [ 376/475] >> vpa(ans) [ .99578947368421052631578947368421] [ .95789473684210526315789473684211] [ .79157894736842105263157894736842]

例: >> [x,y] = solve('x^2 + x*y + y = 3','x^2 - 4*x + 3 = 0','x','y') x = [ 1] [ 3] y = [ 1] [ -3/2]

4.5 稀疏矩阵技术 稀疏矩阵的建立: 格式 S=sparse(i,j,s,m,n) 生成一mxn阶的稀疏矩阵,以向量i和j为坐标的位置上对应元素值为s。 例: >> n=5; a1=sparse(1:n, 1:n, 4*ones(1,n), n, n) a1 = (1,1) 4 (2,2) 4 (3,3) 4 (4,4) 4 (5,5) 4

例: >> a2=sparse(2:n, 1:n-1,ones(1,n-1),n,n) a2 = (2,1) 1 (3,2) 1 (4,3) 1 (5,4) 1 >> full(a2) ans = 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0

例:n=5,建立主对角线上元素为4,两条次对角线为1的三对角阵。 >> n=5; a1=sparse(1:n,1:n,4*ones(1,n),n,n); >> a2=sparse(2:n,1:n-1,ones(1,n-1),n,n); >> a=a1+a2+a2' a = (1,1) 4 (2,1) 1 (1,2) 1 (2,2) 4 (3,2) 1 (2,3) 1 (3,3) 4 (4,3) 1

(3,4) 1 (4,4) 4 (5,4) 1 (4,5) 1 (5,5) 4 >> full(a) ans = 4 1 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 1 4

格式 A=spdiags(B,d,m,n) 生成一mxn阶的稀疏矩阵,使得B的列放在由d指定的位置。 例: >> n=5 >> b=spdiags([ones(n,1),4*ones(n,1),ones(n,1)],… [-1,0,1],n,n); >> full(b) ans = 4 1 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 1 4 1 0 0 0 1 4

格式: spconvert(dd) 对于无规律的稀疏矩阵,可使用此命令由外部数据转化为稀疏矩阵。 调用形式为:先用load函数加载以行表示对应位置和元素值的.dat文本文件,再用此命令转化为稀疏矩阵。 例:无规律稀疏矩阵的建立。 首先编制文本文件sp.dat如下: 5 1 5.00 3 5 8.00 4 4 2.00 5 5 0

>> load sp.dat >> spconvert(sp) ans = (5,1) 5 (4,4) 2 (3,5) 8 >> full(ans) 0 0 0 0 0 0 0 0 0 8 0 0 0 2 0 5 0 0 0 0

稀疏矩阵的计算: 同满矩阵比较,稀疏矩阵在算法上有很大的不同。具体表现在存储空间减少,计算时间减少。 例:比较求解下面方程组n=1000时两种方法的差别。

>> n=1000; >> a1=sparse(1:n,1:n,4*ones(1,n),n,n); >> a2=sparse(2:n,1:n-1,ones(1,n-1),n,n); >> a=a1+a2+a2'; >> b=ones(1000,1); >> tic; x=a\b; t1=toc t1 = 0.4800 >> a=full(a); >> tic; x=a\b; t2=toc t2 = 1.3220

4.6 矩阵的特征值问题 4.6.1一般矩阵的特征值与特征向量 4.6 矩阵的特征值问题 4.6.1一般矩阵的特征值与特征向量 格式: d=eig (A) 只求解特征值。 格式: [V, D]=eig (A) 求解特征值和特征向量。

例: 直接求解: >> A=[16 2 3 13; 5 11 10 8; 9 7 6 12; 4 14 15 1]; >> eig(A) ans = 34.0000 8.9443 -8.9443 0.0000

精确解: 高精度数值解: >> eig(sym(A)) ans = [ 0] [ 34] [ 4*5^(1/2)] [ 0] [ 34] [ 4*5^(1/2)] [ -4*5^(1/2)] 高精度数值解: >> vpa(ans,70) [ 0] [ 34.] [ 8.944271909999158785636694674925104941762473438446102897083588981642084] [ -8.94427190999915878563669467492510494176247343844610 28 97083588981642084]

同时求出特征值与特征向量: 直接求解: >> [v, d] = eig(A) v = -0.5000 -0.8236 0.3764 -0.2236 -0.5000 0.4236 0.0236 -0.6708 -0.5000 0.0236 0.4236 0.6708 -0.5000 0.3764 -0.8236 0.2236 d = 34.0000 0 0 0 0 8.9443 0 0 0 0 -8.9443 0 0 0 0 0.0000

解析解: >> [v,d]=eig(sym(A)) v = [ -1, 1, -8*5^(1/2)-17, 8*5^(1/2)-17 ] [ -3, 1, 4*5^(1/2)+9, -4*5^(1/2)+9 ] [ 3, 1, 1, 1 ] [ 1, 1, 4*5^(1/2)+7, -4*5^(1/2)+7 ] d = [ 0, 0, 0, 0] [ 0, 34, 0, 0] [ 0, 0, 4*5^(1/2), 0] [ 0, 0, 0, -4*5^(1/2)]

4.6.2 矩阵的广义特征向量问题 若B=I,则化成普通矩阵特征值问题。 格式: d=eig (A,B) 求解广义特征值。 格式: [V, D]=eig (A,B) 求解广义特征值和特征向量。

例: 直接求解: >> A=[5,7,6,5; 7,10,8,7; 6,8,10,9; 5,7,9,10]; >> B=[2,6,-1,-2; 5,-1,2,3; -3,-4,1,10; 5,-2,-3,8]; >> [V, D] = eig(A, B) V = 0.3697 -0.3741 + 0.6259i -0.3741 - 0.6259i 1.0000 0.9948 -0.0674 - 0.2531i -0.0674 + 0.2531i -0.6090 0.7979 0.9239 + 0.0264i 0.9239 - 0.0264i -0.2316 1.0000 -0.6599 - 0.3263i -0.6599 + 0.3263i 0.1319

>> norm(A*V-B*V*D) ans = 1.3897e-014 4.7564 0 0 0 0 0.0471 + 0.1750i 0 0 0 0 0.0471 - 0.1750i 0 0 0 0 -0.0037 检验: >> norm(A*V-B*V*D) ans = 1.3897e-014 符号运算工具箱中的eig( )函数不支持广义特征值的运算。