matlab 小结、 经典迭代法、 cg

60
MATLAB MATLAB 小小小小小小小小小小小小小小CG CG

Upload: holleb

Post on 26-Jan-2016

89 views

Category:

Documents


6 download

DESCRIPTION

MATLAB 小结、 经典迭代法、 CG. 1 .MATLAB 代表 MAT rix LAB oratory 它的首创者是美国新墨西哥大学计算机系的系主任 Cleve Moler 博士,他在教授线性代数课程发现其他语言很不方便,篇构思开发了 MATLAB 。最初采用 FORTRAN 语言编写, 20 世纪 80 年代后出现了 MATLAB 的第二版,全部采用 C 语言编写 . 1984 年 Moler 博士和一批数学家及软件专家创建了 MathWorks 公司,专门开发 MATLAB 。 1993 年出现了微机版,到 2003 年是 6.5 版. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: MATLAB 小结、 经典迭代法、 CG

MATLABMATLAB 小结、小结、经典迭代法、经典迭代法、 CGCG

Page 2: MATLAB 小结、 经典迭代法、 CG

1 .MATLAB 1 .MATLAB 代表代表 MATMATrix rix LABLABoratoryoratory• 它的首创者是美国新墨西哥大学计算机系的系主任它的首创者是美国新墨西哥大学计算机系的系主任

Cleve MolerCleve Moler 博士,他在教授线性代数课程发现其博士,他在教授线性代数课程发现其他语言很不方便,篇构思开发了他语言很不方便,篇构思开发了 MATLABMATLAB 。最初采。最初采用用 FORTRANFORTRAN 语言编写,语言编写, 2020 世纪世纪 8080 年代后出现年代后出现了了 MATLABMATLAB 的第二版,全部采用的第二版,全部采用 CC 语言编写语言编写 ..

• 19841984 年年 MolerMoler 博士和一批数学家及软件专家创建博士和一批数学家及软件专家创建了了 MathWorksMathWorks 公司,专门开发公司,专门开发 MATLABMATLAB 。。

• 19931993 年出现了微机版,到年出现了微机版,到 20032003 年是年是 6.56.5 版版

Page 3: MATLAB 小结、 经典迭代法、 CG

2 .2 . 一种演草纸式的科学计算语言一种演草纸式的科学计算语言

3 .MATLAB 3 .MATLAB 是一高性能的技术计算语言是一高性能的技术计算语言 . . – 强大的数值计算和工程运算功能强大的数值计算和工程运算功能– 符号计算功能符号计算功能– 强大的科学数据可视化能力 强大的科学数据可视化能力 – 多种工具箱 多种工具箱

Page 4: MATLAB 小结、 经典迭代法、 CG

MATLAB MATLAB 能干什么?能干什么?MATLABMATLAB 可以进行:可以进行:• 数学计算、算法开发、数据采集数学计算、算法开发、数据采集• 建模、仿真、原型 建模、仿真、原型 • 数据分析、开发和可视化数据分析、开发和可视化• 科学和工程图形应用程序的开发,包括图形用户科学和工程图形应用程序的开发,包括图形用户

界面的创建。界面的创建。MATLABMATLAB 广泛应用于:广泛应用于:• 数值计算、图形处理、符号运算、数学建模、系数值计算、图形处理、符号运算、数学建模、系

统辨识、小波分析、实时控制、动态仿真等领域。统辨识、小波分析、实时控制、动态仿真等领域。

Page 5: MATLAB 小结、 经典迭代法、 CG

掌握 掌握 MATLAB ……MATLAB ……MATLABMATLAB 的构成:的构成:• MATLABMATLAB 开发环境:进行应用研究开发的交互式平台开发环境:进行应用研究开发的交互式平台• MATLAB MATLAB 数学与运算函数库:用于科学计算的函数数学与运算函数库:用于科学计算的函数• MATLAB MATLAB 语言:进行应用开发的编程工具语言:进行应用开发的编程工具• 图形化开发:二维、三维图形开发的工具图形化开发:二维、三维图形开发的工具• 应用程序接口 应用程序接口 (API)(API) :用于与其他预言混编:用于与其他预言混编• 面向专门领域的工具箱:小波工具箱、神经网络工具面向专门领域的工具箱:小波工具箱、神经网络工具

箱、信号处理工具箱、图像处理工具箱、模糊逻辑工箱、信号处理工具箱、图像处理工具箱、模糊逻辑工具箱、优化工具箱、鲁棒控制工具箱等几十个不同应具箱、优化工具箱、鲁棒控制工具箱等几十个不同应用的工具箱。用的工具箱。

