Matlab历史
MATLAB是(Matrix Laboratory)的缩写,最初是美国新墨西哥大学Moler教授编写的LINPACK和EISPACK接口程序。
1984年,MathWorks公司创建,MATLAB正式推向市场。20世纪90年代以来,MATLAB已成为数值计算软件的佼佼者。
从底层架构上擅长矩阵计算、强大丰富的不会冲突的工具包(函数库)以及形成的平台生态是其优势。
以"矩阵运算"为基础
这导致编程思想上应有所变化。善于利用矩阵运算及已有的函数可简化程序且大大加快程序运算速度。
例:判断x1中元素是否大于4
赋值
数字:a=1; b=pi; c=2.56;
向量:a=[1,2,3]; b=[1;2;3]; (分别是行向量和列向量)
二维矩阵:a=[1 2 3; 4 5 6; 7 8 9];
矩阵的大小:[x,y]=size(a); 或 x=size(a,1); y=size(a,2);
矩阵转置:b=a';
生成等差数列向量:a=1:2:9; a=[1 3 5 7 9]
生成特殊的矩阵:a=ones(m,n); b=zeros(m,n);
随机数生成:a=rand(m,n);
调用矩阵值
假定A=[1 2 3; 4 5 6; 7 8 9];
A(2,3)->ans=6
A(2,:)->ans=[4 5 6]
A(:,3)->ans=[3;6;9]
A(1:2,1:3)->ans=[1 2 3; 4 5 6]
字符串
a='Cloud is in the sky, and water is in the bottle';
b='云在青天水在瓶';
一般不考虑用数组存储若干字符串(因为长度经常不等)。
可以用元胞数组(cell):c={a,b}; 元胞数组可以存储不同类型不同大小的变量,可看作是介于数组和结构体之间的一种数据结构。
c{2}->ans='云在青天水在瓶'
字符串的首尾相接:c=strcat(a,b);
字符串的比较:c=strcmp(a,b);
数字转换成字符:a=2; num2str(a,'%d')ans='2'
显示字符串:disp(b);
matlab已经准备了你能想到的几乎所有基本或不基本的操作。查到所需的函数然后在命令行中输入help+函数名学习其使用规则即可。
例如:help num2str
基本矩阵运算
注意*是线性代数中讲过的矩阵乘法运算,而.*是两个size完全相同的矩阵进行对应矩阵元的乘法运算。以下点除、点乘幂同理。
加减法也适用于矩阵中所有矩阵元同时加减一个值的运算。
|-----|-----------------------|
| + | 加法运算,适用于两个数或两个同阶矩阵相加. |
| --- | 减法运算 |
| * | 乘法运算 |
| .* | 点乘运算 |
| / | 除法运算 |
| ./ | 点除运算 |
| ^ | 乘幂运算 |
| .^ | 点乘幂运算 |
| \ | 反斜杠表示左除. |
| == | 判断相应矩阵元是否相等 |
| ~= | 判断相应矩阵元是否不等 |
Matlab中的矩阵乘法
判断函数
循环语句
存储程序的两种方法
一般没人会到命令行窗口里运行(在命令行里回车就直接执行语句了,如果需要换行而不执行应当是SHIFT+回车)。
在编辑器里写程序,一种是将给到命令行里的指令直接写在.m文件里(不以函数的形式存在),调用时直接在命令行里输入文件名即视同将这所有指令输入到命令行里执行。
另一种是用函数的方式存储:function [m,n,...]=fcnname(a,b,...) 函数内容 end。仍是存储在.m文件里。调用时按调用函数来处理。
注意,被调用的.m文件所在的文件夹需在matlab中的"设置路径"里添加进可被调用的文件夹库中,否则找不到这个文件。如安装其它基于matlab的"软件"也是同理。
命令形式or函数形式?
主要差别在于变量的调用与放置。
命令形式可以直接调用工作区(内存中)的已有变量,但执行过程中新定义的变量也将混入工作区中。
函数形式不会将函数运行中的变量混入工作区,函数运行结束之后这些变量直接释放。但给函数传入变量需要在函数中额外定义自变量(输入项)。
曲线的绘制
图片的读入、显示和存储
直接用imread('图片名+后缀名')即可读入一般格式的图片。
对于医用图片,它是dicom格式,可用dicomread读入图片,及用dicominfo读取图片信息(例如扫描参数、扫描设备、被试姓名都存储在里面,出于隐私保护的考虑一般要设法隐去被试姓名)。
展示图片一般用imshow函数。潜在变量很多。
存储图片,save(gcf,'包含路径的文件名','存储格式')。gcf表示当前操作的图片,文件名如不包含路径则默认是存储在当前路径。
对图像的操作
数据拟合
高次多项式拟合:p=polyfit(x,y,n)。返回是这n次多项式的n+1个系数。
任意目标函数拟合:p=lsqcurvefit(@fcn,x,y,pini,pmin,pmax)。给定有未知参数待拟合的目标函数fcn,自变量x,因变量y,用最小二次模法(least square)拟合出未知参数p。
数值解方程:x=fsolve(@fcn,y)。即有方程fcn(x)=y,y已知,将x解出。
神经网络
生成前馈神经网络:feedforwardnet([k1 k2 k3 ...])
这样生成的网络变量结构体(以下称为net)中内涵丰富(教师认为自己也没看全),一些有用的:net.trainFcn(迭代优化算法选择),net.trainParam(拟合参数选择,例如最多连续试错步数、最小步长等),net.divideparam(如何分割数据集、训练集评价集测试集的比例分配等),net.performParam.regularization(防止各神经元取值过大的过拟合)。
前馈神经网络的训练:train(net, input, output),建议使用并行计算以把所有核都用于跑数据,或者开GPU加速。不处理图片的网络还是较小,笔记本电脑足够。
使用训练好的网络进行计算:y=net(input)。
检查网络计算效果:perform( net, output, y)。
Matlab学习方法
搜索引擎+help函数