MATLAB 学习指南

合集下载

MATLAB入门指南

MATLAB入门指南

MATLAB入门指南MATLAB是一款功能强大的数值计算软件和编程环境,广泛应用于科学、工程和数据分析领域。

本文将为初学者提供一份MATLAB入门指南,以帮助他们快速掌握基本概念、使用技巧和常见功能。

第一部分:MATLAB基础1. MATLAB的介绍MATLAB是由MathWorks开发的高级编程语言和环境,其主要用于数值计算、数据可视化和算法开发。

它与其他编程语言相比,有着简单易学的语法和丰富的内置函数库。

2. MATLAB的安装与设置在使用MATLAB之前,您需要先下载和安装MATLAB软件。

安装过程通常是简单的,只需按照提示一步一步执行即可。

安装完成后,您可以根据需要进行一些个性化设置,如选择默认工作目录和字体大小。

3. MATLAB的基本命令和运算符MATLAB的基本命令和运算符与其他编程语言类似,包括数学运算符(加减乘除、幂运算等)、逻辑运算符(与或非等)和比较运算符(等于、大于、小于等)。

您可以使用MATLAB作为计算器来进行简单的数学计算,如计算平方根、三角函数等。

4. MATLAB的变量和数据类型在MATLAB中,您可以使用变量来存储和操作数据。

MATLAB支持多种数据类型,包括数值、字符、逻辑和结构等。

您可以使用赋值语句将数据存储在变量中,并使用变量进行计算和操作。

5. MATLAB的数组和矩阵操作MATLAB以矩阵为基础进行计算,因此对于初学者来说,了解如何创建、操作和计算矩阵是至关重要的。

您可以使用MATLAB提供的函数来创建矩阵,并使用索引和运算符对矩阵进行操作。

第二部分:MATLAB编程和算法1. MATLAB的脚本文件和函数MATLAB提供了编写脚本文件和函数的能力,以便在单个文件中组织代码。

您可以使用脚本文件来一次性执行一系列MATLAB命令,而函数则可以封装一段可重复使用的代码块。

2. MATLAB控制结构MATLAB提供了多种控制结构,如条件语句(if-else)、循环语句(for、while)和跳转语句(break、continue)。

简单易学的MATLAB编程入门指南

简单易学的MATLAB编程入门指南

简单易学的MATLAB编程入门指南MATLAB是一种强大而广泛应用于科学计算与工程开发中的高级编程语言和环境。

它可以帮助工程师、科学家和学生快速、高效地进行数据分析、算法开发和可视化。

本文将为初学者提供一份简单易学的MATLAB编程入门指南,帮助他们快速上手并应用于实践。

第一章:MATLAB的安装与基本概念在开始学习MATLAB之前,首先需要正确安装MATLAB软件。

MATLAB官方网站提供了支持不同操作系统的安装程序,用户可以根据自己的需要进行下载。

安装完成后,打开软件,熟悉界面布局与基本概念,如命令窗口、编辑器、工程管理器等。

第二章:MATLAB基本语法与数据类型MATLAB基于矩阵与向量运算,因此掌握基本的数据类型与运算是编写MATLAB程序的基础。

本章将介绍MATLAB的基本语法规则、变量与常量的定义、数学运算、逻辑运算等知识点,并通过实例进行演示。

第三章:MATLAB的函数与脚本MATLAB中的函数与脚本是编写程序的重要组成部分。

本章将详细介绍函数与脚本的定义与使用方法,并讲解函数与脚本之间的区别。

同时,还会介绍常用的MATLAB内置函数,如plot、sqrt、sin等,以及如何自定义函数。

第四章:MATLAB的矩阵与向量操作矩阵与向量是MATLAB最常用的数据结构,也是实现数据分析与算法开发的核心。

本章将介绍如何创建矩阵与向量、对矩阵与向量进行计算与操作,并涉及常见的矩阵运算、线性代数运算、数据筛选与排序等技巧。

