原创matlab使用技巧汇总个人学习记录.docx
- 文档编号:27861175
- 上传时间:2023-07-05
- 格式:DOCX
- 页数:19
- 大小:201.12KB
原创matlab使用技巧汇总个人学习记录.docx
《原创matlab使用技巧汇总个人学习记录.docx》由会员分享,可在线阅读,更多相关《原创matlab使用技巧汇总个人学习记录.docx(19页珍藏版)》请在冰豆网上搜索。
原创matlab使用技巧汇总个人学习记录
维护历史
日期
说明
备注
2012-8-11
整理架构,将几个文件逐步并成一个文件
数据类型操作
字符串
比较字符串是否相等
if~strcmp(ask,'y')
eval(string)
作为一个MATLAB命令求字符串的值
列在上面的第一个函数eval给MATLAB提供宏的能力。
其中,该函数提供了将用户创建的函数名传给其它函数能力,以便求值。
它的应用例子包括:
a='db'
db=’OracleLocal’
命令:
eval(a)
返回:
OracleLocal’
当被求值的字符串是由子字符串连接而成,或将字符串传给一个函数以求值时,eval非常有用。
说明这种用途例子本书的以后会提及。
»eval('a=sqrtt
(2)','a=[]')
a=[]
这里第二个参量被执行。
由于第一个参量有误,即sqrtt不是一个有效的MATLAB函数。
这种形式经常被描述为eval(try,catch)。
函数feval与eval类似,但在用法上有更多的限制。
feval('fun',x)求由字符串'fun'给定的函数值,其输入参量是变量x。
即feval('fun',x)等价于求fun(x)值。
例如,
blanks(n)
返回一个n个零或空格的字符串
deblank
去掉字符串中后拖的空格
feval
求由字符串给定的函数值
findstr
从一个字符串内找出字符串
isletter
字母存在时返回真值
isspace
空格字符存在时返回真值
isstr
输入是一个字符串,返回真值
strcmp
字符串相同,返回真值
strrep
用一个字符串替换另一个字符串
strtok
在一个字符串里找出第一个标记
空值
空值处理
y(isnan(y))=[];%removeanymissingobservations
数组添加空值
一个数组添加一个空值:
adata3=[adata3;nan]
判断是否空值
数据转换
标准化数据
X2=zscore(X); %标准化数据
数值操作相关函数
MATLAB取整函数
Matlab取整函数有:
fix,floor,ceil,round.
fix
朝零方向取整,如fix(-1.3)=-1;fix(1.3)=1;
floor
朝负无穷方向取整,如floor(-1.3)=-2;floor(1.3)=1;
ceil
朝正无穷方向取整,如ceil(-1.3)=-1;ceil(1.3)=2;
round
四舍五入到最近的整数,如round(-1.3)=-1;round(-1.52)=-2;round(1.3)=1;round(1.52)=2。
数值计算
标准化
X2=zscore(X);%±ê×¼»¯Êý¾Ý
计算阶乘
Gamma(n+1)=n!
=prod(1:
n)
Nan
Not-a-Number
将一个序列滞后一阶,形成lags个列
XLAG=lagmatrix(X,Lags)
Qr:
矩阵分解为三角阵
Orthogonal-triangulardecomposition
对角阵生成
>>diag([2,4,6])
ans=
200
040
006
抽取矩阵的对角线
Diag(矩阵)
生成随机数矩阵
ww=randn(1000,1);%WhiteGaussiannoise
生成高斯白噪声系列,1000行,1列
Normallydistributedrandomnumbers
负数开方
书上说matlab是面向复数计算的,但是-8开三次方后为什么是
1.0+1.7321i为什么不是-2为什么它的模是2那么-2中负号是怎么体现出来的
说明:
数值计算中,当x不是整数时,a^x要求a>0才能保证实数。
这样写-8^(1/3),或-abs(8)^(1/3),一般可写为sign(a)*abs(a)^(1/3).sign是符号函数
普通计算
求余数
1.a=mod(x,y)
2.表示x/y,余数为a
Cell操作
以字符串形式,取某个cell的值
语法:
TerminalList{i}
结果:
CIB469385
应用:
sql=['selectt.y_trend+t.y_rand,t.y_trendfroml_rand_detail_zhengzhou_dayt'...
'WHEREt.object_id='''TerminalList{i}''''...
'ORDERBYt.period_id'];
结果:
selectt.y_trend+t.y_rand,t.y_trendfroml_rand_detail_zhengzhou_daytWHEREt.object_id='CIB469385'ORDERBYt.period_id
日期操作相关函数
将一个日期时间转换成周几
functionweekdaySeries=ChangeToWeekDays(xDay)
%将一个符合日期格式的行向量,计算成其对应的周几的行向量,比如2006/11/29,变成4(第四天,周三)
找一个值在序列中出现的位置和次数
绘图函数操作
绘制枝干图
在matlab中,stem函数用于绘制火柴梗图
曲线拟合
p=polyfit(x,y,n)
Figure函数技巧
hProgress=figure('Name','建模进程','NumberTitle','off','MenuBar','none','IntegerHandle','off','Position',[30,550,500,80]);
iconfilename='F:
\\Matlab_1\\logo.jpg';
chgicon(hProgress,iconfilename);
获得句柄
hProgress=figure();
标题、工具栏、位置等参数
保存图形为jpg文件
print(1,'-dpng',figure_path_name);
%将句柄为1的图形保存为jpeg/jpg格式的图片。
'-dpng' 设置成 -djpeg就可以了
或者:
saveas(gcf,CurrentATM,'jpg');
颜色
形状(1条线和多条线)
两个轴:
x和y
其他属性的控制
同时画两条线
输入如下语句,画出线性回归直线:
>>ybest=b(2,1)*x+b(1,1);
>>plot(x,ybest,x,y,'o')
title('linearregressionestimate')
grid
结果:
显示进度条
详细参考ECM模块:
部分代码如下:
初始化进度条
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%显示进度用
closeall;
hProgress=figure('Name','½¨Ä£½ø³Ì','NumberTitle','off','MenuBar','none','IntegerHandle','off','Position',[30,550,500,80]);
iconfilename='F:
\\Matlab_1\\logo.jpg';
chgicon(hProgress,iconfilename);
t=0:
1:
X_M;
plot(t,zeros(X_M+1,1),'r-','LineWidth',2);
title'Íê³É°Ù·Ö±È£º0%';
holdon;
drawnow;
sResult='';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
修改进度条
%修改进度
t=0:
1:
i;
figure(hProgress);
plot(t,zeros(i+1,1),'g-','LineWidth',3);
title(['完成百分比:
'num2str(i*100/X_M)'%'])
drawnow;
画出残差及其置信区间
rcoplot(r,rint)
详细内容:
Subplot
刘绍清说明:
subplot(3,3,1):
三个参数含义:
一个界面中按照3行3列显示9个图,这个是第一个图
系统函数
输入输出
在屏幕上输出字符串
disp('Warning:
Xmustbeamatrix,notavector')
或者
fprintf('Bythelatentrootciterionthenumberoffactorssuggestedare:
%.i\n',m);
在屏幕上输入
m=input('Givemethenumberoffactorsyouneed:
')
错误处理
错误处理
error(nargchk(1,1,nargin))
工具操作技巧
编程技巧
参数处理
参数默认值的操作
默认参数
ifnargin<2
error('MATLAB:
chgicon','%s','Toofewinputarguments!
');
end
ifnargin>2
error('MATLAB:
chgicon','%s','Toomanyinputarguments!
');
end
错误处理
错误捕捉
try
。
。
。
catchME
WriteInfo(ME.identifier);
WriteInfo(ME.message);
fori=1:
size(ME.stack,1)
WriteInfo(['文件:
'ME.stack(i).name';第'num2str(ME.stack(i).line)'行']);
end;
end;
lasterr
返回上一个所产生MATLAB错误的字符串
操作技巧
程序计时
Tic和toc表示计时开始和计时结束
全部注释或不注释
Ctrl+r
Ctrl+T
运行快捷
F5
运行选中代码
F9
格式调整
Ctrl+I
缺省参数的设定
ifnargin<3
Alpha=0.05;
end;
进度条展示
初始化进度条
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%显示进度用
closeall;
hProgress=figure('Name','建模进程','NumberTitle','off','MenuBar','none','IntegerHandle','off','Position',[30,550,500,80]);
iconfilename='F:
\\Matlab_1\\logo.jpg';
chgicon(hProgress,iconfilename);
t=0:
1:
X_M;
plot(t,zeros(X_M+1,1),'r-','LineWidth',2);
title'完成百分比:
0%';
holdon;
drawnow;
sResult='';
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
更新进度条
%修改进度
t=0:
1:
i;
figure(hProgress);
plot(t,zeros(i+1,1),'g-','LineWidth',3);
title(['完成百分比:
'num2str(i*100/X_M)'%'])
drawnow;
数据库操作
外部数据操作
读取excle文件
ranmdta=xlsread('ramdta.xls');
写内容到xls
语法:
xlswrite('f:
\result.xls',stats,'sheet1','A2')
具体例子参考:
%将结果保存到excel文件中
sTitle={};
%生成标题
sTitle(1,1)={'最后5天最高价格'};
sTitle(2,1)={''};
sTitle(1:
2,2:
6)=num2cell(xPrice(:
end-4:
end));
sTitle(3,1)={'最后5天最高价格区间'};
sTitle(4,1)={''};
sTitle(3:
4,2:
6)=num2cell(PriceState(:
end-4:
end));
sTitle(5,1)={'区间'};
n=size(GroupInfo,2);
sTitle(6,2:
n+1)=GroupInfo;
sTitle(7:
7+5-1,1)=num2cell(1:
5);
%生成内容
sTitle(7:
7+5-1,2:
n+1)=num2cell(HighNextNDaysRow);
%保存到excel文件中
xlswrite(StockName,sTitle,'Sheet2','A1');
效果图:
数据库操作
连接数据库取数据
%根据数据库连接信息,到数据库取回分类信息
DB_conn=database(dbconnect,dbUser,dbPassword);%conn变量代表的是数据库连接对象,数据库名称为db,用户名为username,密码为password。
sql=['Selectdistinct'catfield'from'table'orderby'catfield];%从表中选择要建模的字段
curs=exec(DB_conn,sql);%执行SQL语句,选择table表格数据
setdbprefs('DataReturnFormat','cellarray');%把返回的数据格式变换为cell矩阵形式
curs=fetch(curs);
cats=curs.Data;
连接数据库插入数据
colnames_c={'CAT_NAME','Y_FIELD','VALUE_STYLE','COEFFICIENT','DATA_TABLE','DATA_FIELD','TIME_FIELD','Model_ID'};
exdata={sCat,datafield,'00长期趋势',regress_coefficient.Trend(ii,1),'L_TREND_DEPART_TS',trend_Field,TimeNamefield,Result.ModelID};
fastinsert(DB_conn,'L_TREND_DEPART_MP',colnames_c,exdata);
统计函数
统计检验函数
单样本t检验
[h,p,ci]=ttest(a,74.3)
A是要检验的数据
两个独立样本t检验
[h,p,ci]=ttest2(a(:
1),a(:
2),[],[],'unequal')
单位根检验
function[y,lags,alpha,testType]=unitRootCheck(minAlpha,maxAlpha,minSampleSize,varargin)
聚类算法:
分步聚类
Step1 寻找变量之间的相似性
用pdist函数计算相似矩阵,有多种方法可以计算距离,进行计算之前最好先将数据用zscore函数进行标准化。
X2=zscore(X); %标准化数据
Y2=pdist(X2); %计算距离
Step2 定义变量之间的连接
Z2=linkage(Y2);
Step3 评价聚类信息
C2=cophenet(Z2,Y2); //0.94698
Step4创建聚类,并作出谱系图
T=cluster(Z2,6);
H=dendrogram(Z2);
分类结果:
{加拿大},{中国,美国,澳大利亚},{日本,印尼},{巴西},{前苏联}
剩余的为一类。
正态分布
x=-9:
0.1:
9;
p1=normpdf(x);
%NormalDistributionwithmu=0andsigma=3
mu=0;sigma=3;
p2=normpdf(x,mu,sigma);
q2=normcdf(x,mu,sigma);
%NormalDistributionwithmu=2andsigma=3
mu=2;sigma=3;
p3=normpdf(x,mu,sigma);
相关系数计算
x=randn(30,4);%Uncorrelateddata
x(:
4)=sum(x,2);%Introducecorrelation.
[r,p]=corrcoef(x)%计算相关系数矩阵Computesamplecorrelationandp-values.
[i,j]=find(p<0.05);%找出相关系数明显的,p值小于0.05的认为相关关系明显Findsignificantcorrelations.
[i,j]%Displaytheir(row,col)indices.
改进:
r是对称的,如何消除,还没有解决
和spss计算的相关系数结果一样:
[r,p]=corrcoef(p1,p2)
r=
1.00000.9933
0.99331.0000
Corr:
相关系数的计算
[rp]=corr(p1,p2)
结果和spss计算的相关系数值一样
Cov:
协方差阵
Cov(A),对角线就是方差,也就是var的结果
Var:
方差阵
xCov:
自协方差
ww=randn(1000,1);%WhiteGaussiannoise
[cov_ww,lags]=xcov(ww,10,'coeff');
stem(lags,cov_ww)
一个序列,计算x与前一期,前2期,后1期等的协方差
Plot的结果
Xcorr:
自相关
[corr_ww,lags]=xcorr(ww,10,'coeff');
其他函数
多项式回归
确定多项式系数的命令:
[p,S]=polyfit(x,y,m)
求排列组合
combntns(1:
n,i);%matlab自带的求排列的函数
从给定集合set中列出所有可能的subset个元素的组合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 原创 matlab 使用 技巧 汇总 个人 学习 记录