390 likes | 592 Views
第 二 篇 Matlab. 第一章 矩阵及其基本运算. 一、矩阵的表示 1 .实数值矩阵生成 2 .复数矩阵生成 3 . 符号矩阵的生成 用 sym 函数或 syms 函数 4 . 大矩阵的生成 .m 文件、数据文件的读入. 5 . 特殊矩阵的生成 全零阵、全 1 阵、单位阵: zeros,eye,ones 随机矩阵: 均匀分布: rand 标准正态分布: randn 线性等分向量: linspace Hilbert 矩阵: hilb 魔方矩阵: magic. 二、矩阵操作 1 .取矩阵中的元素
E N D
第一章 矩阵及其基本运算 一、矩阵的表示 1.实数值矩阵生成 2.复数矩阵生成 3. 符号矩阵的生成 用sym函数或syms函数 4. 大矩阵的生成 .m文件、数据文件的读入
5. 特殊矩阵的生成 全零阵、全1阵、单位阵:zeros,eye,ones 随机矩阵: 均匀分布: rand 标准正态分布: randn 线性等分向量: linspace Hilbert矩阵: hilb 魔方矩阵: magic
二、矩阵操作 1.取矩阵中的元素 2.增加及删除矩阵中的元素 3.矩阵的旋转与变形 三、矩阵运算 1. 加减法运算 2. 乘法运算
① 向量乘法 ② 矩阵乘法 ③ 数组乘法(数乘) 3. 集合运算 并:union返回a、b的并集,即c = a∪b 交:intersect返回向量a、b的公共部分,即c= a∩b 差:setdiff返回属于a但不属于b的不同元素的集合,C = a-b 交集的非:setxor
检测集合中的元素:ismember 4. 除法运算 A / B 5. 矩阵乘方 exp(A) :EA 6. 矩阵函数 expmlogmsqrtm
7. 方阵的行列式: det 8. 方阵的逆: inv 9. 矩阵的迹: trace 10. 矩阵的秩: rank 11. 矩阵和向量的范数 norm欧几里德范数 norm(x,inf ) 无穷范数
四、矩阵分解 1.LU分解: [L,U]=lu(X) U为上三角阵,L为下三角阵或其变换形式,满足LU=X 2.QR分解: [Q,R]=qr(A) 求得正交矩阵Q和上三角阵R,Q和R满足A=QR 3.特征值分解 [V,D]=eig(A) 计算A的特征值对角阵D和特征向量V,使AV=VD成立 五、其它 二次型、秩与线性相关性、稀疏矩阵
第二章 Matlab语言基础 一、M文件 1.脚本文件:在Matlab的工作空间内对数据进行操作。 2.函数文件:可接受输入参数并返回输出参数,其内的变量不占用Matlab工作空间,第一行包含function 注: M文件的调用以文件名为准。 %为Matlab的注释符,其后的语句不执行(只对当前行有效)。
二、Matlab语言 1.逻辑判断符 >= <= > < == ~= isequal函数 2.逻辑运算符 & | ~ 3.条件语句 ① if-else语句 ② switch-case语句
4.循环语句 ① for语句 ② while语句 三、编程技巧 1.调试程序 2.输入输出参数 nargin、nargout
第三章 Matlab图形处理 一、二维图形 1. 基本二维图形 Plot用法如下: a. Plot (X) b. Plot (X,Y) c. Plot (X1,Y1,X2,Y2,…) d. Plot (X1,Y1,LineSpec1,X2,Y2, X3,Y3, …)
fPlot在指定的范围limits内画出一元函数y=f (x)的图形 用法:fplot('function',limits) 注意:函数function必须是一个M文件函数或者是一个包含变量 x,且能用函数eval计算的字符串。 例:在同一坐标系下绘制tgx和的sinx图形 fplot(‘[tan(x),sin(x)]’,[-1,1,0,2*pi]) 注意坐标系调整函数axis的作用和用法
其中参数LineSpec定义线条的属性。Matlab中可以对线条定义如下的特性:其中参数LineSpec定义线条的属性。Matlab中可以对线条定义如下的特性: a. 线型: -(实线) -- (划线) :(点线) -. (点划线) b. 颜色 c. 标记类型 d. 标记大小:Markersize
2. 图形标注 title 为图形添加标题 xlabel 为x轴加标注 ylabel 为y轴加标注 text 在指定位置上添加文本字符串 gtext 用鼠标在图形上放置文本 legend 为图形添加图例
3. 特殊二维图形 polar画极坐标形式函数r = f (θ)的极坐标图 用法如下: polar(theta,rho,LineSpec) 例: t = 0:.01:2*pi; polar(t,sin(3*t).*cos(2*t),'--r') 4. 其它二维图形 pie 用x中的数据画一饼形图
semilogxx轴对数图形 loglog双对数图形 bar 用二维垂直条形显示向量或矩阵中的值 barh 用二维水平条形显示向量或矩阵中的值 hist 二维条形直方图,可以显示出数据的分 配情形
二、三维图形 1. 曲面与网格图形命令 mesh 生成由X,Y和Z指定的网线面 在使用该命令前应先用meshgrid函数生成可用 于计算函数值的矩阵网格。 通常用法如下: [X,Y ]=meshgrid(a) Z= f (X,Y) mesh(X,Y,Z)
2. 三维图形的其它形式 contour 曲面的等高线图 pie3 三维饼图 surf在矩形区域内显示三维带阴影曲面图 quiver矢量图或速度图 surfnorm计算与显示三维曲面的法线
第四章 Matlab应用 一、多项式运算 创建、求值、求根、特征多项式、求导 二、极限 limit (F, x, a, ‘right’ ) x趋向于a时F的极限 三、导数 diff (S, v, n)
四、积分 1. 符号积分 a. 不定积分 int (S, v) b. 定积分 int (S, v, a,b) 2. 数值积分 a. 一元函数 quad ( fun,a,b) 自适应Simpson法 trapz ( X, Y ) 梯形法
b. 二元函数 dblquad ( fun,xmin,xmax,ymin,ymax) 在矩形区域[xmin,xmax,ymin,ymax]上计算二元函数z=f (x,y)的二重积分 quad2ggen ( fun,xlower,xupper,ylower,yupper) 在任意区域[xlower,xupper,ylower,yupper]上计算二元函数z=f (x,y)的二重积分
五. 拟合和插值 • 多项式拟合: polyfit ( x, y, n) • 插值: • a. interp1( X,Y,xi,method) 一维数据插值 • b. interp2( X,Y,Z,xi, yi,method) 二维数据插值 • method 可取下列值: • linear 线性插值 • spline 三次样条插值 • cubic 三次插值
例:已知1900年到2010年每隔十年的数据如下: 75.995 91.972 105.711 123.203 131.669 150.697 179.323 203.212 226.505 249.633 256.344 267.893 用插值法求1995年的数据。
六、方程(组)求解 1. 方程(组)的符号解 solve (eq) 求方程的符号解 solve (eq1,eq2,…eqn) 求方程组的符号解 例: solve('x^2+3x-6') solve('-x^2*y+3*x-6','x+y^2-1') 2.方程(组)的数值解 fzero (fun,x0) 用数值方法求方程根
七、积分变换 1. Fourier积分变换 F = fourier( f ) 对符号单值函数 f 中的缺省变量 x(由命令findsym确定)计算Fourier变换形式 例: syms x f = sin(x)*exp(-x.^2) F = fourier(f) 注:用eval函数计算得出的表达式 f = ifourier(F)逆Fourier积分变换 Y = fft(X) 快速Fourier变换
2. Laplace变换 L = laplace(F)输出参量L = L(s)为有缺省符号自变量t的标量符号对象F的Laplace变换 例: syms t f1= sqrt(t); L1 = laplace(f) F = ilaplace(L)逆Laplace变换 3. Z变换 F = ztrans(f )对缺省自变量为n的单值函数f计算z-变换
八、求解微分方程(组) 1. 常微分方程(组)符号解 dsolve(eq1,eq2,… ) 缺省独立变量为t 例: dsolve(‘Dy=1+y^2’,’y(0)=1’) dsolve('D3u=u','u(0)=1','Du(0)=-1', 'D2u(0)=pi') 2. 常微分方程(组)数值解 ode45、ode23、ode113、ode15s、ode23s、de23t、 ode23tb
3. 偏微分方程数值解 ① assempde 单的Poission方程(一类特殊的椭圆型方程),能求解的方程形如: ② hyperbolic 仅能求解如下形式的双曲型方程:
③ parabolic 仅能求解如下形式的抛物型方程:
十、极值问题(优化工具箱)方程数值解 1. 无条件极值问题 fminunc ( fun, x0 ,options) 2. 条件极值问题 fmincon ( fun, x0 ,options)
fsolve(fun,x0) 用数值方法求方程根 例:求下列方程的根 • 解:先建立方程函数文件,并保存为myfun.m • function F = myfun(x) • F = [2*x(1) - x(2) - exp(-x(1)); • -x(1) + 2*x(2) - exp(-x(2))]; • 然后调用优化程序 • x0 = [-5; -5]; % 初始点 • [x,fval] = fsolve(@myfun,x0,optimset('fsolve'))
第五章 Matlab的外部接口 • 本章主要包括两部分内容: • 在VC中调用Matlab • 用mcc将.m文件翻译为cpp源文件,然后调用 • 在VC中直接调用Matlab的C++ Math Library • 利用Matcom(MIDEVA) • 在Matlab中调用C程序 用C语言编写Matlab的MEX程序
一、编程环境 1. 开发时必需的文件 %Matlab%\extern 整个目录是开发的必需目录 %Matlab%\extern\include\*.h 目录 %Matlab%\extern\include\cpp\*.hpp 目录 %Matlab%\extern\lib\win32\*.lib目录 %Matlab%\extern\lib\win32\microsoft\msvc60\*.lib目录
2. VC6的设置 ○设置include搜索目录 加入c/c++ math和c/c++ graphics的头文件 Tools->Options->Directories->Include files 中加入: %Matlab%\extern\include\cpp\和%Matlab%\extern\include\ ○定义预处理宏MSVC、MSWIND Project->Setting->C/C++页中的Category->Preprocessor 中加入 MSVC、MSWIND
○加入lib文件 Project ->Add to Project ->Files… 中加入: %Matlab%\extern\lib\win32\microsoft\ msvc60\*.lib 以及 %Matlab%\extern\lib\win32\libmatpm.lib ○设置运行时动态链结库 Project->Setting->C/C++页中的Category->Code Generation中选择Multithreaded DLL。
3. 运行时(发布)所需文件 %MATLAB%\extern\lib\win32\mglinstaller.exe 所生成的*.dll
C++ Math Library 中的函数传递 DECLARE_FEVAL_TABLE FEVAL_ENTRY(myfun) END_FEVAL_TABLE