第五章:MATLAB的数据可视化MATLAB提供了丰富的绘图函数和工具箱,可以方便地进行数据可视化与图形展示。

本章将介绍如何使用MATLAB进行简单的二维和三维绘图,包括折线图、散点图、柱状图、饼图、曲面绘制等。

同时,还会介绍如何设置图形属性、添加图例和坐标轴标签等。

第六章:MATLAB的数据分析与统计MATLAB提供了丰富的数据分析与统计函数,可以方便地进行数据预处理、特征提取和模型评估等工作。

MATLAB实用指南

MATLAB实用指南

MATLAB实用指南第一章:MATLAB简介1.1 MATLAB的由来与发展MATLAB是矩阵实验室(Matrix Laboratory)的简称,由美国MathWorks公司开发和推出。

最初是为了解决科学和工程计算问题而设计的,如今已成为科学和工程领域广泛使用的计算工具。

1.2 MATLAB的特点和优势MATLAB具有强大的数学计算和可视化能力,支持多种数据类型和算法,能够处理从简单的数值计算到复杂的符号计算。

它提供了丰富的工具箱,包括信号处理、图像处理、控制系统、统计分析等领域的功能,方便用户进行专业的数据分析和模型建立。

第二章:MATLAB基础知识2.1 MATLAB的环境和界面MATLAB的界面分为命令窗口、工作空间、编辑器、命令历史记录等组成,提供了一种交互式的环境,方便用户进行试验和调试。

2.2 MATLAB变量与数据类型MATLAB支持常见的数据类型,如数值型、字符型、逻辑型等,并具有动态类型特性,可以方便地进行变量的声明和操作。

2.3 MATLAB基本操作与函数在MATLAB中,用户可以通过运算符进行数值计算、矩阵操作等,同时也可以使用内置函数或自定义函数来实现更复杂的计算。

第三章:MATLAB数据处理与分析3.1 数据导入与导出MATLAB提供了丰富的数据导入和导出函数,支持各种常见的数据格式,如文本文件、Excel文件、图像文件等,方便用户进行数据的读取和保存。

3.2 数据处理与统计分析MATLAB提供了多种数据处理和统计分析的函数和工具箱,用户可以利用这些功能进行数据清洗、处理缺失值、计算统计指标等工作。

3.3 数据可视化MATLAB提供了强大的绘图功能,用户可以利用绘图函数绘制各种类型的图表,如折线图、饼图、散点图等,以直观、清晰的方式展现数据分布和关系。

第四章:MATLAB建模与仿真4.1 数学建模与求解MATLAB提供了多种数学建模和求解工具,用户可以通过建立数学模型并使用数值方法进行求解,解决各种实际问题。

(完整版)Matlab入门教程

(完整版)Matlab入门教程

第1章MATLAB操作基础1.1 MATLAB概述1.1.2 MATLAB的主要功能1.数值计算MATLAB以矩阵作为数据操作的基本单位,还提供了十分丰富的数值计算函数。

2.绘图功能可以绘制二维、三维图形,还可以绘制特殊图形(与统计有关的图,例如:区域图、直方图、饼图、柱状图等)。

3.编程语言MATLAB具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。

4.MATLAB工具箱MATLAB包含两部分内容:基本部分和各种可选的工具箱。

MATLAB工具箱分为两大类:功能性工具箱和学科性工具箱。

1.1.3MATLAB语言的特点❖语言简洁紧凑,使用方便灵活,易学易用。

例如:A=[1 2 3;4 5 6;7 8 9]一条语句实现了对3x3矩阵的输入。

❖语句功能强大,一条语句相当于其它语言的一个子程序,例如fft。

❖语句简单,内涵丰富。

同一个函数有不同的输入变量和输出变量,分别代表不同的含义。

❖Matlab既具有结构化的控制语句(if、for、while)又支持面向对象的程序设计。

❖方便的绘图功能。

❖包含功能强劲的工具箱。

❖易于扩展。

1.1.4 初识MATLAB例1-1 绘制正弦曲线和余弦曲线。

