关键字
ans i,j Inf NaN pi
TO LIST KEYWORDS:iskeyword
优先级
variable > built-in-function > subfunction >private functon
举例:
Format
short :四位小数 long :15位小数 shortE/longE bank:2位小数
rat:有理数 355/113
Functions
clc:clear clear:消除了所有 who:在workspace里的变量
whos:具体的detail 例如变量类型(初始默认double)
取矩阵中的值方式
A(8):列优先下标号 A(3,2) 第三行第二列
A([1 3 5]) :同上,按照编号来 A([1,3],[1,3]) 见上构造出一个集合
A([1 3;1 3]):生成一个矩阵 A(3,:)=【】表示把第三行删掉
Colon Operator
当想要创造一个长的矩阵的时候
j:k [j,j+1,j+2,...,j+m]
j:i:k [j,j+i,j+2*i,...,j+m*i]
Array Manipulation
.* 单纯的对应位置上的数相乘
A/B 约等于 A*inv(B)
A' 表示对于A进行转置
A^2=A*A 是很复杂的矩阵的乘法哦
Special Matrix
linspace():
eye(n) n*n的单位矩阵
zeros(n1,n2) n1*n2的零矩阵
ones(n1,n2) n1*n2的1填满的矩阵
diag()
max(A):出现一行 是每一列的最大值
max(max(A)):真的最大值
min(A)
sort(A):一行中各个数字都是独立的
sortrows(A):每一行是绑定一起的,以第一列的为准来排序
find(A): find(A==6) 传出array中6所在的位置
flow control
relational operators
~= == && ||
if else if else
a=3;
if rem(a,2)==0
disp('a is even')
else
disp('a is odd')
end
%注意没有分号哦
%注意加end
for
i=0;
for n=1:2:10 %相当于for(int i=1;i<=10;i+=2)
i=i+1;
b(i)=2^n;
end
disp(b)
for n=1:10
a(n)=2^n;
end
disp(a)
switch
input_num=1;
switch input_num
case -1
disp('1')
case 0
disp('aaa')
case 1
disp('yes')
otherwise
disp('other value')
end
注意没有break 没有分号 最后是otherwise
还有一个end
while
n=1;
while prod(1:n)<1e100%n的阶乘
n=n+1;
end
PRE-allocating Space
指的是在我们要对于一个矩阵之类进行赋值之前,先确定好其大小,可以很好的加快速度
TIPS
1.在开始写script的时候,记得用clear sth来把你接下去要用的变量已经有的值给删掉,否则它是不会变的,close all来关掉当前figure窗口
2.如果一个矩阵太长,可以用“...”来换行
举个例子:A=[1 2 3 4 5 6;...
6 5 4 3 2 1];
3.遇到死循环的时候,可以用Ctrl +C来终止script
4.对于matlab内置的函数,如果想要知道其内容 >>edit(which('mean.m'))
Function
其实也可以没有y,x,如果你的函数没有输入输出值的话
Function Handles
相当于一个指针,指向了一个函数
具体来说 f=@(x)acos(x)
f为函数句柄,@是定义句柄的运算符
f=@(x)acos(x) 相当于建立了一个函数文件:
% f.m
function y=f(x)
y=acos(x);
Cell Array
看一个cell要用A{1,1},大括号
如果要得到其中一个对应的元素 A{1,1}(1,1)
Cat()
举例:Array concatenation
A=[1 2;3 4];B=[5 6;7 8];
C=cat(1,A,B) C=cat(2,A,B) C=cat(3,A,B)
用cat把两个或几个拼接起来,这样子在构造的时候就不用三维了
reshape()
C=reshape(A,1,4) C是把A变成1行4列的
Save() load()
EXCEL FILE READING:xlsread(),xlswrite()
Score=xlsread('04score.xlsx')
Score=xlsread('04score.xlsx','B2:D4')
[Score Header]=xlsread('04Score.xlsx') Score:number Header:String
I/O functions
fopen fclose fscanf fprintf feof
fid=fopen('[filename]','[permission]'); 'r' 'r+' 'w' 'w+' 'a' 'a+'
Reading from files
高阶统计绘图的函数
plotyy:可以有y1,y2
histogram:hist(y,10) y是数值,10表示分成10个柱形(用来查看整体情况)
bar:bar(x) 用于查看各个情况,bar3(y) 3D
pie:pie(a) 【0,0,0,1】的1是separate
polar:polar(theta,r); 极坐标thera是角度,r是半径
stairs,stem: stairs(y)阶梯状的连接,stem:包围的地区被阴影覆盖(hold on)
boxplot erroebar
绘图函数
fill(x,y,'') x,y是函数,fill表示涂满
text()
%%
t=(1:2:15)'*pi/8;
x=sin(t);
y=cos(t);
fill(x,y,'r');
axis square off;
text(0,0,'STOP','Color','w','FontSize',80,...
'FontWeight','bold','HorizontalAlignment','center');
%%
t = 0:pi/2:2*pi; %画一圈,每隔90度驱一个点
x = cos(t);
y = sin(t); %颠倒过来,这样圆的起点就是0了
fill(x,y,'y','Linewidth',5)
axis square off
text(0, 0, 'WAIT', 'Color', 'k', 'FontSize', 70, ...
'FontWeight','bold','HorizontalAlignment','center')
%在坐标(0,0)显示WAIT,颜色黑,字号80,线条加粗,居中对齐
bar的涂色功能,如果你有很多个,想要分别涂的话
G=[48 39 29 24 13];
S=[29 27 17 26 8];
B=[29 23 19 32 7];
H=bar(1:5,[G' S' B']);
H(1).FaceColor = [0 0 0];
H(2).FaceColor = [3 89 22];
H(3).FaceColor = [23 4 11];
imagesc():把一个三维的变成二维的,而其中的z轴用颜色深度表示
colorbar colormap: colormap(hot/cool/gray/spring/...)
meshgrid :不是点的操作,而是作为面的填充
x=-2:1:2;
y=-2:1:2;
[x,y]=meshgrid(x,y)
mesh() surf():用来展现三维的图形,参数为X,Y,Z
contour() 把三维投射到二维平面
view()
GUI
guide进入
双击那个图形就可以进入更改页面了,tag不要改,用于函数里面,相当于id
axes是用来画画的,有多个axes则可以用:surf(handles.axes)表示这次是在axes1上面画画
axes(handles.axes1):宣告axes1为axes,然后以后就是在axes1上默认画画
set() get()
get是用来得到一些参数:a=get(handles.slider1,'Value')
set是用来设置一些的,set(handles.text2,'String','TEST')
handles
在callback里面的变量都是local的局部变量,如果想要在其他函数里面调用它,就要设置为整体变量,用到handles
handles.myData=a;
guidata(hobject,handles);(固定写法)
compile
输入deploytool
选定,然后点击package
影像
imread() imshow()
I=imread('pout.tif');%read
imshow(I);%show
imtool('pout.tif')
imadd(): K=imadd(I,J)
imhist(I):显示出频率
imrotate()旋转:J=imrotate(I,35,'bilinear') %I是原图
imwrite(I,'pout2.png'); bmp,git,hdf,jpg。。。
数大米
策略:把米变成white,background变成black
threshold:检查每个picture,大于这个值就变成白色,否则就是黑色
graythresh():找出threshold
Im2bw:把一个graylevel变成binary
但是由于背景打光不均匀,导致背景前景误判,需要把背景去掉
BG=imopen(I,strel('disk',15));
imshow(BG);
BG就是背景啦
然后I2=imsubtract(I,BG)
接下去数数
dfs式搜索,label,改0
这里的labeled就是 打好标签的矩阵,后面那个就是数字
colorful: RBG_label=label2rgb(labeled);
imshow(RBG_label)
多项式
f(x)=x^3-2x-5 p=[1 0 -2 -5]
polyavl:根据上面那个p生成真正的函数: f=polyval(p,x); %p是函数,x是自变量
polyder():微分,返回来一个p型的东西,生成真正的需要polyval polyval(polyder(p),7)
conv(),可以把两个进行卷积乘,就是合并
polyint:积分 polyint(p,3) 3是那个常数
diff() 求两个数之间差值 x=[1 2 5 2 1]; diff(x) 得到1 3 -3 1
用来求非多项式斜率x=[1 2];y=[5 7] slope=diff(y)./diff(x)
点除点除点除
欣赏图标
XLim YLim FontSize XTick XTickLabel FontName
拟合
用矩形:h*f0 f0是取h/2的高度 用到sum
h=0.05;
x=0:h:2;
midpoint=(x(1:end-1)+x(2:end))./2;
y=4*midpoint.^3;
s=sum(h*y)
运用梯形拟合,就是说高度使用函数的和的一半:trapz
辛普森函数
好用的求积分:integral(函数,下限,上限) 函数必须是个handle
、
sym syms 宣告变量 syms x
solve 求根
diff() 求导
int() 求积分
fsolve()求根 fsolve(一个指针,initial guess)
fzero() 求根 用法与fsolve基本一致,但是只能求穿过坐标轴的零点(配合optimset)
roots()数值解 只对于多项式有效 roots([1 -3.5 2.75 2.125 -3.875 1.25])
syms x y
ep1=2-2*y-5
ep2=x+y-6
A=solve(ep1.ep2,x,y)
syms x
y=4*x^5
yprime=diff(y);
sums x;
y=...
z=int(y);%有个常数不知道呢
z=z-subs(z,x,0) %过z(0)=0
f2=@(x) (1.2*x+0.3+x*sin(x));
fsolve(f2,0)
f=@(x) x.^2
options=optimset('MaxITer',1e3,;TolFun',1e-10);%最大迭代次数 中止容差
fsolve(f,0.1,options)
fzero(f,0.1,options)
一些用到矩阵的计算
rref() A*x=B A是系数矩阵,x是想要的答案 B是结果 要求x=rref([A b])
lu
我们要解决Ax=b
尝试把A分成上三角和下三角的乘积 A=L^(-1)U 也就是说L,U已知
那么问题就变成了 Ax=b---->L^(-1)Ux=b
把Ux=Y
那么L^(-1)y=b 解出来y
然后Ux=y 解出来x
\ mldivide() 用于Ax=b x=A\b
inv()逆矩阵
cond() 理解成用来判断一个矩阵健康状况的,有的时候行列式---》0,是不健康的 k越小越健康,因为A在很接近要平行于另一个向量的时候,它的改变会造成x巨大改变--》正无穷,所以k要变得更更大
线性系统
y=Ab
y是output A是这个线性系统,研究数值进入这个A系统之后会发生的变化(也就是它的输出)
找到一个矩阵v,使得Av=b*v b是一个实数
b决定了变换过后是放大还是缩小 v决定了方向
好,然后我要进行变化的变量(下图中就是b)可以进行拆分,成为vi*a求和
那么这个系统就变成了 ai b vi(这里的vi就是一维的,A由多个这些组合)
[v,d]=eig([2 -12;1 -5])
v就是得到的那个矩阵 d的对角线就是两个实数
统计
概率和变化(mean median mode) (range variance std)
mean 平均值
median:中位数
mode :出现频率最高的
prctile:每一个percent的数值
max min
std 方差
var 标准差
作图:bar area stem (x,freqy) x表示范围 freqy是一个数组,里面表示各个位置上数字出现的频率
boxplot():boxplot(数组名称)
skewness:<0左偏 >0右偏
线性回归
polyfit(x,y,n):用n次函数对x,y进行拟合,得到的fit(1)是一次项的系数,fit(2)是0次
然后就可以到的拟合后的y=kx+b
如果是用高次去拟合的话
p=polyfit(x,y,i)
yfit=polyval(p,xfit)
interp1():通过线段找点
spline
让曲线更圆滑
interp2():适用于二维