热度 16
2014-4-14 19:21
1606 次阅读|
0 个评论
首先,我们为什么要使用MATLAB语言呢?MATLAB的语法很像C语言,我们直接用C不也行吗?实际上,MATLAB封装好了很多库函数,比如我们常用的绘图、求伯德图、根轨迹等等,这在C语言里面是没有的。 第一部分 MATLAB基本语法 plot函数 plot作为matlab中的一个内置函数,被我们较多地使用。一般我们都用它来输出一个一元的函数,;例如输出plot(x,y)。先看一个例子: load datas.txt; x=datas(1,:); //文件名 y=datas(2,:); //第一列的数据就是(:,1) plot(x,y); 这是一个关于plot的简单应用,作用是读取文件datas.txt中的数据,第一行作为x的值,第二行作为y的值,然后画出它们的函数关系图像。画出图像以后,可以用curve fitting tool直接修改函数。扩展应用,两条函数曲线: load datas.txt; x=datas(1,:); y=datas(2,:); load datas2.txt; x1=datas2(1,:); y1=datas2(2,:); plot(x,y,x1,y1); 这里,plot以后可以结合curve fitting box来对函数进行进一步的分析。这样也就可以拟合出近似的函数。plot3则是输出三维图像。 这里还应该注意一个函数,那就是axis,它可以选择输出的曲线的范围。用法是axis( )。axi off可以取消坐标轴。 实际上,simulink里面仿真的数据也可以通过clock和to workspace这俩模块输入到workspace里面去,然后进行plot。 Excel中的数据可以到txt里面去。输出语句是fprintf和disp。要注意脚本和函数的区别。如果有输入,那么就用函数,如果没有,那么可以用脚本。也就是说,plot的时候可以用脚本,而有输入输出流的时候可以用函数。二者的语法是一样的。Save函数用来将矩阵中的数据写到一个数据文件中,或者追加到文件中。格式为:Save filename matrixvariablename-ascii如果是追加数据,后面再加上-append。 选择语句 if语句的格式是if xxx;end。注意后面需要一个end来结束。如果条件为真,那么就执行xxx语句,如果为假,则不执行。输入下面的语句,然后点击run即可在命令空间中执行此语句。 num=input('please enter a number:'); if num0 num=abs(num); end fprintf('%.2f',num); 这里,可以加上else语句。比如: a=input('please enter a:'); b=input('please enter b:'); if ab mid=a; a=b; b=mid; end outvalue=a:b; fprintf('%d\t',outvalue); 这样,可以输出a到b之间所有的整数。多个if语句时,可以考虑if xxx end If xxx end if xxx end这样的格式。或者是if xxx elseif xxx elseif xxx.....else ***。 在MATLAB中,同样可以使用C语言中的switch。这里继续介绍几种MATLAB独有的性质。 循环语句 这里需要注意的是,基本语句中,与C语言差别最大的莫过于for循环语句,在MATLAB中,i和j都默认为虚数√-1,所以真要用它们,就得给它们赋初始值,这样的话,才可以。所以C语言中的语法格式要被颠覆了。那么,打印出1到5这几个数可以这样编写: for i=1:5 fprintf('%d\n',i); end 那么,这里需要注意的是,M语言里面没有C语言里面的那种大括号,所以一个代码段,比如if和for语句都是通过end这样的标识来显示的。 总结 至今为止,除了plot函数的用法,我们似乎仍未发现MATLAB编程的优点。实际上,MATLAB内置了许多函数,比如,sum函数可以去一个向量内所有元素的和,而prod可以求向量内所有元素的乘积。其他一些常用的数值计算方法和矩阵计算方法都封装成了这里面的函数。这样,算法更加简单,我们应用实际上是更加容易了。 第二部分 MATLAB独有的编程思想 M语言在处理向量或矩阵的时候其实并不需要循环。这是MATLAB的一个特点。 比如说,把向量中的每一个元素除以二。 v= ; avr=v/2; fprintf('%f\t',avr); 这样可以简单地计算出avr的值来,而不需要C语言中的嵌套和循环语句。同样地,完成两个向量或者矩阵的加减法运算也可以这样高效地编出来。 Tip:输入一个矩阵 这个意思是第一行是5到8,第二行是9到3,依次减去二。这样的话是不是在有些时候可以省去循环语句,高效编程。 如果是一个向量,中间取n个线性的值,那么就是linspace(min,max,n)。 比如计算好多数的正弦值,直接定义这些数是一个向量,然后计算即可。 Tip:我们需要注意一点,那就是进行乘法、除法和乘方运算的时候,必须在前面加上一个点,比如定义一个向量v= ,然后自己的乘方的话,是.^2,而不是直接^2。向量与向量的每个元素逐个进行的乘法或者除法都是这样计算的。