x=[0:0.5:360]*pi/180;plot(x,sin(x),x,cos(x));例1-2 求方程3x4+7x3+9x2-23=0的全部根。

p=[3,7,9,0,-23]; %建立多项式系数向量x=roots(p) %求根例1-3 求积分quad('x.*log(1+x)',0,1)例1-4 求解线性方程组。

a=[2,-3,1;8,3,2;45,1,-9];b=[4;2;17];x=inv(a)*b1.2 MATLAB的运行环境与安装1.2.1 MATLAB的运行环境硬件环境:(1) CPU(2) 内存(3) 硬盘(4) CD-ROM驱动器和鼠标软件环境:(1) Windows 98/NT/2000 或Windows XP(2) 其他软件根据需要选用1.2.2 MATLAB的安装运行系统的安装程序setup.exe,可以按照安装提示依次操作。

matlab入门图文教程

matlab入门图文教程

02
MATLAB基础操作
界面介绍
MATLAB主窗口
包括命令窗口、工作空间、命令历史和当前 文件夹等部分,是进行MATLAB操作的主要
界面。
编辑器窗口
用于显示MATLAB绘制的图形和图像,支持 多种图形格式。
图形窗口
用于编写和编辑MATLAB代码,提供语法高 亮、代码折叠等功能。
工具箱窗口
提供MATLAB各种工具箱的访问和使用,如 信号处理、图像处理等。
matlab入门图文教程
目录
• MATLAB概述与安装 • MATLAB基础操作 • 图形绘制与可视化 • 数值计算与数据分析 • 程序设计与优化 • MATLAB高级功能与应用
01
MATLAB概述与安装
MATLAB简介
MATLAB(Matrix Laboratory)是一款由 MathWorks公司开发的商业数学软件,主要用于算法
脚本文件与函数文件
脚本文件是一系列按顺序执行的命令,而函数文件则定义了一个或多个可重用的函数。脚 本文件主要用于简单任务或一次性操作,而函数文件则适用于更复杂的计算和数据处理任 务。
变量与数据类型
MATLAB支持多种数据类型,包括数值、字符、逻辑值等。变量无需声明即可直接使用, 且变量名区分大小写。
运算符与函数
01
算术运算符
包括加(+)、减(-)、乘( *)、除(/)等,用于进行基 本的数学运算。
02
关系运算符
包括等于(==)、不等于( ~=)、大于(>)、小于(< )等,用于比较两个值的大小 关系。
03
逻辑运算符
包括与(&&)、或(||)、非 (~)等,用于进行逻辑运算 。

Matlab入门教程

Matlab入门教程
2. 插值与拟合
在实际中,常常需要处理由实验或测量所得到的一批离 散数据。插值和拟合就是要通过这些数据去构造某一类 已知函数的参数或寻找某个近似函数,使所得到的近似 函数与已知数据有较高的拟合精度。 由于近似的要求不同,二者在数学方法上是完全不同的。
插值
设 有 一 组 实 验 数 据 (x i , y i ), i 0 ,1, 2 , , n . 当 要 求 这 些 节 点 之 间 的 某 点 x处 的 函 数 值 时 ,常用较简单的、满足一定条件的插值 函
2.绘图功能 3.Matlab语言体系 4.Matlab工具箱
Matlab的开发环境
1.操作桌面
当前文件夹 详细信息
当前目录 提示符
命令行窗口
工作区
变量名命名规则:以字母开头,后跟字母、数字、下划
线,长度不超过63个字符。 如abc,a123,zqy_123都是合法变量名,但1a,a2,b#123#均不合法。
1上服从均匀分布的 随机数)
Randn(生成服 randn(n),randn(m,n),randn(m,n,p),randn(size(b))
从标准正态分布的 随机数)
Diag(生成对 diag(b)
角阵)
magic
magic(n)
目录
一、Matlab概述 二、Matlab的基本数学功能 三、Matlab数值计算 四、Matlab符号计算 五、Matlab程序设计 六、Matlab绘图
如果矩阵的元素都是整数,则矩阵显示没有小数;如果矩阵元素不全是整数, 则矩阵以短格式显示(小数点后面保留四位);如果矩阵的最大元素比1000大 或比0.001小,则输出时自动加入比例因子。如 >>x=[1234.5 0.0009]