Page 6: MATLAB 小结、 经典迭代法、 CG

开发环境开发环境 包括:命令窗口、图形窗口、编辑窗口、包括:命令窗口、图形窗口、编辑窗口、帮助窗口。帮助窗口。

Page 7: MATLAB 小结、 经典迭代法、 CG

命令窗口命令窗口– 可在提示符后输入交互式命令 可在提示符后输入交互式命令 – 结果会自动的产生结果会自动的产生– 例如:例如:

MATLAB prompt (>>) and cursor (|)

command (typed at prompt)

MATLAB output

Page 8: MATLAB 小结、 经典迭代法、 CG

图形窗口图形窗口在窗口中输入:在窗口中输入:• Plot([1,2,4,9,16],[1,2,3,4,5])Plot([1,2,4,9,16],[1,2,3,4,5])• MATLAB MATLAB 划出如下图形划出如下图形 ::

Page 9: MATLAB 小结、 经典迭代法、 CG

编辑窗口编辑窗口– 用来创建和修改用来创建和修改 M-filesM-files (MATLAB (MATLAB 脚本脚本 ))

Page 10: MATLAB 小结、 经典迭代法、 CG

帮助窗口帮助窗口

Page 11: MATLAB 小结、 经典迭代法、 CG

The MATLAB Language The MATLAB Language

MATLAB MATLAB 语言的特点语言的特点– MatlabMatlab 的基本数据单元是不需指定维数的矩的基本数据单元是不需指定维数的矩

阵。阵。– MatlabMatlab 的所有计算都是通过双精度进行的,的所有计算都是通过双精度进行的,

在内存中的数都是双精度的。在内存中的数都是双精度的。– double double 是一个双精度浮点数,每个存储的双是一个双精度浮点数,每个存储的双

精度数用精度数用 6464 位。位。– charchar 用于存储字符,每个存储的字符用用于存储字符,每个存储的字符用 1616 位。位。

Page 12: MATLAB 小结、 经典迭代法、 CG

程序

•M文件与m函数 •图形显示

•流程控制

其它输出

•函数

•语句

变量 •各种运算符

MATLAB 的程序构成:

Page 13: MATLAB 小结、 经典迭代法、 CG

常变量及其命名规则常变量及其命名规则

• 变量名可以有数字、字母、下划线构成;变量名可以有数字、字母、下划线构成;• 变量的首字符必须是字母;变量的首字符必须是字母;• 区分变量名的大小写区分变量名的大小写• 每个变量名最长只能包含每个变量名最长只能包含 1919 个字符。个字符。

Page 14: MATLAB 小结、 经典迭代法、 CG

MatlabMatlab 中预定义变量中预定义变量 ans ans 分配最新计算表达式的值,这个表达式并没有分配最新计算表达式的值,这个表达式并没有

给定一个名字给定一个名字• eps eps 返回机器精度返回机器精度• realmax realmax 返回计算机能处理的最大浮点数返回计算机能处理的最大浮点数• realmin realmin 返回计算机能处理的最小的非零浮点数返回计算机能处理的最小的非零浮点数• pi pi ,3.14159265,3.14159265• inf inf 定义为定义为 1/0 1/0 。当出现被零除时,。当出现被零除时, MatlabMatlab 就返就返

回回 infinf ,并不中断执行而继续计算,并不中断执行而继续计算• NaN NaN 定义为“定义为“ Not a Number”Not a Number” ,这个非数值要么,这个非数值要么

是%类型,要么是是%类型,要么是 inf/infinf/inf

Page 15: MATLAB 小结、 经典迭代法、 CG

向量的创建向量的创建• 在在 matlabmatlab 的命令窗口键入以下字符的命令窗口键入以下字符• >> a = [1 2 3 4 5 6 9 8 7]>> a = [1 2 3 4 5 6 9 8 7]• a = a = • 1 2 3 4 5 6 9 8 71 2 3 4 5 6 9 8 7• 希望得到元素从希望得到元素从 00 到到 2020 ,步距为,步距为 22 的一个向量,只的一个向量,只

需键入以下命令即可需键入以下命令即可• >> t = [0:2:20]>> t = [0:2:20]• t = t = • 2 4 6 8 10 12 14 16 18 20 2 4 6 8 10 12 14 16 18 20

Page 16: MATLAB 小结、 经典迭代法、 CG

矩阵的创建矩阵的创建 输入矩阵时每一行元素有分号或者回车键输入矩阵时每一行元素有分号或者回车键

