matlab 学习记录

1.   点乘与差乘

         z=cross(x,y)

          z=dot(x,y)

2. Matlab三维图中如何实现x,y坐标名称与各自的坐标轴平行?

figure;
= meshgrid(-8:.5:8);
R = sqrt(X.^2 + Y.^2) + eps;
Z = sin(R)./R;
mesh(Z);
x1=xlabel('X');
x2=ylabel('Y');
x3=zlabel('Z');
set(x1,'Rotation',45);
set(x2,'Rotation',-45);

3.求两个单位向量之间的欧拉角

1)、假设a和b都是单位向量,a叉乘b得到旋转轴,a点乘b再求arccos得到旋转角度,从而得到四元数表示
 
2)、将四元数转换为欧拉角,
公式见 http://www.cnblogs.com/wqj1212/archive/2010/11/21/1883033.html
 
如果在matlab里实现的话,可以直接调用Aerospace Toolbox里的quat2angle,实现四元数到欧拉角的转换


4. 四元数到欧拉角的转换         

[r1 r2 r3] = quat2angle(q)
[r1 r2 r3] = quat2angle(q, s)

其中q为四元数,r1-r3为欧拉角,s为欧拉转序(rotation sequence,有的资料译成“顺规”)。

1>、输出的欧拉角单位是弧度;

2>、欧拉角的定义有很多种,应用在不同的领域(有时用的名字,例如 Tait-Bryan角)。确切点说,一共有12种定义——第一次旋转可以绕任何一个坐标轴进行(3),第二、第三次旋转要绕除上一次旋转之外的另外两个坐标轴(2x2),所以,一共可以有3x2x2=12种定义。quat2angle支持这全部12种定义,并以三次旋转的坐标轴表示,例如'ZYX', 'ZYZ', 'ZXY',等等。默认的转序是ZYX。

3>、上面说的转序涉及到坐标系的定义,该函数的坐标系定义为Z轴为竖轴,可能与某些领域的习惯不同,需要特别注意。

 [yaw, pitch, roll] = quat2angle([ 1  0  1  0 ])
yaw =      0
pitch =     1.5708
roll =      0


5   使用matlab绘制散点图

clc,clear

x=[11.9,11.5,14.5,15.2,15.9,16.3,14.6,12.9,15.8,14.1];

y=[196.84,196.84,197.14,197.03,197.05,197.13,197.04,196.96,196.95,196.98];

plot(x,y,'.')

6.  A*(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。

公式表示为: f(n)=g(n)+h(n),

其中 f(n) 是从初始点经由节点n到目标点的估价函数,

g(n) 是在状态空间中从初始节点到n节点的实际代价,

h(n) 是从n到目标节点最佳路径的估计代价。

保证找到最短路径(最优解的)条件,关键在于估价函数f(n)的选取:

估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。

如果 估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解

7  元胞数组    

(1)元胞数组的创建 

a={'matlab',20;ones(2,3),1:10}                                        %创建方法一

b=[{'matlab'},{20};{ones(2,3)},{1:10}]                                %创建方法二

c={10}                                                                               %赋值方法一

>> c(1,2)={2}                                                                         %赋值方法二
isequal(a,b)                                                                     %判断是否相同

whos

用cell函数创建元胞数组,创建的数组为空元胞。cell函数创建空元胞数组的主要目的是为数组预先分配连续的存储空间,节约内存占用,提高执行效率。  

>> a=cell(1)


(2)元胞数组的数据获得

    从元胞数组中读取数据,可保存为一个标准的数组或一个新的单元数组,或取出数组进行计算。元胞数组中数据的访问,可通过元胞内容的下标进行,用元胞数组名加大括号{}。大括号中数值表示元胞的下标。如a{1,2}表示元胞数组中第一行第二列的元胞。

>> a={20,'matlab';ones(2,3),1:3}

使用元胞的下标,可将一个元胞数组的子集赋值给另一个变量,创建新的元胞数组。

>> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]

a =

    [1]    [2]    [3]
    [4]    [5]    [6]
    [7]    [8]    [9]

>> b=a(2:3,2:3)