MATLAB指南(基础知识及其应用大全)

MATLAB指南(基础知识及其应用大全)

MATLAB指南(基础知识及其应用大全)一、 MATLAB的数值计算功能1.1 创建矩阵(分号表示换行)如A=[2,3,5;1,2,8]法1:直接输入:A=[ 2 3 4.2 -1.31 2.3 5 0.3-2 4 -1.3 4.5]法2(随机产生):产生3×4阶随机阵A=rand ( 3, 4 )1.2.矩阵运算和数组运算两矩阵相乘、相加减A*B A+B A-B两矩阵点乘 A. *B (即对应元素相乘)矩阵求逆inv ( A )矩阵转置A'矩阵相除左除 A \ B (即A的逆阵A-1乘B )习惯上用右除 A / B ( 即A乘B的逆阵B-1 )点除 A. / B (即A与B的对应元素相除)A. / m (A的各元素均除以m)m./A (m除以A的各元素)矩阵乘方A^p (A的正整数次方), A. ^p (表示A的每一个元素a ij^p )基本矩阵函数:det(A) 方阵的行列式inv(A) 逆矩阵eig(A) 矩阵的特征值[v, d ]=eig(A) 矩阵的特征向量和特征值rank(A) 矩阵的秩trace(A) 矩阵的迹norm(A) 矩阵的范数a ij=A(I,j) 表示矩阵A的元素a ij a11a13a14A1=A(1:3,[1 3 4] )表示矩阵A中第1到3行的a21a23a24第1、3、4个元素取出组成新的矩阵a31a33a34特殊矩阵zeros (m,n) 形成m×n阶零矩阵ones (m,n) 形成m×n阶全为1的矩阵eye (m,n) 形成m×n阶单位矩阵rand (m,n) 形成m×n阶随机矩阵diag(v) 对角线元素为向量v 的方阵randn (n) 形成n阶正态随机矩阵tril (A) 形成下三角矩阵triu (A) 形成上三角矩阵1A (:,2)=[ ] 删除第2列,A(:,3)=[1;2;3] 把第三列变为(1, 2, 3)A (2,:)=[ ] 删除第2行,A(3,:)=[1,2,3] 把第三行变为(1, 2, 3)orth(A) 求A的正交基magic (n) 产生n阶魔方阵poly(A) 求A的特征多项式的系数,poly2str(A) 求A的特征多项式balance(A)相似变换1.3.函数sin (x) 正弦asin (x) 反正弦cos (x) 余弦acos(x) 反余弦tan (x) 正切atan (x) 反正切cot (x) 余切acot (x) 反余切sec (x) 正割asec (x) 反正割csc (x) 余割acsc (x) 反余割exp (x) 指数e x log (x) e为底的对数log10 (x) 10为底对数sqrt (x) 开平方abs (x) 绝对值或模a+b*i 复数angle (x) 复数幅角conj (x) 共轭复数imag (x) 复数虚部real (x) 复数实部eps 相对误差round (x) 四舍五入rem (x, y) x除以y的余数fix (x) 近似到距0最近的整数floor (x) 近似到小于本身的最大整数ceil (x) 近似到大于本身的最小整数pi 圆周率inf 无穷大二、数值分析2.1.数理统计函数max (A) 矩阵A每列的最大值max (v) 向量v (数组)的最大值min (A) 矩阵A每列的最小值min (v) 向量v(数组)的最小值mean (A) 矩阵A每列的平均值mean (v) 向量v(数组)的平均数median (A) 矩阵A每列的中位数sum (A) 矩阵A每列和sum (v) 向量v(数组)求和sort (A) 矩阵A每列升序排列sort (v) 向量v(数组)升序排列[y, i]= sort (v) 向量v升序排列,并记原来位置std (A) 每列求标准差(修正值)std (v) 求数组标准差(修正值)cumprod (A) 矩阵A每列累计积prod (v) 求向量各元素的积cumsum (A) 矩阵A每列累积和cumsum (v) 累积和cov (A) 协方差矩阵cov (x, y) X和Y的协方差corrcoef (A) 求相关系数矩阵corrcoef (x, y) X和Y的相关系数cross (A, B) 求A和B的外积dot (A, B) 求A和B的内积22.2.积分、求根、求极值积分:求f(x)=e x sinx在区间[0 ,л]上的积分(分号作用:1.换行2.不输出)(x的定义域)x=[0:0.01:pi ];或d=pi/100;x=0:d:pi;( 梯形法)y=sin(x).*exp(x);y=sin(x).*exp(x);cum=trapz(x,y) cum=trapz(y)*d得:12.0701 得12.0701欧拉法:d=pi/100;x=0:d:pi;nt=length(x);y=sin(x).*exp(x);sc=cumsum(y)*d;scf=sc(nt)求根:求解x^3-6*x^2-72x-27=0解法1:(适合于x的n次方程)r=roots([1,-6,-72,-27])则x=12.1229, -5.734, -0.3084解法2:x=fzero( 'x^3-6*x^2-72*x-27',10) 则x=12.1229(*号不能省) x=fzero( 'x^3-6*x^2-72*x-27',0) 则x=-0.3084x=fzero( 'x^3-6*x^2-72*x-27',-4) 则x=-5.734(10,0,-4是初始值,预先得知道该初始值附近有根计算机才能进行计算)求解 cos(x)=0 在-л,л之间的根x=fzero('cos(x)',1) 则x=1.5708x=fzero('cos(x)',-1) 则x=-1.5708cos(x)+sin(x)+x=0x=fzero('cos(x)+sin(x)+x',1) 则x=-0.4566 解法3: y='sin(x)+cos(x)+x';r=solve(y) 则r=-0.4566y='x^2-3*x+12';r=solve(y) 则r=3/2+1/2i*39^1/2,r=3/2-1/2i*39^1/2y='x^2–a*x+4';r=solve(y,‘x’) 则x=a/2+1/2(a^2-16)^1/2x=a/2-1/2(a^2-16)^1/2r=solve(y,'a') 则 a=(x^2+4)/x求极值点:求 y=x^3-2*x-5 在0<x<5中的最小值点x=fmins('x^3-2*x-5',0,5) 则x=0.816532.3. 多项式运算(1)计算y=x^5+0.1*x^4-100 在x=0.1处和x=10处的值y=[1 .1 0 0 0 -100];y=polyval (y, 0.1 ) 则y= -100重新运行:y=[1 .1 0 0 0 -100];y=polyval (y, 10 ) 则y= 100900(2)多项式求根:x^4+10*x^3-20=0y=[1 10 0 0 -20 ];xs=roots(y) 则x= -10.0199, -.5964+1.1358i, -.5964 -,1.1358i, 1.2128(3)求以-5,5 , -3为根的多项式x=[ -5,5, -3];p=poly(x) 则显示:1 3 -25 -75 ,即x^3 -3x^2-25x-75(4)多项式微分:y=x^5+0.1x^4-200p=[1, 0.1, 0, 0, 0, -200 ];y=polyder(p) 则显示:5 0.4 0 0 0即y=5x^4+0.4x^3(5)多项式相乘、除展开(x^2+2*x+2)(x+4)(x+1)c=conv([1 , 2 , 2 ] , conv ([ 1 , 4 ] , [1 , 1 ]));c=poly2str(c, 'x' ) 则c=x^4+7x^3+16x^2+18x+8相除(x^4+7x^3+16x^2+18x+8) / (x+4)c=[1 7 16 18 8 ];[ q, r1 ]=deconv( c, [ 1,4 ])则q=1 3 4 2 , r1= 0 0 0 0 0即q=x^3+3x^2+4x+2 余数为0[q, r2]=deconv(c, [1 ,3 ])则g=1 4 4 6, r2= 0 0 0 0 -10 (余数为-10)2.4. 数理统计函数x=[ 1.25 1.2 2.1 2.5 2.4 1.86 1.46 1.59 2.3]最大值:ma=max(x) ma=2.5 最小值:mi=min(x) mi=1.2平均数:me=mean(x) me=1.8511 中数:m0=median(x) m0=1.8688 标准差(修正值):s=std(x) s=0.499 和:m=sum(x) m=16.64累积和:y=cumsum(x) y=1.25, 2.45, 4.55, 7.05, 9.45, 11.31, 12.77, 14.36, 16.66积:sm=prod(x) sm=187.6949升序排列:s=sort(x) s=1.2 1.25 1.46 1.59 1.86 2.1 2.3 2.4 2.5对于矩阵A,只要把上面式子中的x 改为A,可求得矩阵每一列的最大者,最小者,平均数,等等。