分隔。例如:分隔。例如:• • B = [1 2 3 4;5 6 7 8;9 10 11 12]B = [1 2 3 4;5 6 7 8;9 10 11 12]• B =B =• 1 2 3 41 2 3 4• 5 6 7 85 6 7 8• 9 10 11 129 10 11 12

Page 17: MATLAB 小结、 经典迭代法、 CG

各各种种运运算算符符

Page 18: MATLAB 小结、 经典迭代法、 CG

MatlabMatlab 语言最基本的赋值语句结构为:语言最基本的赋值语句结构为:

变量名列表变量名列表 == 表达式表达式

注注 11 :整个赋值语句以;结束,则不在屏幕上返回:整个赋值语句以;结束,则不在屏幕上返回结果,否则立即返回结果。结果,否则立即返回结果。

注注 22 :多个语句可在同一行,用逗号分开。:多个语句可在同一行,用逗号分开。注注 33 :表达是太长可以用续行符号…:表达是太长可以用续行符号…

语句语句

Page 19: MATLAB 小结、 经典迭代法、 CG

函数函数

• MatlabMatlab 由包括许多标准函数,每个函数都由包括许多标准函数,每个函数都完成某一特定功能的代码组成。 完成某一特定功能的代码组成。

• MatlabMatlab 也允许用户编写自己所需的函数,也允许用户编写自己所需的函数,其扩展名为其扩展名为 .m.m,其中必须以关键字,其中必须以关键字 functifunctionon开头开头 ..

Page 20: MATLAB 小结、 经典迭代法、 CG

流程控制流程控制

• 循环语句 循环语句 for, whilefor, while• 条件转移 条件转移 if end, if elseif else endif end, if elseif else end• 开关语句 开关语句 switch caseswitch case• 注释语句 注释语句 %%• 续行 …续行 …• 中断语句 中断语句 breakbreak• 暂停语句 暂停语句 pausepause• 回显语句 回显语句 echo on/offecho on/off

Page 21: MATLAB 小结、 经典迭代法、 CG

1 、 for循环语句基本格式for 循环变量=起始值:步长:终止值 循环体end步长缺省值为 1 ,可以在正实数或负实数范围内任意指定。对于正数,循环变量的值大于终止值时,循环结束;对于负数,循环变量的值小于终止值时,循环结束。循环结构可以嵌套使用。

Page 22: MATLAB 小结、 经典迭代法、 CG

22 、、 whilewhile循环语句循环语句基本格式基本格式while while 表达式表达式 循环体循环体endend•若表达式为真,则执行循环体的内容,执行后若表达式为真,则执行循环体的内容,执行后再判断表达式是否为真,若不为真,则跳出循再判断表达式是否为真,若不为真,则跳出循环体,向下继续执行。环体,向下继续执行。

While循环和 for循环的区别在于, while循环结构的循环体被执行的次数不是确定的,而 for结构中循环体的执行次数是确定的。

Page 23: MATLAB 小结、 经典迭代法、 CG

33 、、 ifif,, elseelse ,, elseifelseif语句语句(( 11 )) if if 逻辑表达式逻辑表达式 执行语句执行语句 endend(( 22 )) if if 逻辑表达式 (逻辑表达式 ( 33 ) ) if if 逻辑表达式逻辑表达式 11 执行语句执行语句 1 1 执行语句执行语句 11 else elseif else elseif 逻辑表达式逻辑表达式 22 执行语句执行语句 2 2 执行语句执行语句 22 end …end … end end

Page 24: MATLAB 小结、 经典迭代法、 CG

44 、、 switchswitch 语句语句

switch switch 表达式(可以是标量或字符串)表达式(可以是标量或字符串) case case 值值 11 语句语句 11 case case 值值 22 语句语句 22 … ….. otherwiseotherwise 语句语句 33 end end

Page 25: MATLAB 小结、 经典迭代法、 CG

MATLABMATLAB 程序的基本组成结构程序的基本组成结构

%说明%说明清除命令:清除命令:清除清除 workspaceworkspace 中的变量和图形(中的变量和图形( clear,closclear,clos

ee))定义变量:定义变量:包括全局变量的声明及参数值的设定包括全局变量的声明及参数值的设定逐行执行命令:逐行执行命令:指指 MATLABMATLAB 提供的运算指令或工具箱提供的运算指令或工具箱… … …… … … 提供的专用命令提供的专用命令控制循环 :控制循环 : 包含 包含 for,if then,switch,whilefor,if then,switch,while 等语句 等语句

