• Matlab编程学习笔记【待续】


    最近想用Matlab进行数据分析,算法性能测试,平时由于用的是C、C++,因此很多习惯都一时改不了,这里自己列出来一些Matlab中明显不同的地方。

    1. 矩阵单元元素访问方式:A(1,2)---A[1][2]
    2. 选取矩阵某个行或者列:A(:,1);%选取矩阵第一列.A(1,:);%选取矩阵第一行
    3. 矩阵单元以及数组等起始下标:行和列都是从1开始,A(1,1)为第一个元素 A(0,1)则是越界 相应的A(1,columns)不越界
    4. Matlab矩阵的存放是列优先,而我们平时的都是行优先。例如:A是一个2行2列的矩阵。A(2)代表的是A(2,1)而不是A(1,2)
    5. 运算符号:~表示! ,| & 相应的表示|| &&
    6. 字符串表示方式:单引号‘’,而C中则是双引号““,因此在做字符比较的时候,不能用 c == '\n' 要知道'\n'表示的是一个字符串了。此时则需要用ASCII码代替。c==10
    7. 转换函数:字符串转数值str2num(...)
    8. Matlab的矩阵格式可以为:[1,2\n3,4\n5,6\n],因此在编程生成数据时候,我们可以按照这种格式生成实验数据,然后直接复制到Matlab中就可以实现矩阵的赋值了。这样就不用使用文件读取那么麻烦了。

    这里附上一个自己第一次编写的M文件:功能是从文本数据中读取格式数据

     my.txt文本内容:

     实现代码如下:

    read.m
     1 %
    2 %write a program for reading files
    3 %
    4 fid=fopen('my.txt','r');
    5 %
    6 %set j=1 notice:matlab first index is 1 not 0.
    7 %
    8 i=1;
    9 j=1;
    10 flag=0;
    11 while ~feof(fid)
    12 s=fgets(fid);
    13 temp='';
    14 for k=1:length(s) %|| (s(k))==EOF
    15 if (s(k)==32 | s(k)==10) % ''10 % '\n'
    16 if flag==1 %last char is not ''
    17 %fprintf(1,'temp=%s\n',temp);
    18 A(i,j)=str2num(temp);
    19 %fprintf(1,'A[%d][%d]=%f\n',i,j,A(i,j));
    20 j=j+1;%add columns
    21 temp='';
    22 end
    23 flag=0;
    24 else
    25 %connect the new char to temp
    26 temp(length(temp)+1)=s(k);
    27 flag=1;
    28 end
    29 end
    30 %%
    31 i=i+1;%add rows
    32 j=1;%re set j=1 notice:matlab first index is 1 not 0.
    33 end
    34 if flag==1
    35 [rows,columns]=size(A);
    36 A(rows,columns)=str2num(temp);
    37 %fprintf(1,'A[%d][%d]=%f\n',i-1,j,A(i-1,j));
    38 flag=0;
    39 temp='';
    40 end
    41 fclose(fid);
    42 A

     另外:str='\n' 那么str(1)=\ str(2)=n 而不是str(1)=\n换行符。故而在实际使用时候应用其ASCII码10代替。其他的字符这不需要。

    str=',' ,replaced by str(1),类似的其他一般字符都可以这么操作。

    M文件编写,函数调用

         函数定义形式:function[输出变量列表]=函数名(输入变量列表)

                               函数体语;

    注意事项:当输入变量多于一个时,应该用方括号,输入变量多于一个时应该用逗号隔开,编写完以后必须以函数名存盘,否则不能被调用,函数M文件不能访问工作区中

    的变量。例如:one output variable                                                      two output variable

                       %filename:sci.m                                                             % filename:sc.m

                       function y=sci(x)                                                             function[y,z]=sc(x)

                             ..............                                                                         .........

    基本的绘图控制

        在调用plot时可以指定颜色、线型和数据点图标,基本格式为:plot(x,y,'color-linestyle-marker')

    当只指定数据点图标时,数据点将不连成线,而只画出一个个孤立的数据点。字符串参数的取值如下:

    颜色:y(黄);r(红);g(绿);b(蓝);w(白);k(黑);m(紫);c(青)

    线型:-(实线);:(点线);-.(虚点线);- -(虚线).

    数据点图标:.;+;*;o(小圆圈);pentagram(五角星)等等,

    这些标记符的大小、形状、填充等详细可查看:http://blog.csdn.net/benjmzhu/article/details/7246892

    plot(t,sin(2*t),'-mo',...
                    'LineWidth',2,...
                    'MarkerEdgeColor','k',...
                    'MarkerFaceColor',[.49 1 .63],...
                    'MarkerSize',12)

        坐标系的控制:不特别指定时,matlab自动指定图形的横纵坐标比例和显示的范围,如果不满意,可用axis命令来控制,常用的有:

       axis([xmin xmax ymin ymax]) []中分别给出x轴和y轴的最小、最大值

       axis equal x轴和y轴的单位长度相同

       axis square 图框呈方形

       axis off 取消坐标轴

    图形标注

    xlabel,ylabel,zlabel,title

    text和gtext用于在图形中特定的位置加字符串,前者字符串的位置在命令中指定,后者用鼠标指定;

    grid在图形上加网格。

    多幅图像:subplot(m,n,p)可在同一个图形窗口中,画出多福不同图像。

    三维图形

    空间曲线:plot3(x,y,z)

    带网格的曲面:[X,Y]=meshgrid(x,y);mesh(X,Y,Z);surf(X,Y,Z)

    高等线:二维三维高等线函数contour,contour3

    打开另外一个图形窗口命令:figure(n)

    Matlab编程网上资料收集:

    MATLAB通用图形函数命令 matlab之基本绘图函数   http://wenku.baidu.com/view/f451ff84bceb19e8b8f6ba8f.html

    matlab设置图中字体和线条大小等  http://wenku.baidu.com/view/9f865323aaea998fcc220e5e.html

    待续。。。。。。

             

  • 相关阅读:
    在VScode下搭载Perl的调试环境
    32.最长有效括号(Longest Valid Parentheses)
    23.合并K个排序链表(Merge k Sorted Lists)
    10.正则表达式匹配(Regular Expression Matching)
    4.寻找两个有序数组的中位数(Median of Two Sorted Arrays)
    C++中不引人瞩目的细节
    关于C++项目中头文件相互包含的问题
    关于css中hover下拉框的一个bug
    DFS-BFS(深搜广搜)原理及C++代码实现
    trie(字典树)原理及C++代码实现
  • 原文地址:https://www.cnblogs.com/wintergrass/p/2244961.html
Copyright © 2020-2023  润新知