上个学期我学习了matlab的知识,但是这个学期重用的时候,我发现我已经几乎忘记了。
于是,我决定重新开始并记录下来。 另外,自己稍后检查补货也很方便!
m文件编程
脚本文件
matlab有自己的命令行窗口,可以直接在命令行窗口中输入简单的命令,但随着命令行的增加和命令本身的复杂性的增加,使用命令行变得有点不方便。 在这种情况下,需要脚本文件。 脚本文件可以说是matlab指令集合的封装。
函数文件
函数文件以function开始,以end结束。 这也是区别于脚本文件的地方。
在函数后定义输出参数、函数名称和输入参数,例如:
function [x,y,z]=math_count(a,b,c ) ]
x、y和z是括在框中的输出参数,math_count是函数名称,a、b和c是括在括号中的输入参数。
没有参数也可以。 例如:
功能打印机结果(x,y ) )。
打印结果是函数名称,x和y是输入参数,没有输出参数。
数据类型
matlab有六种基本数据类型:数字类型、逻辑类型、字符串、函数句柄、结构和单元格数组。 这里简单介绍一下前四种。
数值类型
基本的数值类型有整数类型和浮点数类型。 其他数值类型包括复数类型、无限量(Inf )和非数值量(NaN )。 后两个是matlab的特征型。 当然请记录下来。
多种类型
复数有实部和虚部两个部分,matlab中默认使用I和j作为复数的虚部标志。 创建复数时,以复数形式直接输入,或使用函数complex。
z=1 2i %以复数形式输入
输出结果:
z=complex (x (2,3 ) %用complex ) x,y函数输入
输出结果:
使用z=complex(2) %complex ) x,如果x是实数,则z=x 0i,如果x是复数,则z=x
输出结果:
无限量(Inf )和非数值量(NaN )
Matlab中使用的Inf和-Inf分别表示正无限量和负无限量,NaN表示非数值量。
正负无限量通常是运算溢出而不是数值量的结果,是0/0或Inf/Inf的非正常运算的结果,这两个NaN不同。
Inf和NaN是Matlab的特殊变量,其他Matlab还有几个特殊变量
ans :默认情况下用作保存运算结果的变量名称
(pi )圆周率
eps :机器零阈值,Matlab中的最小数量
2 .逻辑类型
Matlab将任意一个0以外的值设为真,将输出设为1,将零设为假,将输出设为0。
运算逻辑类型数据需要关系运算符和逻辑运算符。
Matlab的关系运算符与c/c几乎相同,只是不等号不同。 在抄送中不等号是!=,在Matlab中不等号为~=。
3 .字符和字符串
字符和字符串分别是字符数组和字符串数组中的文本。
字符数组为c='Hello Word!' 的文字序列
字符串数组是文本片段的容器,提供一组用于将文本作为数据进行处理的函数。 从R2017a开始,字符串也可以用双引号创建。 例如,str='You are best!'
字符串函数
从R2016b开始,可以使用字符串数组string代替字符数组。 根据官方文档,还可以通过标准数组运算将字符串数组配对
也可以索引、重构和合并,并使用运算符将文本添加到字符串中。 (一切都朝着c方向哦) ) )
4 .函数句柄
函数句柄是一种间接调用函数的方法,与给函数加别名相同。
例如,如果有一个名为myfunction的函数,请在此指定语句
f=@myfunction %f是句柄,可以从f调用myfunction
可以使用函数句柄构建匿名函数,也可以指定回调函数。 还可以使用函数句柄将一个函数传递给另一个函数,或从主函数内部调用局部函数
以下是通过函数句柄间接调用函数的示例。
在命令行窗口中输入:
Handle=@sin; %您也可以自己创建函数,并通过函数句柄间接调用x=0:pi/4:pi。使用%冒号创建一维数组。 0是第一个数,每次以pi/4为单位增加。 pi是最后的数y=handle(x )
输出结果:
也许也有学生认为可以直接呼叫。 确实不错,但函数句柄有更多的优点。 举几个例子
提高运行速度。 matlab每次对函数的调用都必须搜索所有路径,但函数句柄可以减少搜索并提高执行速度。
更容易使用。 例如,我运行了这个目录后
,创建了本目录的一个函数句柄,当我转到其他的目录下的时候,创建的函数句柄还是可以直接调用的,而不需要把那个函数文件拷贝 过来。因为你创建的函数句柄中已经包含了路径。控制流Matlab的控制流也与c/c++大体相同,唯一要注意的是每个条件都有相应的end关键字。
顺序结构
选择结构
if—end
if—else—end
if—elseif—else—end
示例:
新建脚本文件,保存为exe1_1
x=input('enter''x'':');%input函数返回你输入的整数,提示信息用''括起来,如果想要输出单引号,两个单引号'' ''即可if(x>0)
y=1;
elseif(x==0)
y=0;else y=-1;
end%不要忘记加end,Matlab不会自动补全end,最好一开始就写下来,养成良好的编程习惯至关重要
disp(y)%disp作为输出函数
在命令行窗口调用exe1_1,输入-5
得到结果:
switch—case结构
注意Matlab与c/c++语言的switch-case结构不一样:只要条件满足,立即返回,这也是为什么不用加break的原因。
示例:新建脚本文件,保存为ex1_2
month=3;switchmonthcase {3,4,5}
season='spring'
case {6,7,8}
season='summer'
case {9,10,11}
season='autumn'otherwise
season='winter'end
得到结果:
注意
1.M文件的搜索路径必须与当前路径一致,否则运行会出错,搜索路径即保存M文件的位置。可以直接修改当前路径与搜索路径一致,也可以添加搜索路径,这样就一劳永逸了。
2.如果遇到不认识的函数,可以利用help/doc命令在命令行查找,格式为help/doc function,function为函数名,养成查阅文档的习惯很重要!
循环结构
while,for语句
break、continue、return ——行尾可以不用加分号
每一个关键字后面都要有与之对应的end关键字
范例:
使用0.618法(黄金分割法)极小化f(t)=exp(-t)+exp(t),区间为[-1,1]。(即逼近函数在已知区间的极小值,找到对应的t
0.618法主要思想:
0.618法在给定区间[a,b]内适当插入两点a1,a2,并计算其函数值。
a1,a2将区间分成三段,通过函数值大小的比较,删去其中一段,使搜索区间得以缩小,
然后再在保留下来的区间上作同样的处理,如此迭代下去,从而得到极小点的数值近似解。
0.618法主要步骤:
1.在区间[a,b]内分别按照0.618和0.382的比例处取点a1 ,a2, 把[a,b]分为三段。
2.如果f(a1)>f(a2),令a=a1,a1=a2,a2=a+0.618*(b-a)
3.如果f(a1)
4.如果满足迭代条件或者超出给定迭代次数,程序终止,否则继续运行下去。
新建名为fai.m的函数和zero_soe.m的函数
1 function z=fai(t)2 %fai函数3 %给定函数4 z=1*exp(-t)+1*exp(t);5 end
1 function [k] =zero_soe(a0,b0,iter,tol)2 %UNTITLED3 精确线性搜索之0.618法3 %a0,b0分别代表左端点,右端点4 %iter代表给定的迭代次数5 %tol代表误差限6 m=a0+0.382*(b0-a0); %试探点lameda07 n=a0+0.618*(b0-a0); %试探点u08 ym=fai(m);9 yn=fai(n);10 count=0; %现有的迭代次数11 while(countyn)13 if(b0-m<=tol)14 k=n;15 return;16 else
17 a0=m;18 m=n;19 ym=yn;20 n=a0+0.618*(b0-a0);21 yn=fai(n);22 count=count+1;23 end24 else
25 if(n-a0<=tol)26 k=m;27 return;28 else
29 b0=n;30 n=m;31 yn=ym;32 m=a0+0.382*(b0-a0);33 ym=fai(m);34 count=count+1;35 end36 end37 end38 if(count>=iter)39 disp('迭代次数超过给定次数!') ;40 end41 end
得到结果:
通过求导可知函数的极小值对应的t等于0,可知极小化的结果是正确的。
(皆大欢喜[]~( ̄▽ ̄)~*)
常用的函数命令
输入命令clc:清除命令行窗口
clf :即clear figure,清楚图形窗口
clear:清除工作区的变量,clear all是清除全部变量
format:设置命令行窗口显示格式
iskeyword:确认输入是否为关键字,如果没有输入,则输出全部的关键字
who:显示当前变量名列表
whos:显示变量详细列表
which:查看关键字的路径帮助help:命令行窗口中函数的帮助
doc:帮助浏览器中的参考页
demo:帮助浏览器中查看示例
lookfor:在所有帮助条目中查看关键字
常用快捷键
Ctrl+R :注释(对多行有效)
Ctrl+T :取消注释(对多行注释有效)
Ctrl+Z :取消上一次操作
Ctrl+I :自动缩进(对多行有效)
Ctrl+[ :减少缩进(对多行有效)
Ctrl+] :增加缩进(对多行有效)
↑光标键 :选择最近的一次命令
Esc:清除当前行
参考资料:
Matlab 2016a自学一本通 /jqdbq,韩晶编著 ~北京:电子工业出版社,2016,12
还没有写完,以后慢慢补吧~
内容来源于网络如有侵权请私信删除