逐行执行命令逐行执行命令… … …… … …endend绘图命令:绘图命令:将运算结果绘制出来将运算结果绘制出来

• 当然更复杂程序还需要调用子程序,或与当然更复杂程序还需要调用子程序,或与 simulinksimulink 以及其以及其他应用程序结合起来。他应用程序结合起来。

Page 26: MATLAB 小结、 经典迭代法、 CG

22 、、程序程序 MM 文件文件• 以以 .m.m格式进行存取,包含一连串的格式进行存取,包含一连串的 MATLABMATLAB 指令和必要指令和必要

的注解。需要在工作空间中创建并获取变量,也就是说处理的注解。需要在工作空间中创建并获取变量,也就是说处理的数据为命令窗口中的数据,没有输入参数,也不会返回参的数据为命令窗口中的数据,没有输入参数,也不会返回参数。数。

• 程序运行时只需在工作空间中键入其名称即可。程序运行时只需在工作空间中键入其名称即可。

MATLAB 的程序类型

MATLAB的程序类型有三种,一种是在命令窗口下执行的脚本M文件;另外一种是可以存取的M文件,也即程序文件;最后一种是函数( function)文件。1、脚本M文件在命令窗口中输入并执行,它所用的变量都要在工作空间中获取,不需要输入输出参数的调用,退出MATLAB后就释放了。

Page 27: MATLAB 小结、 经典迭代法、 CG

(( 11)函数定义行(关键字)函数定义行(关键字 functionfunction ))• function[out1,out2,..] = filename(in1,in2,..)function[out1,out2,..] = filename(in1,in2,..)• 输入和输出(返回)的参数个数分别由输入和输出(返回)的参数个数分别由 narginnargin和和 nargoutnargout两两

个个 MATLABMATLAB保留的变量来给出。保留的变量来给出。(( 22)第一行帮助行,即)第一行帮助行,即 H1H1 行行• 以(以( %% )开头,作为)开头,作为 lookforlookfor 指令搜索的行指令搜索的行(( 33)函数体说明及有关注解)函数体说明及有关注解• 以(以( %% )开头,用以说明函数的作用及有关内容)开头,用以说明函数的作用及有关内容(( 44)函数体语句)函数体语句• 函数体内使用的除返回和输入变量这些在函数体内使用的除返回和输入变量这些在 functionfunction语句中直语句中直

接引用的变量以外的所有变量都是局部变量,即在该函数返回接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在之后,这些变量会自动在 MATLABMATLAB 的工作空间中清除掉。如的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。 以将它们设置为全局变量。

3 、函数文件与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出结果。用 help命令可以显示它的注释说明。具有标准的基本结构。

Page 28: MATLAB 小结、 经典迭代法、 CG

GraphicsGraphics

MATLABMATLAB 提供了丰富的绘图功能提供了丰富的绘图功能

help graph2dhelp graph2d 可得到所有画二维图形的命令可得到所有画二维图形的命令help graph3dhelp graph3d 可得到所有画三维图形的命令可得到所有画三维图形的命令

Page 29: MATLAB 小结、 经典迭代法、 CG

1 、基本的绘图命令plot( x1,y1,option1,x2,y2,option2,…)

x1,y1给出的数据分别为 x,y 轴坐标值, option1为选项参数,以逐点连折线的方式绘制 1 个二维图形;同时类似地绘制第二个二维图形。

这是 plot 命令的完全格式,在实际应用中可以根据需要进行简化。比如:plot(x,y) ; plot(x,y,option)选项参数 option定义了图形曲线的颜色、线型及标示符号,它由一对单引号括起来。

Page 30: MATLAB 小结、 经典迭代法、 CG

2 、选择图像 figure( 1); figure( 2);…; figure(n) 打开不同的图形窗口,以便绘制不同的图形。3 、 grid on:在所画出的图形坐标中加入栅格 grid off:除去图形坐标中的栅格4 、 hold on:把当前图形保持在屏幕上不变,同时 允许在这个坐标内绘制另外一个图形。 hold off:使新图覆盖旧的图形5 、设定轴的范围 axis( [xmin xmax ymin ymax] ) axis(‘equal’) :将 x坐标轴和 y 坐标轴的单位刻度大小调整为一样。

Page 31: MATLAB 小结、 经典迭代法、 CG

66 、文字标示、文字标示text(x,y,’text(x,y,’字符串’字符串’ ))在图形的指定坐标位置在图形的指定坐标位置 (x,y)(x,y) 处,标示单引号括起来的处,标示单引号括起来的

