更新时间: 2020/8/20
小姐姐来源于网络
听说,在博客中挂小姐姐会增加访问量
【日志】
2020/5/13
原谅我将CSDN 作为笔记本使用,关键是它太方便了,只要有网就可以在终端上查看,而且还可以更改,可以贴代码,插图片。今天先把框架做好,内容什么的咱们来日方长。话不多说,直接开整 >>
CSDN 上带的makedown 编辑器为啥没有matlab ,注释只好用//
了,matlab 实际注释标识符为 %
2020/5/20
突然发现之前的课件都是精华啊!只是当时没有好好总结,不然现在也不用如此费力写总结辽。
不想把文章搞得太长,所以后面将 实用操作 部分和 常用功能 部分划到子博客中,本篇博客之介绍基础知识部分。
像MATLAB 如此高质量的软件,自己的帮助系统已经十分完备详细了,想要玩转MATLAB 就要首先学会如何获取帮助:
1.help
help //显示help 主题一览表
help plot //显示有关三维做图指令
help [ //显示特殊字符与符号帮助
help help //显示help 的帮助信息
2.lookfor
lookfor //它可提供通过一般的关键词,搜索出一组与之相关的命令
lookfor fourier //eg. 寻找含有傅立叶变换的相关指令
3.demo //打开帮助文档,会有许多函数等的使用示例
4.helpwin //ATLAB file help displayed in a window
5.helpdesk //omprehensive hypertext documentation and troubleshooting.
关于文件路径,好像所有的软件或是语言都是通用的,也许是大家约定俗成的,反正用起来很相似。
文件分为相对路径(= 当前工作路径 + filename)和绝对路径(以盘符开头的)
1.获取当前工作路径
cd
2.更改当前工作路径,filepath 为要设置的工作路径
cd('filepath')
pathtool //弹出设置路径的窗口
//或者可以在编辑界面上方直接修改
3.返回上一文件路径
cd('..\')
//目前就会这几招,以后用到其他的再来补充
1.常用符号的含义
符号 | 含义 | 符号 | 含义 |
---|---|---|---|
; | 区分行,取消运行显示等 | . | 小数点以及域访问等 |
, | 区分列,函数参数分隔符等 | … | 连接语句(续行符) |
: | 在数组中应用较多 | ’ ’ | 字符串的标识符号 |
( ) | 指定运算优先级等 | = | 赋值符号 |
[ ] | 矩阵定义的标志等 | ! | 调用操作系统命令 |
{ } | 用于构成元胞数组等 | % | 注释语句的标识 |
’ | 共轭转置符号 | .’ | 非共轭转置 |
2.常用操作命令
命令 | 功能 | 命令 | 功能 |
---|---|---|---|
hold | 图形保持命令 | disp | 显示变量或文字内容 |
clc | 清除工作窗 | load | 加载指定文件的变量 |
clear | 清除内存变量 | cd | 显示或改变工作目录 |
clf | 清除图形窗口 | echo | 工作窗信息显示开关 |
diary | 日志文件命令 | quit | 退出MATLAB |
path | 显示搜索目录 | save | 保存内存变量到指定文件 |
type | 显示文件内容 | dir | 显示当前目录下文件 |
pack | 整理内存碎片 | who/whos | 返回工作空间中都有哪些变量/size |
3.键盘操作和快捷键
按钮和快捷键 | 功能 | 按钮和快捷键 | 功能 |
---|---|---|---|
↑(Ctrl+ p) | 调用上一行 | Home(Ctrl+ a) | 光标置于当前行开头 |
↓(Ctrl+ n) | 调用下一行 | End(Ctrl+ e) | 光标置于当前行结尾 |
←(Ctrl+ b) | 光标左移一字符 | Esc(Ctrl+ u) | 清除当前输入行 |
→(Ctrl+ f) | 光标右移一字符 | Del(Ctrl+ d) | 删除光标处字符 |
Ctrl+← | 光标左移一单词 | Backspace(Ctrl +h) | 删除光标前字符 |
Ctrl+→ | 光标右移一单词 | Ctrl+ z | 恢复上一次删除 |
Ctrl+R | 快速注释 | Ctrl+ T | 取消注释 |
Ctrl+C | 中止程序 | F12 | 设置/清除断点 |
F5 | 执行 | F10 | 单步执行 |
F11 | 单步执行,入函数 | ||
Ctrl+= | 全部折叠 | Ctrl+shift + = | 全部展开 |
更多快捷键:
https://wenku.baidu.com/view/351cd91c7f1922791688e8c8?ivk_sa=1023194j
4.预先定义其数值的变量
名称 | 说明 | 名称 | 说明 |
---|---|---|---|
pi | 圆周率常数 | eps | 浮点数的相对误差 |
INF | 无穷大 | i (或j) | 虚数单位 |
NaN(或nan) | 不定值 | nargin | 函数实际输入参数个数 |
realmax | 最大的正实数 | nargout | 函数实际输出参数个数 |
realmin | 最小的正实数 | ANS(或ans) | 默认变量名,存储最近一次运算结果 |
5.数学函数
函数名 | 含义 | 函数名 | 含义 |
---|---|---|---|
sin( ) | 正弦函数 | cos( ) | 余弦函数 |
tan( ) | 正切函数 | cot( ) | 余切函数 |
asin( ) | 反正弦函数 | acos( ) | 反余弦函数 |
atan( ) | 反正切函数 | acot( ) | 反余切函数 |
sec( ) | 正割函数 | csc( ) | 余割函数 |
asec( ) | 反正割函数 | acsc( ) | 反余割函数 |
sinh( ) | 双曲正弦函数 | tanh( ) | 双曲正切函数 |
asinh( ) | 反双曲正弦函数 | acosh( ) | 反双曲余弦函数 |
atanh( ) | 反双曲正切函数 | exp( ) | 以e为底的指数函数 |
sqrt( ) | 平方根函数 | log( ) | 自然对数函数 |
log10( ) | 常数对数函数(这里以10为底) | fix( ) | 向零取整方向 |
ceil( ) | 向上取整 | floor( ) | 向下取整 |
round( ) | 四舍五入取整 | rem(a,b) | a除以b取余 |
sign( ) | 符号函数 | abs( ) | 绝对值函数 |
factor( ) | 质数分解函数 | factorial( ) | 阶乘函数 |
关于这块,内容有很强的可扩充性,所以又开了篇博客。目前内容有:对数组的创建、数学上常用的求特征值、求卷积、判断数组是否相等(2020.10.30)传送门参上:
https://blog.csdn.net/Gou_Hailong/article/details/109362945
转换:https://blog.csdn.net/qq_43157190/article/details/107692624
字符串
1.创建
a='You '; //单引号赋值
[a b c]; //方括号合并多个字符串
s=strcat(a,b,c); //strcat函数横向连接多个字符串,去空格
//多行字符串-
S=['abc'; 'd f'] //直接输入创建: (需保证每行等长,各行用分号隔开)
s1=char('This string array','has two rows.')
s2=str2mat('这','是',' ','字符串' )
2.转换
int2str() //把整数数组转换成串数组(非整数将被四舍五入)
num2str() //把非整型数数组转换成串数组(常用于图形中,数据点的标识)
mat2str() //把数值数值转换成输入形态的串数组(常与eval命令配合使用) [1 2 3;4 5 6]
num2str(j,'%02d'); //数字转字符串,位数不够前补0.
char(cell1(i,j)); //元胞转字符串
---------
str2num(); //字符串转数字
cellstr(str); //字符串转元胞
3.操作
字符串比较: strcmp、 strncmp、 strcmpi
字符串的替换和查找: strrep、 strfind、findstr、 strmatch, …
字符串与数值数值的转换: num2str、str2num、 mat2str、 str2num,…
空格处理函数: blanks、 deblank、 strtrim
字符串的输入输出: sprintf、 sscanf
disp(str); %输出到屏幕上
sprintf('%d',a); %返回一个字符串,有;就不会输出,而是把结果给ans
disp(sprintf('%d',a)); %可以这样综合使用。
元胞
元胞数组是对常规的数值数组的扩展, 其每一个元素称为一个元胞(cell), 每一个元胞中可以存储任意类型、任意尺寸的数据。与数值数组一样, 元胞数组维数不受限制, 可以是一维、 二维或更高维。元胞数组对元胞的索引方法也分单下标和全下标两种。对于元胞数组,元胞和元胞里的内容是两个不同范畴(或者说不同层次)的概念。
如果把元胞数组比着一个柜子,那么,元胞就是柜子上的抽屉,元胞里的内容则是抽屉里存放的东西。
1.元胞的创建
A(2,3) //寻访元胞(cell indexing)
A{2, 3} //寻访元胞中的内容(context addressing)
A(1)={[1 2 3]}; A(2)={'second cell'} //直接赋值法
cell(m,n) //创建m x n的元胞数组,每个元胞内容为空数组,n - n x n
2.一些函数
deal //将输入变量对应赋值给输出变量
cell //创建指定大小的元胞数组
celldisp //逐个显示元胞单元的数据
cellplot //用图形方式显示元胞数组的结构
num2cell //把数值数组转化为元胞数组
cell2struct //把元胞数组转换为结构体
iscell //测试某个对象是否为元胞数组
使用示例:
a=reshape(1:9, 3, 3);
b=sym('sin(3*x)*exp(-x)');
c='string';
d=10;
A=cell(2);
A(1,1)={a};
A{1,2}=b;
A{2,1}=c;
A(2,2)={d};
cellplot(A,'legend');
A_A=[A cell(2)]; %元胞数组扩展
A_A(:,4)=[]; %删除第四列,成为2x3的元胞数组
结果:
结构体
结构体就不用赘述了,其他编程语言中经常用到。
student=struct('name','张三','age','matrix',[1 2]); //构造单个结构体
student=struct('name',{'张三','Tom'},'age',{20,19}, …
'matrix', {[1 2],[1 3;4 6]}) //构造结构体数组
//对于结构体数组,可以通过括号、下标索引来访问其内部数据,结构体与字段之间用点(.)连接。
student(1)
student(1).name
s='name';
student(1).(s)
//结构体的字段中也能存储结构体类型的数据,eg.
A=struct('location', 'Wuhan', 'time',…
struct('hour', '2', 'minute', 30, 'second',0))
这块内容请移驾:https://blog.csdn.net/Gou_Hailong/article/details/107619919
M文件是包含 MATLAB 代码的文件。 M文件按其内容和功能可分为脚本M文件和函数M文件这两大类。
脚本M文件是许多 MATLAB 代码按顺序组成的命令集合,不接受参数的输入和输出,与MATLAB工作区共享变量空间。脚本文件
一般用来实现一个相对独立的功能,比如对某个数据集进行某种分析、绘图,求解方程等等。
MATLAB的M-函数是由function语句引导的,其基本格式如下:
function [输出形参列表] = 函数名 (输入形参列表)
注释说明语句段,由%引导;
函数体语句
函数文件需要在 M-文件编辑器中编写。写完以后,按照当前的搜索路径保存。以后就可以随时调用这个函数了。好像函数名要和文件名一致。
很简单,直接跳过。
//选择结构-多分支
if expression1
commands1
elseif expression2
commands2
else
commands3
end
//switch根据表达式的取值不同,分别执行不同的语句
switch ex
case test1
Commands 1
case test2
Commands 2
case testk
Commands k
otherwise
Commands
end
//try是一种试探性执行语句
try
commands1
catch
command s2
end
eg:
//1.if
clear
n=input('输入n= )
if n>=90
chji='优秀’
elseif n>=80
chji='良好'
elseif n>=70
chji='中等’
elseif n>=60
chji='及格’
else
chji='不及格’
end
//2.switch
for month= 1:12
switch month
case {3,4,5}
season = 'Spring';
case {6,7,8}
season = 'Summer';
case {9,10,11}
season = "Autumn';
case {12,1.2}
season = Winter';
end
fprintf('Month %d ===> %s \n', month,season);
end
//3.try
a=[1 2 3 4];
i=5;
try
X = a(i);
catch
X = a(end);
end
lasterr
//1.while - end
while expression
commands
end
//2.for
for x = array
commands(循环体)
end
eg
//1.while
sum_j= 0;
i=1;
while i <=10; .
sum_ i= sum_ i +i;
i= i+1;
end;
//2.for
sum i = 0;
for i= 1:10;
sum_i=sum_i+i;
end
注意:
说明:
其他命令:
命令 | 描述 |
---|---|
return | ●用于函数中,函数将在此处跳出,并返回该语句指定的值 ●用于 keyboard 状态下返回被 keyboard 中断的指令处继续向后执行程序 |
input | ●用于程序执行过程中要求用户想程序中输入数据 |
keyboard | ●这个命令在调试程序时非常有用,当执行到此命令, matlab将中断正在执行的程序,进入’用户控制状态’,可以在command window 中执行用户操作 |
pause | ● 程序执行途中暂停 |
break | ●直接跳出该层循环 |
continue | ●直接进入该层循环的下一-次迭代 |
error, warning,lasterr, lastwarn | … |
局部变量(Local Variables)
全局变量(Global Variables)
function func
global X %全局变量定义
X=2
X=X+2;
fprintf('The value of X in "func" is %g.\n', X);
全局变量使用规则:
函数文件也是M文件的一种。可接受输入变量,并将结果送至输出变量;运算过程产生的变量都存放在函数本身的工作空间;不会和MATLAB基本工作空间的变量相互覆盖;函数适用于大型程序代码;使程序代码模块化( Modularized )并易于维护与改进。
//函数文件由function语句引导,其格式为:
function 输出形参表 = 函数名(输入形参表)
注释说明部分
函数体
end
/*注:其中函数名的命名规则与变量名相同。输
入形参为函数的输入参数,输出形参为函数的
输出参数。当输出形参多于1个时,则应该用
方括号括起来。*/
命名限制
函数调用
//函数调用的一般格式是:
[输出实参表]=函数名(输入实参表)
调用以上函数,可输入:
>> vec= [15 3];
>> ave = func1(vec)
ave =
3
函数嵌套调用(递归调用)
eg:
//利用函数的递归调用,求n!
function f=factor(n)
if n<=1
f=1;
else
f=factor(n- 1)*n;
end
return f;%返回
end
一个M文件可以包含一个以上的函数
主函数与子函数的位置
eg
//func5.m包含一个主函数及一个子函数
//子函数的功能是计算倒数向量
function out = func5(x)
recip = reciproc(x);
out = sum(recip);
% Definition for subfunctions
function output = reciproc(input)
output = 1./input;
调用此函数
>> func5([12 3])
ans =
1. 8333 ( 0.4167)
输入、输出变量是函数与主程序之间数据传递的载体。
function varargout = func(varargin)
/*varargout 是输出变量-输出参数
func 是函数名
varargin 是输入变量-输入参数*/
nargin //榆入变量个数,用于函数体内
nargout //榆入变量个数,用于函数体内
nargin('func') //荻取函数func所需的输入变量个数
nargout(' 'func') //获取函数func所 需的输出变量个数
varargin //可变长的输入变量列表(元胞数组)
varargout //可变长的输出变量列表(元胞数组)
nargin、nargout 决定函数实际输入输出变量的个数。与程序流控制指令配合,针对不同输入输出变量个数完成不同的任务。不能对nargin、nargout赋值。
eg
function [ave1, ave2] = func4(vector1, vector2)
if nargin == 1, %只有一个输入变量
ave1= sum(vector1)/length(vector1);
end
if nargin == 2, %有两个输出变数
ave1 = sum(vector1)/length(vector1);
ave2 = sum(vector2)/length(vector2);
end
可变长输入参数
function ave = func4(varargin) %计算向量的平均值
if nargin >0
for i= 1:nargin
ave(i)=mean(varargin{});
end
else
ave= NaN;
disp '没有输入参数'
end
function varargout = func4(varargin)%计算向量的平均值、标准偏差
if nargin < 1
disp '没有输入参数'
return
end
for i = 1:nargin
varargout{1}(i)=mean(varargin{i});
if nargout==2
varargout{2}(i)= std(varargin{i});
end
end
//函数调用:
a=[1 2 3];b=[4 5 6 7 8];
[ave, stdv]=func4(a,b);
[ave,stdv]=func4(a)
ave=func4(a);
ave=func4(a,b);
https://blog.csdn.net/Gou_Hailong/article/details/106242250
https://blog.csdn.net/Gou_Hailong/article/details/106770672
https://blog.csdn.net/Gou_Hailong/article/details/106788580
https://blog.csdn.net/Gou_Hailong/article/details/107619919
Matlab 画地图之 m_map:
https://blog.csdn.net/Gou_Hailong/article/details/108147268
缩放:https://blog.csdn.net/Gou_Hailong/article/details/108206521
内切圆外接圆:https://blog.csdn.net/Gou_Hailong/article/details/108206335
注释:https://blog.csdn.net/Gou_Hailong/article/details/108208442
扣shp:https://blog.csdn.net/Gou_Hailong/article/details/108209395
基于shp裁剪图像:https://blog.csdn.net/Gou_Hailong/article/details/108209764
这个真的超级np!!(get于2020.10.30)
s1='aa';
eval([s1,'=3;']);
没错,就是如此简单,上述代码的运行结果就是在工作空间多了俩变量,一个变量叫s1='aa'
,另一个变量叫aa=3
。
https://blog.csdn.net/Gou_Hailong/article/details/106025411
https://blog.csdn.net/Gou_Hailong/article/details/106027047
https://blog.csdn.net/Gou_Hailong/article/details/108206521
https://blog.csdn.net/Gou_Hailong/article/details/108206335
[1] xuxinrk-CSDN博主:https://blog.csdn.net/xuxinrk/article/details/82883078
[2] 百度文库:https://wenku.baidu.com/view/351cd91c7f1922791688e8c8?ivk_sa=1023194j
偷偷拿老姐拍的照片做底图,:)