MATLAB科学计算工具入门指南

MATLAB科学计算工具入门指南

MATLAB科学计算工具入门指南第一章:MATLAB的介绍MATLAB是一款面向科学计算和工程应用的高级编程语言和环境。

它拥有强大的数值计算、矩阵处理和图形可视化能力,广泛应用于各个学科领域的科学计算和工程问题求解。

本章将为读者介绍MATLAB的基本概念和特点,以及如何安装和启动MATLAB环境。

第二章:MATLAB的基本语法本章将介绍MATLAB的基本语法,包括变量的定义与赋值、运算符的使用、条件判断和循环结构等。

通过对MATLAB语法的学习,读者将能够掌握基本的编程技巧和逻辑思维方式。

第三章:向量和矩阵运算MATLAB中矩阵和向量的处理是其最强大的功能之一。

本章将着重介绍MATLAB中矩阵和向量的运算、操作和应用,包括矩阵乘法、转置、求逆、切片等。

通过学习本章内容,读者将能够灵活地利用MATLAB进行矩阵和向量的处理,从而更高效地解决实际问题。

第四章:数据可视化MATLAB拥有强大的数据可视化功能,可以方便地绘制各种类型的图形。

本章将介绍MATLAB中绘图的基本方法和技巧,包括常见的二维和三维图形的绘制、图像的处理和显示等。

