关于matlab

preface:

2010年11月开始跟师兄做图形学的研究。开始看图形学,看数值逼近,看微分几何。

1.数值逼近可以用matlab来做实验。

2.微分几何太抽象了,可以用matlab来画出图形看看。

3.正好师兄推荐用matlab先做些简单的图形实验。

所以这两天就用了下matlab, 下面记录一些个人认为比较有用的心得。

 

 


注释:%

块注释:

%{

注释语句(注意,'%{' 行后面与 '%}'行前面 都不能有其他字符)

%}

连接符: ...

如果一个语句在一行内书写太长了,要再下一行接着写,这时可以在上一行末尾打上半个省略号(...),然后再在下一行接着写。

比如,下面俩个语句是等价的:

       x1 = 1 + 1/2 + 1/3 + 1/4 + 1/5 + 1/6;

和    x1 = 1 + 1/2 + 1/3 +...

               1/4 + 1/5 + 1/6;

 

 

1.构造矩阵(数组)

x = [1 2 3]
x = [1 2 3; 4 5 6]

 

x = linspace(1,50)  %创建100个(默认)元素的行向量,元素值依次从1~50

x = linspace(0,0,5) %创建5个元素都是0的行向量
x = [0:2:100]  或 x = 0:2:100

 

x = zeros(m,n) %创建m*n的全0矩阵

y = x(1:3 , 2:5)  %y矩阵为取x矩阵的1~3行,2~5列的数据

y = x(:, 1:3) %y矩阵为取x矩阵1~3列的数据

 

 

2.矩阵运算

A*B    即矩阵乘法
A.*B   即矩阵对应元素相乘 (相应的,还有./等运算)
A'     即矩阵转置
inv(A) 即矩阵求逆
det(A) 即求方阵行列式

rank(A)即求矩阵的秩

 

3.参数曲线绘制 r(t)=(x(t), y(t), z(t))

eg: 
 

 

 

4.参数曲面的绘制 z = f(x,y) 和 r(u,v) = (x(u,v), y(u,v), z(u,v))

eg:

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

 

5.关于 mesh 与 meshgrid (surf与mesh本质一样)

 

首先,mesh只能画四边形网格(要想画三角形网格、或者其他多边形网格,就得自己用plot3等等其他或一个叫patch的函数来画了)
其次,这是对help的补充,你还是先看看matlab的help文档吧。

 

meshgrid
  用法:[X,Y]=meshgrid(x,y); [X,Y]=meshgrid(x); [X,Y,Z]=meshgrid(x,y,z);
最后一种暂时没用到,不管他;
第二种 [X,Y]=meshgrid(x) == meshgrid(x,x);
所以我们来了解第一种 [X,Y]=meshgrid(x,y);

该函数的作用是,将向量 x=[x1, x2, ... xn] 与 y=[y1, y2, ... ym] 转换成m*n的矩阵X,Y
其中,X的每行都是x, Y的每列都是y
即:
                x1 x2 ... xn                      y1 y1 ...
X[m*n] = x1 x2 ... xn   与  Y[m*n]= y2 y2 ...
                ...                                     ...
                x1 x2 ... xn                      ym ym ...

这样的效果,等于在笛卡尔坐标中将XY平面用x,y网格化了。
然后只要再对应上每个 XY平面网格交点 对应的Z值,就能画出空间上的曲面网格了。

 

mesh
  用法:mesh(X,Y,Z); mesh(x,y,Z); mesh(Z).  其中X Y Z都是m*n矩阵; x是n维向量,y是m维向量。
实际上, mesh(Z) = mesh(1:n, 1:m, Z);
    mesh(x,y,Z) = [X,Y]=meshgrid(x,y) + mesh(X,Y,Z);
    
至于 mesh(X,Y,Z),
其实如上所述,就是先通过X,Y将笛卡尔坐标的XY平面网格化,然后对应上每个交点的Z轴值,就得到我们要的网格曲面了。

PS:如果X,Y是从meshgrid得到的,那么XY平面网格就是一个个矩形的网格。
但X,Y不一定都想meshgrid得到的一样,X的每行都是x,Y的每列都是y。 这时候,XY平面网格就未必是一个个矩形了,但当然仍是四边形。(通常,像4中参数表达书获得的XY就这样。)

 

 

6. 数据的保存与读取(save & load)

save:将工作空间的所有变数储存到名为matlab.mat的二进制档案。

save filename:将工作空间的所有变数储存到名为filename.mat的二进制档案。

save filename x y z :将变数x、y、z储存到名为filename.mat的二进制档案。 

 

以二进制的方式储存变数,通常档案会比较小,而且在载入时速度较快,但是就无法用普通的文书软体(例如pe2或记事本)看到档案内容。若想看到档案内容,则必须加上-ascii选项。若非有特殊需要,我们应该尽量以二进制方式储存资料。 

 

save filename x -ascii:将变数x存到名为filename的ASCII档案。

save filename -ascii:将所有变量存到名为filename的ASCII档案。但ascii文档无法区别各个变量。

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

load filename:load会寻找名称为filename.mat的档案,并以二进制格式载入。若找不到filename.mat,则寻找名称为filename的档案,并以ASCII格式载入。若以ASCII格式载入,则变数名称即为档案名称。
load filename -ascii:load会寻找名称为filename的档案,并以ASCII格式载入。    

 

7. 用patch绘制

patch图形对象是由一个或多个多边形(连接或不连接的)

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值