字符串。字符串。• title(‘title(‘字符串’字符串’ ))在所画图形的最上端显示说明该图形标题的字符串。在所画图形的最上端显示说明该图形标题的字符串。• xlabel(‘xlabel(‘字符串’字符串’ )) ,, ylabel(‘ylabel(‘字符串’字符串’ ))设置设置 xx,, yy 坐标轴的名称。坐标轴的名称。• 输入特殊的文字需要用反斜杠(输入特殊的文字需要用反斜杠( \\ )开头。)开头。

77、、 legendlegend(‘(‘字符串字符串 1’,‘1’,‘字符串字符串 2’,…,‘2’,…,‘字符字符串串 n’)n’)

• 在屏幕上开启一个小视窗,然后依据绘图命令的先在屏幕上开启一个小视窗,然后依据绘图命令的先后次序,用对应的字符串区分图形上的线。后次序,用对应的字符串区分图形上的线。

Page 32: MATLAB 小结、 经典迭代法、 CG

8 、 subplot ( m , n , k ):分割图形显示窗口m: 上下分割个数, n: 左右分割个数, k: 子图编号

9 、 semilogx :绘制以 x 轴为对数坐标(以 10 为底),y 轴为线性坐标的半对数坐标图形。 semilogy :绘制以 y 轴为对数坐标(以 10 为底),x 轴为线性坐标的半对数坐标图形。

10 、了解应用型绘图指令:可用于数值统计分析或离散数据处理

bar ( x,y ); hist ( y,x )stairs ( x,y ); stem ( x,y )

Page 33: MATLAB 小结、 经典迭代法、 CG

三维的绘图命令三维的绘图命令

.8

2,

62

23,

2

