MATLAB编程之问题+技巧

难点一:m=[1,2,3;4,5,6;7,8,9;0,0,0]

m =1     2     3         sort(m)=0   0   0
      4     5     6                       1   2   3
      7     8     9                       4   5   6
      0     0     0                       7   8   9

[t,v]=sort(m)    %t代表完成默认升序排序的矩阵,v则是代表t中元素在m中的初始位置矩阵

t   =0   0   0      v=4   4   4
      1   2   3          1   1   1
      4   5   6          2   2   2
      7   8   9          3   3   3 

[~,b]=sort(m)   %禁止输出已完成排序的矩阵,只输出位置矩阵

难点二:sortrows

按矩阵某一列进行排序,并且行跟着变动

例如:sortrows(chrom,4)  %chrom是3*4矩阵

难点三: p=[1,1,1,1,1,1,1,1,2,2,2,2,2,2,3,3,3,3,3,4,4,4,4,4,5,5,5,5,5,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7];

                r=randperm(size(p,2));%size(p,2)=44

随机生成一个1*44的1-44的不重复矩阵

                A=p(1,r);%用于打乱p矩阵的排列顺序

r矩阵实质上存放着A矩阵在p矩阵中的位置信息,比如r中第一个数是20,即A中第一个数就是p矩阵中第20个数,以此类推。

难点四:sortrows的缺陷

        当指定列包含重复的元素时,sortrows 会基于其他列中的元素进行排序。如果只需单列排序,就会导致排序结果出现错误。

难点五:获取数组非零元素个数

H =[6,5,6,6,7,1,4,5,6,2,2,7,2,6,1,4,3,1,5,6,1,6,2,5,3,5,1,2,1,1,3,4,6,3,1,7,2,3,7,7,4,7,4,7];

aaa = [1 5 3  6  15 99  0  0  0  0  0 0];
count = sum(aaa~=0,2)

技巧1:循环删除矩阵的某一行

        倒序循环

问题1:如何将一段数据分为三段

    devide = randperm(3,3);
    first_num = all_trips(1:devide(1));
    second_num = all_trips((size(first_num,2)+1):(size(first_num,2))+devide(2));
    third_num = all_trips(NV-devide(3)+1:end);

8、当matlab运行算法时,有错误在迭代次数不确定的情况下出现,处理办法如下:

        a.仔细甄别导致错误的子程序位置(程序需要边写边调试)

        b.将重要信息作为输入数据依次传递到报错位置,这样就可以在matlab报错时查看相关数据信息,用以确定、仔细甄别导致错误的具体函数

        c.将matlab运行模式调整为出现错误时暂停,程序报错后,保存工作区的数据即mat文件

        d.在导致错误的函数前一句代码上打上断点(更改输出数据名称),然后运行程序至该断点,加载上一步保存的mat文件(报错后matlab正处于调试状态,可以将函数放在命令行窗口运行一次用以佐证判断)

        单步调试,进入该错误函数,进一步解析报错原因。 

9、matlab实现数组任意片段中的随机数

a=1:20;
loc_p2 = find(a==8,1);
cur_loc = loc_p2+randperm(size(loc_p2:size(a,2),2),1)-1;

10、unique

a=unique(a,'stable'); %数组第一个值位置不变

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值