20200502 课堂笔记-matlab计算

方法1:使用sort()排序函数

sort(A)若A是向量不管是列还是行向量,默认都是对A进行升序排列。

sort(A)是默认的升序,(或者sort(A,'ascend'))而sort(A,'descend')是降序排序。

sort(A)若A是矩阵,默认对A的各列进行升序排列

sort(A,dim):dim=1时等效sort(A);dim=2时表示对A中的各行元素升序排列

>> A=magic(3)
A =
8 1 6
3 5 7
4 9 2

>> sort(A)
ans =
3 1 2
4 5 6
8 9 7

>> sort(A,1)
ans =
3 1 2
4 5 6
8 9 7

>> sort(A,2)
ans =
1 6 8
3 5 7
2 4 9

===================

 

Matlab中给一维向量排序是使用sort函数:sort(A),排序是按升序进行的,其中A为待排序的向量;若欲保留排列前的索引,则可用 [sA,index] = sort(A) ,排序后,sA是排序好的向量,index 是 向量sA 中对 A 的索引。 索引使排列逆运算成为可能。

事实上,这里A ≡sA(index) , [A恒等于sA(index)],这个结论确实很奇妙,而且很有用。不信你排序之后试下键入命令sA(index) ,看看得到的是不是就是排列前的A呢。

=====================

  在Matlab中排序某个向量(一维)时,可以使用sort(A),其中A为待排序的向量,如果仅是用来排序A,那么直接使用sort(A)即可,如 果排序后还需要保留原来的索引可以用返回值,即[B,ind]=sort(A),计算后,B是A排序后的向量,A保持不变,ind是B中每一项对应于A中 项的索引。排序是安升序进行的。
  
  在Matlab中,访问矩阵中的元素,一维用A(1)访问向量A的第一个元素;(下标从1开始);二维用A(1,2)访问A中第一行,第二列的元素。
  
  由于在sort函数的结果中,是安升序排序的,要转换成降序,先用X=eye(n)生成一个n维的单位阵,然后用X=rot90(X)将其旋转为次对角线的单位阵,再用原来矩阵乘以X即可,如要讲A逆序排列采用如下步骤:
  
  X=eye(size(A));
  X=rot90(X);
  A=A*X;

假如a是一个2*n的矩阵,即两行.
  b=a(1,:);
  [c,pos]=sort(b);%pos为排序后的下标,c为第一行的排序结果;
  a(2,:)=a(2,pos);%第二行按照第一行排序的下标对应
  a(1,:)=c;%第一行结果重新赋给a 的第一行
  
  以下适用于m*n的矩阵按第一行排序
  [ b, pos ] = sort( a( 1, : ) );
  a = a( :, pos );

=======================

matlab按某一列排序,其他列不变办法

b=sortrows(a,2)    %a 为要排序的矩阵。2表示按第几列进行排序,整数代表升序,负数代表降序。
%将矩阵a按照第2列的升序排列,其他列不会作升序排列,而是将跟随着第2列 的变化,保持一一对应。

b=sortrows(a,-3)
%将矩阵a按照第3列的降序排列,其他列将跟随着第3列 的变化,保持一一对应。

data =
     1     3     2
     7     6     5
     4     9     8

sortrows(data,1)
ans =
     1     3     2
     4     9     8
     7     6     5

sortrows(data,-1)
ans =
     7     6     5
     4     9     8
     1     3     2

Example 1

Sort horizontal vector A:

A = [78 23 10 100 45 5 6];

sort(A)
ans =
     5     6    10    23    45    78   100

Example 2

Sort matrix A in each dimension:

A = [ 3 7 5
      0 4 2 ];

sort(A,1)

ans =
     0     4     2
     3     7     5

sort(A,2)

ans =
     3     5     7
     0     2     4

Sort it again, this time returning an array of indices for theresult:

[B, IX] = sort(A, 2)

B =
     3     5     7
     0     2     4

IX =
     1     3     2
     1     3     2

Example 3

Sort each column of matrix A in descendingorder:

A = [ 3  7  5
      6  8  3
      0  4  2 ];

sort(A,1,'descend')

ans =
     6   8   5
     3   7   3
     0   4   2

This is equivalent to

sort(A,'descend')

ans =
     6   8   5
     3   7   3
     0   4   2

 

方法2:累加运算

对于类似\sum_{0}^{63}2^i类似的式子,可以采用除for/while之外的累加运算:

>>syms i;

>>symsum((2^i),0,63);

 

方法3:fzero()函数的使用

在MATLAB中提供了一个fzero函数,可以用来求单变量非线性方程的根。该函数的调用格式为:

z=fzero('fname',x0,tol,trace)

其中fname是待求根的函数文件名,x0为搜索的起点。一个函数可能有多个根,但fzero函数只给出离x0最近的那个根。tol控制结果的相对精度,缺省时取tol=eps,trace指定迭代信息是否在运算中显示,为1时显示,为0时不显示,缺省时取trace=0。

例子:求解y = x*sin(x)在0<x<100的每一个峰值,并绘制曲线。

x = 0:0.1:100;
y = x.*sin(x);
% x为数组,故sin(x)也为数组,中间用.*
plot(x,y)
hold on;

% 开始调用循环,求出每个零点
for i = 1:64

xMax(i) = fzero('(sin(x)+x*cos(x))',i*pi/2);
% 调用函数为y的导数
end
plot(xMax,xMax.*sin(xMax),'or')
% 'or'指orange

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值