1)(

bAxbAxxxf TT例 : 二次型对应的曲面

[X Y]=meshgrid(-10:0.5:10);Z=0.5*(3*X.^2 + 4*X.*Y+6*Y.^2)-2*X+8*Y;surfc(X,Y,Z); colormap hsv

Page 34: MATLAB 小结、 经典迭代法、 CG

x = (a*(1-v/(2*pi)).*(1+cos(u)) + c) .* cos(n*v) ; y = (a*(1-v/(2*pi)).*(1+cos(u)) + c) .* sin(n*v) ; z = b*v/(2*pi) + a*(1-v/(2*pi)) .* sin(u) ;

Page 35: MATLAB 小结、 经典迭代法、 CG

ExamplesExamples

•绘图实例绘图实例• 函数分析函数分析• 矩阵运算矩阵运算• 线性方程组线性方程组•曲线拟合曲线拟合• 微分方程微分方程

Page 36: MATLAB 小结、 经典迭代法、 CG

绘图实例绘图实例

Page 37: MATLAB 小结、 经典迭代法、 CG

函数分析函数分析

fplot('func',[-1 1.5]) fplot('func',[-1 1.5]) %% 作图作图result = func(0) result = func(0) %% 求函数值求函数值xsolve = fzero('func',3) xsolve = fzero('func',3) %% 求解求解Xmin = fminbnd('func',0.5,Xmin = fminbnd('func',0.5,

1)1)%% 求最小值求最小值

Page 38: MATLAB 小结、 经典迭代法、 CG

矩阵运算矩阵运算• A = [1 2 3 ; 4 5 6 ; 7 8 9];A = [1 2 3 ; 4 5 6 ; 7 8 9];• B = [1 2 3 ; 4 5 6];B = [1 2 3 ; 4 5 6];• C = [1 0 1 ; 0 2 3 ; 4 5 0];C = [1 0 1 ; 0 2 3 ; 4 5 0];

• expC = exp(C)expC = exp(C)• expM = expm(C)expM = expm(C)• logM = logm(expM)logM = logm(expM)• detA = det(A)detA = det(A)• traceA = trace(A)traceA = trace(A)• BT = B'BT = B'• invA = inv(A)invA = inv(A)• rankA = rank(A)rankA = rank(A)• [EigenVectors,EigenValues] = eig(A)[EigenVectors,EigenValues] = eig(A)

Page 39: MATLAB 小结、 经典迭代法、 CG

线性方程组与特征值线性方程组与特征值

A = [ 3 1 -1 ; 1 2 4 ; -1 4 5 ];A = [ 3 1 -1 ; 1 2 4 ; -1 4 5 ];b = [ 3.6 ; 2.1 ; -1.4 ];b = [ 3.6 ; 2.1 ; -1.4 ];X = A\bX = A\b[EigenVectors,EigenValues] = eig(A)[EigenVectors,EigenValues] = eig(A)

Page 40: MATLAB 小结、 经典迭代法、 CG

曲线拟合曲线拟合• %% 一次多项是拟合一次多项是拟合• %% 已知离散点已知离散点• x = [1 1.5 3 4 5 6 6.5 7 8];x = [1 1.5 3 4 5 6 6.5 7 8];

• y = [1.2 1 1.7 2.5 2 2.3 2.5 y = [1.2 1 1.7 2.5 2 2.3 2.5 3 3.1];3 3.1];

• %% 最小二乘拟合最小二乘拟合• p1 = polyfit(x,y,1);p1 = polyfit(x,y,1);

• y1 = polyval(p1,x);y1 = polyval(p1,x);

• plot(x,y1);plot(x,y1);

• hold onhold on

• plot(x,y,'ro')plot(x,y,'ro')

• grid ongrid on

• %7%7 次多项是拟合次多项是拟合• %% 已知离散点已知离散点• x = [1 1.5 3 4 5 6 6.5 7 x = [1 1.5 3 4 5 6 6.5 7

8];8];

• y = [1.2 1 1.7 2.5 2 2.3 y = [1.2 1 1.7 2.5 2 2.3 2.5 3 3.1];2.5 3 3.1];

• %% 最小二乘拟合最小二乘拟合• p7 = polyfit(x,y,7);p7 = polyfit(x,y,7);

• xi = 1:0.25:8;xi = 1:0.25:8;

• yi = polyval(p7,xi);yi = polyval(p7,xi);

• plot(x,y,'*r',xi,yi);plot(x,y,'*r',xi,yi);

• grid ongrid on

Page 41: MATLAB 小结、 经典迭代法、 CG

微分方程微分方程

• Van der Pol EquationVan der Pol Equation

0)1( 22

2

ydt

dyy

dt

yd

Page 42: MATLAB 小结、 经典迭代法、 CG

标准形式改写标准形式改写

12

122

21

)1( yyydt

dy

ydt

dy

Page 43: MATLAB 小结、 经典迭代法、 CG

程序实现程序实现• function dydt = DifferentialCoe(t,y)function dydt = DifferentialCoe(t,y)• dydt = [y(2);(1-y(1)^2)*y(2)-y(1)];dydt = [y(2);(1-y(1)^2)*y(2)-y(1)];• 再调用再调用 ode23,ode23s,ode23t,ode23tb,ode45ode23,ode23s,ode23t,ode23tb,ode45 等等

Page 44: MATLAB 小结、 经典迭代法、 CG

简单迭代法简单迭代法设所给的线性方程组为设所给的线性方程组为 Mx=g, Mx=g, 其中其中

11 12 1

21 22 2

1 2 3

n

n

n n nn

m m m

M m m m

m m m

1 1

2 2,

n n

x g

x gx g

x g

Page 45: MATLAB 小结、 经典迭代法、 CG

且系数矩阵且系数矩阵 MM 为非奇异为非奇异 ,g≠0,g≠0 。将方程。将方程组改写成等价形式组改写成等价形式

x=Ax+f x=Ax+f 这种改写的方法很多这种改写的方法很多 ,, 例如将例如将 MM 分解为两分解为两

个矩阵之差个矩阵之差 M=B-CM=B-C其中矩阵其中矩阵 BB 可逆可逆 ,, 于是方程组成为于是方程组成为 Bx=Cx+g Bx=Cx+g x=Bx=B-1-1 Cx+B-1g Cx+B-1g 令 令 A=BA=B-1-1 C,f=B C,f=B-1-1 g g

Page 46: MATLAB 小结、 经典迭代法、 CG

当然选取的当然选取的 BB 应该便于求逆应该便于求逆 ,, 如如 BB 为单位矩为单位矩阵或对角矩阵等。 阵或对角矩阵等。

对任意给定的初始向量对任意给定的初始向量 x(0),x(0), 构造迭代公式构造迭代公式 xx(k+1)(k+1)=Ax=Ax(k)(k)+f,+f, k=0,1,2,… k=0,1,2,… 这里这里 AA 称为迭代矩阵。用分量形式可写成 称为迭代矩阵。用分量形式可写成

( 1) ( )

1

1,2, ,,

0,1,2,

nk ki ij j i

j

i nx a x f

k

Page 47: MATLAB 小结、 经典迭代法、 CG

算出迭代公式的解的各次近似值算出迭代公式的解的各次近似值 xx(1)(1),x,x(2)(2), …,, …,xx(k)(k),…,… 。这种迭代求解的方法称为简单迭。这种迭代求解的方法称为简单迭代法。代法。特别当特别当 MM 的对角元素均不为零且按绝对值的对角元素均不为零且按绝对值

来说较大时来说较大时 ,,常取常取

11

nn

m

B D

m

A=D-1 C, f=D-1 g

Page 48: MATLAB 小结、 经典迭代法、 CG

例 用简单迭代法解下列方程组 例 用简单迭代法解下列方程组 1 2 3

1 2 3

1 2 3

10 2 7.2

10 2 8.3

5 4.2

x x x

x x x

x x x

解将方程组写成等价形式

1 2 3

2 1 3

3 1 2

0.1 0.2 0.72

0.1 0.2 0.83

0.2 0.2 0.84

x x x

x x x

x x x

Page 49: MATLAB 小结、 经典迭代法、 CG

取初始值取初始值 xx(0)(0)= 0,= 0,按迭代公式 按迭代公式 ( 1) ( ) ( )1 2 2

( 1) ( ) ( )2 1 3

( 1) ( ) ( )3 1 2

0.1 0.2 0.72

0.1 0.2 0.83

0.2 0.2 0.84

k k k

k k k

k k k

x x x

x x x

x x x

Page 50: MATLAB 小结、 经典迭代法、 CG

赛德尔赛德尔 (Seidel)(Seidel) 迭代法迭代法从简单迭代法看到从简单迭代法看到 ,,已知已知 x(k)x(k) 计算计算 x(k+1)x(k+1) 时时 ,, 需要保留需要保留 xx

(k)(k) 和和 x(k+1)x(k+1)两个分量。逐次用前面算出的新分量来计两个分量。逐次用前面算出的新分量来计算下一个分量算下一个分量 ,, 这就是赛德尔迭代法的基本思想。这就是赛德尔迭代法的基本思想。设方程组的等价形式为设方程组的等价形式为 x=Ax+fx=Ax+f 将矩阵将矩阵 AA 分解为分解为 A=B+CA=B+C 其中其中

Page 51: MATLAB 小结、 经典迭代法、 CG

于是 于是 x=Bx+Cx+fx=Bx+Cx+fxx(k+1)(k+1)=Bx=Bx(k+1)(k+1)+Cx+Cx(k)(k)+f, +f, k=0,1,2,…k=0,1,2,…

1( 1) ( 1) ( )

1

1,2, ,,

0,1,2,

i nk k ki ij j ij j j

j j i

i nx a x a x f

k

Page 52: MATLAB 小结、 经典迭代法、 CG

例 用赛德尔迭代法解方程组 例 用赛德尔迭代法解方程组 1 2 3

1 2 3

1 2 3

10 2 7.2

10 2 8.3

5 4.2

x x x

x x x

x x x

解 将原方程组写成等价形式并构造赛德尔迭代公式( 1) ( ) ( )1 2 3

( 1) ( 1) ( )2 1 3

( 1) ( 1) ( 1)3 1 2

0.1 0.2 0.72

0.1 0.2 0.83

0.2 0.2 0.84

k k k

k k k

k k k

x x x

x x x

x x x

于是于是 , x=Bx+Cx+f, x=Bx+Cx+fxx(k+1)(k+1)=Bx=Bx(k+1)(k+1)+Cx+Cx(k)(k)+f, k=0,1,2,…+f, k=0,1,2,…

1( 1) ( 1) ( )

1

1,2, ,,

0,1,2,

i nk k ki ij j ij j j

j j i

i nx a x a x f

k

Page 53: MATLAB 小结、 经典迭代法、 CG
Page 54: MATLAB 小结、 经典迭代法、 CG

• 由由 G-SG-S可得可得• (I-B)x(I-B)x(k+1)(k+1)=Cx=Cx(k)(k)+f+f• 因为矩阵因为矩阵 I-BI-B 是非奇异矩阵是非奇异矩阵 ,,则则 I-BI-B

可逆可逆 ,,所以迭代公式可写成所以迭代公式可写成• xx(k+1)(k+1)=(I-B)=(I-B)-1-1 • CxCx(k)(k)+(I-B)+(I-B)-1-1 f,k=0,1,2,… f,k=0,1,2,…• 这里迭代矩阵这里迭代矩阵• A=(I-B)A=(I-B)-1-1 C C•由此看出由此看出 , , 赛德尔迭代法实际上是某种赛德尔迭代法实际上是某种简单迭代法。简单迭代法。

Page 55: MATLAB 小结、 经典迭代法、 CG

• 松驰法松驰法• 赛德尔迭代公式为赛德尔迭代公式为• xx(k+1)(k+1)=Bx=Bx(k+1)(k+1)+Cx+Cx(k)(k)+f+f• 现令现令• Δx=xΔx=x(k+1)(k+1)-x-x(k)(k)=Bx=Bx(k+1)(k+1)+Cx+Cx(k)(k)+f-x+f-x(k)(k)

• 于是于是• xx(k+1)(k+1)=x=x(k)(k)+Δx+Δx

Page 56: MATLAB 小结、 经典迭代法、 CG

xx(k+1)(k+1) 可以看作在向量可以看作在向量 xx(k)(k) 上加修正项上加修正项 ΔxΔx 而而得到。若在修正项的前面加上一个参数得到。若在修正项的前面加上一个参数ω,ω,便得到松驰法的迭代公式 便得到松驰法的迭代公式

xx(k+1)(k+1)=x=x(k)(k)+ωΔx+ωΔx=(1-ω)x=(1-ω)x(k)(k)+ω(Bx+ω(Bx(k+1)(k+1)+Cx+Cx(k)(k)+f) k=0,1,2,… +f) k=0,1,2,… 或者用分量形式写成或者用分量形式写成

1( 1) ( ) ( 1) ( )

1

(1 ) ( )

1,2,

0,1,2,

i nk k k ki i ij j ij j i

j j i

x x a x a x f

i n

k

Page 57: MATLAB 小结、 经典迭代法、 CG

•其中其中 ωω 叫做松驰因子叫做松驰因子 ,, 当当 ωω >> 11 时叫超时叫超松驰松驰 ,ω,ω << 11 时叫低松驰时叫低松驰 ,ω=1,ω=1 时就是赛时就是赛德尔迭代法。松驰因子德尔迭代法。松驰因子 ωω 的选取直接影的选取直接影响到松弛法的收敛性。响到松弛法的收敛性。

•因为因为 (I-ωB)(I-ωB)-1-1存在存在 ,,所以还可以改写成所以还可以改写成• xx(k+1)(k+1)=(I-ωB)=(I-ωB)-1-1((1-ω)I+ωC)x((1-ω)I+ωC)x(k)(k)+ω(I-ωB)+ω(I-ωB)-1-1f f

这是简单迭代公式这是简单迭代公式 ,, 迭代矩阵为迭代矩阵为 A=(I-ωB)A=(I-ωB)-1-1 ((1-ω)I+ωC) ((1-ω)I+ωC)• 实际上实际上 ,, 赛德尔迭代法或松弛法都是某种赛德尔迭代法或松弛法都是某种简单迭代法简单迭代法 ,, 它们仅是迭代矩阵它们仅是迭代矩阵 AA 不同。不同。

Page 58: MATLAB 小结、 经典迭代法、 CG

定理 对于任意初始向量定理 对于任意初始向量 x(0)x(0) 和常数项和常数项 f,f,由迭代公式由迭代公式

xx(k+1)(k+1)=Ax=Ax(k)(k)+f, k=0,1,2,…+f, k=0,1,2,… 收敛的充要条件是收敛的充要条件是

ρ(A)ρ(A)<< 11

定理 若迭代矩阵定理 若迭代矩阵 AA 的范数‖的范数‖ A‖A‖ << 1,1, 则迭代公则迭代公式式 xx(k+1)(k+1)=Ax=Ax(k)(k)+f+f收敛收敛 ,,且有误差估计式且有误差估计式

( ) * ( 1) ( )

( ) * (0) (1)

1

1

k k k

k

k

Ax x x x

A

Ax x x x

A

Page 59: MATLAB 小结、 经典迭代法、 CG

,

,

,

,

,

,

,

11

11

1

1

00

00

0

kkkk

kTk

kTk

k

kkkk

kkkk

kTk

kTk

k

prp

rr

rr

Aprr

pxx

App

rr

rp

Axbr

x

,CG:

关于 CG方法请参考Shewchuk 的 An introduction to CG without the agonizing pain.

Page 60: MATLAB 小结、 经典迭代法、 CG

练习 :

课本 112页 .

a_{ij}=max{i,j} (i~=j), a_{ii}=10*n*i. 右端项b=A*ones(n,1), 取 n=10.

1.用 Jacobi 或 G-S 求解 ;

2.用 CG求解方程组 .