通过学习本章内容,读者将能够利用MATLAB绘制各种图形,直观地展示数据和结果。

第五章:数值计算与优化MATLAB在数值计算和优化领域也有很好的表现。

本章将介绍MATLAB中的数值计算和优化方法,包括数值积分、常微分方程求解、最优化问题求解等。

通过学习本章内容,读者将能够利用MATLAB进行高效的数值计算和优化,提高问题的求解精度和效率。

第六章:MATLAB与外部工具的集成MATLAB可以与其他工具和编程语言进行集成,实现更强大的功能。

本章将介绍MATLAB与其他常用工具和语言(如C++、Python等)的集成方法和技巧,以及如何利用MATLAB进行数据交互和接口开发。

通过学习本章内容,读者将能够充分利用MATLAB与外部工具的组合优势,提高工作效率和计算能力。

第七章:MATLAB的应用案例本章将介绍MATLAB在各个学科领域的应用案例,包括工程、物理、生物、金融等。

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

MATLAB 学习指南
第四章. 高级矩阵运算
4.1. 稀疏矩阵
稀疏矩阵
为了展现使用稀疏矩阵带来的有效性,我们将两次使用有限差分法来解一个PDE。

首先,我们将会使用矩阵指令。

矩阵指令会使用到目前为止我们已经学过的全矩阵。

其次,我们将使用新的指令。

新的指令充分利用大多数元素都是零这一事实来极大地减少内存需求量和解PDE所需的浮点运算的次数。