b =

    [5]    [6]
    [8]    [9]


     (3)元胞数组的删除和重塑

     要删除单元数组中的行或列,可以用冒号表示单元数组中的行或列,然后对其赋一个空矩阵即可。


      (4)元胞数组中的操作函数

      cell:创建空的元胞数组

      cellfun:为元胞数组的每个元胞执行指定的函数

      celldisp:显示所有元胞的内容

      cellplot:利用图形方式显示元胞数组

      cell2mat:将元胞数组转变成为普通的矩阵

      mat2cell:将数值矩阵转变成为元胞数组

      num2cell:将数值数组转变成为元胞数组

      deal:将输入参数赋值给输出

      cell2struct:将元胞数组转变成为结构

      struct2cell:将结构转变为元胞数组

      iscell:判断输入是否为元胞数组


(5)元包数组和其他数组一样,也可以通过reshape函数改变形状,改变后的元胞数组与原元胞数组的元素个数相同,不能通过改变形状来添加或删除元胞数组中的元素。


(6)    cellfun函数的主要功能是对元胞数组的元素(元胞)分别指定不同的函数,不过,能够在cellfun函数中使用的函数ushuliang是有限的。

    能在cellfun中使用的函数:

    isempty:若元胞元素为空,则返回逻辑真

    islogical:若元胞元素为逻辑类型,则返回逻辑真

    isreal:若元胞元素为实数,则返回逻辑真

    length:元胞元素的长度

    ndims:元胞元素的维数

    prodofsize:元胞元素包含的元素个数


    (7)元胞数组的嵌套

    元胞数组的元胞中包含其他的元胞数,称为嵌套元胞数组,没有嵌套结构的元胞则称为页元胞。使用嵌套的大括号或cell函数,或直接用赋值表达式,都可以创建嵌套单元数组,另外还可以访问嵌套元胞数组的子数组、元胞或元胞的元素。

8  matlab字符串处理(转) 

9.用Excel Link实现Excel与Matlab混合编程(一) 

10 Matlab的GUI参数传递方式 

11  matlab 画圆柱体 

        [x,y,z]=cylinder;%生成圆柱点 surf(x,y,z)%画圆柱%上面是画圆柱的方法,其中z表示高度,在z前乘个系数就可以更改高度,如:surf(x,y,3*z)也可以调整它们顺序 ,如:surf(x,z,y) cylinder函数可以更改半径及生成的点数,可以看帮助文件:>> doc cylinder

12  command

     1)  函数写法:  函数名与文件名相同  function [] = fdisplaymark(marks,num)

     2)  坐标轴一致   axis equal;

      3)  网格  grid on;

      4) [rows,cols] = size(marks);

      5)  画线  (0,0) --> (10,0)        line([0,10],[0,0]) ;hold on         %   line(  [x1,x2],[y1,y2] )


13 直线方程线性拟合

x = mark17(520:1:680,  1) ; y =mark17(520:1:680,  2);

 p = polyfit(x,y,1);

xx = min(x):1:max(x);

yy = polyval(p,xx)

>> plot(x,y,'bo'); hold on;
plot(xx,yy,'r-'); hold off;
grid on;
legend('原始数据点','拟合线','Location','NorthWest');
disp(['y =' poly2str(p,'x')]);
y =   -0.085181 x + 49.4111
>>  plot(x,y,'bo'); hold on;
>> plot(xx,yy,'r-'); 


14  varargin   变量列表

               Variable-length input argument list

例如

filter = ekf_filter( x_k_k, p_k_k, sigma_a, sigma_alpha, sigma_image_noise, 'constant_velocity' );

function f = ekf_filter( varargin )

   f.type = varargin{6};
    
   f.x_k_k = varargin{1};
   f.p_k_k = varargin{2};
   
   f.std_a = varargin{3};
   f.std_alpha = varargin{4};
   f.std_z = varargin{5};

  f = class(f,'ekf_filter');


15  读取图片

imRGB=imread(sprintf('%s%04d.pgm',image_file_name_prefix,k));  % pgm是灰度图像
im=imRGB(:,:,1);

imread可以直接读取RGB图像

显示  imshow



你可能感兴趣的:(matlab 学习记录)