使用全矩阵格式进行计算
通过使用中心有限差分法来离散1维空间中的拉普拉斯算子可得到下列矩阵。

设定离散PDE所得的矩阵,使其1维方格包含点间距为1的num_pts点。

在x=1和x=num_pts处的Dirichlet边界条件已经被设定好了。

对于内部点,我们有一个源项。

现在,我们使用标准MATLAB解算程序来获得格点处PDE的解。

现在我们进一步观察Afull。

指令spy(A)能够绘制矩阵A的图形,具体做法是:无论何处,只要矩阵A的一个元素非零,就编写一个点。

底部的数字nz是非零元素的个数。

我们可以看到只有一小部分矩阵元素非零。

由于我们按常规的方式为格点编号,每个格点的邻近格点都存储在邻近区域,所以此矩阵中的非零元素位于主对角线上以及紧邻两条对角线的上方和下方。

即使我们不按常规给格点编号,我们得到的非零点仍然是这么少。

这种情况是我们经常遇到的,即,在PDE的数值模拟中,我们常常遇到的矩阵都是稀疏的,那就是说,只有一小部分点是非零的。

对于这个矩阵,元素的总数目是:
这就意味着Afull的大部分空间是空的,我们浪费了很多内存来存储我们已知的值为零的元素。

除了Afull,清除内存中的所有变量。

稀疏矩阵
使用指令“sparse”,我们可将一个矩阵转化成为稀疏的格式。

MATLAB把一个稀疏矩阵当作一个NZ×3型的数组来存储,其中,NZ是非零元素的个数。

第一列是行数,第二列是非零元素的列数,第三列是非零元素的实际值。

总内存使用量远小于用全矩阵格式时的总内存使用量。

现在,我们将使用稀疏矩阵格式来解决问题
接下来,我们设定格点值。

现在我们声明:从一开始矩阵A就有稀疏矩阵的结构。

首先,我们计算非零元素的个数(或此数的上限)。

我们可以看到,对于相应于每个内部点的每一行,我们都有3个值,但是,对于第一行和最后一行,我们仅有一个值。

因此,非零元素的个数是:
我们现在使用“spalloc(m,n,nz)”指令来为m×n型的,仅有nz个非零元素的稀疏矩阵分配内存。

我们现在设定A矩阵的值。

在x=1和x=num_pts处的Dirichlet边界条件已经被设定好了。

对于内部点,我们有一个源项。

现在,当我们调用MATLAB标准解算程序时,它能自动辨别出A是一个稀疏矩阵并利用这一事实使用解算程序的运算法则。

从A和Afull的几行代码中可以看出稀疏矩阵格式所需的内存量远小于全矩阵格式所需的内存量。

同样,如果N是格点数,我们看到全矩阵的大小是N^2;但是,稀疏矩阵所需的内存大小仅约为3*N。

因此,随着N的增加,稀疏矩阵格式将比全矩阵格式有效得多。

对于具有数千格点的复杂模拟来说,我们只能寄希望于利用稀疏性来解决这些问题。

使用稀疏矩阵还可以提高执行速度,为看到执行速度的提高,仔细检查下面两种矩阵乘法的算法。

矩阵乘法的全矩阵算法
矩阵乘法的稀疏矩阵算法
最后,我们注意到求一个稀疏矩阵的逆阵通常会极大地破坏其稀疏性。

因此,如果我们有了矩阵A和矩阵C=A*B的值,想要计算矩阵B,我们不要使用inv(A)*C,而要使用“left matrix division”算符A\C。

它会返回一个与inv(A)*C等价的矩阵,但使用MATLAB解算程序可以充分利用稀疏性。

我们看到消去法产生的误差已经把非常小的非零值插入到远离中心三对角线的元素中了。

我们要想去除这些元素只能保留大于容限值的元素。

由于我们不想经历中间步骤,因为在中间步骤我们不得不存储具有许多非零元素的矩阵,所以通常我们不以这种方式来计算矩阵。

相反,我们仅限于解A*x=b这种形式的线性系统,其中,x和b是向量,A是稀疏矩阵,我们可以直接输入矩阵A的值。

因此,我们就避免了与从舍去误差中产生许多非零元素这一问题有关的内存问题。

4.2. 普通矩阵运算/本征值
使用“det”可用来计算方阵的行列式。

矩阵的其它普通函数:
使用指令“eig”可计算矩阵的本征值。

如果也要求计算本征向量,句法是:
这里V是包含本征向量(作为列向量)的矩阵,D是包含本征值的对角阵。

使用指令“eig(A,k)”可以计算A的k首项本征值;那就是说,计算具有最大模量的k本征值。

相似地,首项本征值的本征向量也可以用eigs来计算。

就稀疏矩阵来说,只有指令“eigs”可以被使用。

4.3. LU分解
使用多个b向量并使用LU分解,可解决线性系统Ax=b。

这里,我们来分解P*A=L*U,其中,P是一个置换矩阵(因此inv(P)=P’),L是一个下三角阵,U是一个上三角阵。

如果在因式分解的过程中没有进行枢轴选择(从本质上说,这是高斯消去),P就是一个恒等矩阵。

一旦完成LU因式分解,使用下列线性代数步骤就可解决Ax=b的问题。

这就得到了下列两个线性问题,包括可以用替换法解的三角矩阵。

进行LU因式分解的MATLAB指令是“lu”。

我们使用一个随机的非奇异阵来证明算法。

通过增加一个恒等矩阵来确保非奇异性。

进行LU因式分解。

比较所包含的矩阵的结构
调用LU因式分解和调用稀疏矩阵的方法相同;但是,一般而言,因式化的矩
阵L和U不如矩阵A稀疏,所以使用LU因式分解时有效性会下降一些。

矩阵的带宽越大,即,所找到的非零值离主对角线越远,这个问题就会越明显。

有时,我们仅想要一个近似的因式分解B=L*U,其中,B与A足够接近以至于C=inv(B)*A与恒等矩阵差别不大,即,C的最大和最小本征值之比小于A的最大和最小本征值之比。

在这里,B被称为预处理量,用于最优化法以及解决某类线性系统的问题。

当我们进行一个不完全LU因式分解时,我们仅计算L和U 中对应于A中非零元素的元素,或者我们另有选择,忽略绝对值小于给定值的元素。

下列代码说明了不完全LU因式分解的用法。

除了设定某些元素等于零之外,使B=A。

令远离对角线的一些元素等于零。

但是,看一下B的和近似因式分解的本征值。

4.4. QR分解
P是置换矩阵,Q是正交矩阵,R是上三角阵,通过调用指令“qr”来进行因式分解A*P=Q*R。

如果想得到A=QR分解(即P=1),指令是:
4.5. Cholesky分解
如果A是Hermetian矩阵(即A=A’)那么我们知道所有本征值都是实数。

另外,如果所有本征值都大于零,对于所有向量x都有x’*A*x>0,那么我们就说A是正定的。

在这里,进行Cholesky分解(即A=R’*R)是可能的,其中R 是上三角阵。

这就相当于写出A=L*L’,其中L是下三角阵。

首先,我们使用下面的正定矩阵。

对于稀疏矩阵,我们可以进行不完全Cholesky分解,它能给出用做预处理量的近似的因式分解,且不失稀疏性。

在此特殊的情况下,对于高度结构化的矩阵来说,不完全因式分解与完全因式分解是一样的。

4.6. 奇异值分解
只有在方阵的情况下定义本征值和本征向量才有意义。

非方阵本征值的概念的普遍化通常也很有用。

(m×n)型的矩阵A的奇异值分解(SVD)被定义为A=U*D*V’,其中,D是一个包含奇异值的(m×n)型对角阵,U是一个包含右本征向量的(m×m)型矩阵,V’是一个包含左本征向量的(n×n)型伴随(转置与共轭)阵。

在MATLAB中,使用指令“svd”可以进行奇异值分解。

相关文档
最新文档