matlab学习

认识MATLAB


MATLAB(矩阵实验室)是由美国MathWorks公司开发的第四代高层次的编程语言和交互式环境数值计算,可视化和编程;

MATLAB允许矩阵操作、绘制函数和数据、算法实现、创建用户界面;

MATLAB能和在其他语言,包括C、C++、Java和Fortran语言编写的程序接口;

MATLAB可以分析数据、开发算法、建立模型和应用程序;

MATLAB拥有众多的内置命令和数学函数,可以帮助您在数学计算,绘图和执行数值计算方法。

利用MATLAB计算数学


利用MATLAB计算数学的方方面面。以下是一些常用的数学计算,它最常用于:

  • 矩阵和阵列处理

  • 2-D和3-D绘图和图形

  • 线性代数

  • 代数方程组

  • 非线性函数

  • 统计

  • 数据分析

  • 微积分和微分方程

  • 数值计算

  • 积分

  • 变换

  • 曲线拟合

  • 各种其它的特殊功能

MATLAB有什么特点


  • MATLAB可以进行数值计算,可视化和应用程序的开发,这是一个高层次的语言。

  • MATLAB提供了一个互动的环境,探索,设计和解决问题的迭代。

  • MATLAB提供了广阔的线性代数,统计,傅立叶分析,筛选,优化,数值积分,解常微分方程的数学函数库。

  • MATLAB提供了内置的数据可视化工具,用于创建自定义绘制的图形。

  • MATLAB的编程接口给开发工具,提高代码质量和可维护性和性能的最大化。

  • MATLAB提供了自定义的图形界面构建应用程序的工具。

  • MATLAB提供了基于MATLAB算法集成了C,Java,NET和Microsoft Excel等与外部应用程序和语言功能。

MATLAB的用途


MATLAB被广泛用来作为计算工具在科学和工程涵盖领域物理,化学,数学和工程流。它在一定范围内的应用,包括:

  • 数值分析
  • 数值和符号计算
  • 信号处理和通信
  • 控制系统的设计与仿真
  • 图像和视频处理
  • 工程与科学绘图
  • 测试和测量
  • 财务与金融工程
  • 计算生物学
  • 管理与调度优化计算(运筹学)

一个简单的MATLAB例子


x = [1 2 3 4 5 6 7 8 9 10];
y1 = [.16 .08 .04 .02 .013 .007 .004 .002 .001 .0008 ];
y2 = [.16 .07 .03 .01 .008 .003 .0008 .0003 .00007 .00002 ];

semilogy(x,y1,'-bo;y1;',x,y2,'-kx;y2;');
title('Plot title');
xlabel('X Axis');
ylabel('Y Axis');
print -deps graph.eps





axis square/将当前坐标系图形设置为方形。横轴及纵轴比例是1:1

axis equal/将横轴纵轴的定标系数设成相同值。

也就是说axis square刻度范围不一定一样,但是一定是方形的。

axis equal刻度是等长的,但也不一定是方形的。

axis EQUAL

使在每个方向的数据单位都相同。其中x-轴、y-轴与z-轴将根据所给数据在各个方向的数据单位自动调整其纵横比,这可以使SPHERE(25) 看起来更像球体,而非椭球体

axis SQUARE

设置当前图形为正方形(或立方体形),系统将调整x-轴、y-轴与z-轴,使它们有相同的长度,同时相应地自动调整数据单位之间的增加量


hold on 是保存axes内图像用的
如果你在新画图像之后不想覆盖原图像就要加上hold on这句话

grid on 是matlab中的一种函数,表示在画图的时候添加网格线。
例如:
例如x=1:10;y=x+2; plot(x,y)执行这样的程序画出的图

matlab命令
第一步常用的系统命令,cd进去指定目录,date显示当前日期,path显示路径,pwd当前目录,type文件的内容,save保存变量等,
这些都是常用的系统命令使用方法,如下图所示:
第二步常用的管理会话的命令,clc清除命令行窗口,clear删除变量,exist检查文件是否存在,global声明全局等,如下图所示:

第三步常用的输入输出命令,disp显示字符串或者数组的内容,format格式,input输入,fscanf从文件读取内容等,如下图所示:

第四步其中输入输出命令又包含了一些常用的格式命令,显示为字符串,浮点值,科学记数法等,如下图所示:

第五步常用的矩阵,向量和数组命令,cat连接数组,max返回最大,min返回最小,size计算数组的大小,sum每列求和等,常用命令使用方法如下图所示:

第六步常用的绘图命令,MATLAB比较一个重要的功能就是绘图,

axis,grid,plot,refresh等命令绘图,使用方法如下图所示:


MATLAB在走势图上的颜色设置

MATLAB包含了八个绘制图形的基本颜色选项,下表提供了显示的颜色以及相应的代码:


MATLAB绘制条形图

MATLAB 中使用 bar 命令绘制一个二维条形图。

具体示例

如果有一个包含10名学生的教室,这些学生获得的分数的百分比是75,58,90,87,50,85,92,75,60和95,使用这个数据,我们将绘制条形图。

在MATLAB中建立一个脚本文件,并输入下述代码:

x = [1:10];
y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];
bar(x,y), xlabel('Student'),ylabel('Score'),
title('First Sem:')
print -deps graph.eps

x = [1:10];
y = [75, 58, 90, 87, 50, 85, 92, 75, 60, 95];
barh(x,y), xlabel('Student'),ylabel('Score'),
title('First Sem:')
print -deps graph.eps


 area区域图

Y = [1, 5, 3;

 3, 2, 7;

 1, 5, 3;

 2, 6, 1];

area(Y)

grid on

colormap summer

set(gca,'Layer','top')

title 'Stacked Area Plot'


 pie函数绘制饼图

x = [1 3 0.5 2.5 2];

explode = [0 1 0 0 0];

pie(x,explode)

colormap jet


 

MATLAB绘制等值线

contour 线的两个变量的函数的曲线,沿着该函数具有一个恒定值。加入等于标高点,一个给定的水平,如平均海平面以上用于创建等高线图等高线。

MATLAB 提供了一个轮廓绘制等高线图的函数。

contour(u,v,z,n)是画等值线
其第四个参数是控制等值线的值的
如果n是一个标量,那么解释为等值线的条数例如
contour(u,v,z,20)那么它会根据数据的范围画出20条等值线
如果n是一个向量,那么解释为需要等值线的值,例如
contour(u,v,z,[1 2 3 4])会画出z=1,2,3,4四个值的等值线
如果我们要只要画指定的某个值的等值线,我们就用两个相同的数组成向量
contour(u,v,z,[1 1]);画值为1的等值线
contour(u,v,z,[0 0]);画值为0的等值线

具体例子

让我们生成的等高线图,显示了对于一个给定的功能的轮廓线 g = f(x, y)。这个函数有两个变量,因此,我们将生成两个独立的变量,即两个数据集 x 和 y。这是通过调用 meshgrid 命令。

meshgrid 命令是用于产生一个矩阵的元素,赋予 x 和 y 的范围内进行了在每一种情况下的增量同规格一起。

让我们绘制函数 g = f(x, y), where −5 ≤ x ≤ 5, −3 ≤ y ≤ 3,这两个值的增量为0.1。这些变量设置语法为:

[x,y] = meshgrid(–5:0.1:5, –3:0.1:3);

最后,我们需要分配功能,函数是:x2 + y2

在 MATLAB 中一个脚本文件,并输入下述代码:

[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); %independent variables
g = x.^2 + y.^2;                     % our function
contour(x,y,g)                       % call the contour function
print -deps graph.eps

运行该文件,MATLAB显示的等高线图如下:

让我们修改代码,慢慢美化该等高线图:
[x,y] = meshgrid(-5:0.1:5,-3:0.1:3); %independent variables
g = x.^2 + y.^2;                     % our function
[C, h] = contour(x,y,g);             % call the contour function
set(h,'ShowText','on','TextStep',get(h,'LevelStep')*2)
print -deps graph.eps

运行该文件,MATLAB显示的等高线图变成下述样子:


MATLAB绘制三维图

三维绘图基本显示两个变量中的一个函数定义的表面,g = f (x,y)。

像以前一样,定义 g,我们首先创建一组点(X,Y)函数,使用 meshgrid 命令在域;接下来,我们该函数本身分配;最后使用 surf 命令来创建曲面图。

具体示例

让我们建立一个三维地图函数表面 g = xe-(x2 + y2)

在MATLAB中建立一个脚本文件,并输入下述代码:

[x,y] = meshgrid(-2:.2:2);
g = x .* exp(-x.^2 - y.^2);
surf(x, y, g)
print -deps graph.eps

一 . 三维曲线函数:plot3

 plot3(X, Y, Z)

        plot3(X, Y, Z, S)

        plot3(X1, Y1, Z1, S, X2, Y2, Z2, S …)

X、Y和Z:三个方向上的坐标值,尺寸相同

S:对曲线的线型、颜色、线宽、点标记样式等属性进行设置。

当X,Y,Z是同维矩阵时,则以X,Y,Z对应列元素绘制三维曲线,曲

线条数等于矩阵列数。

t = 0:pi/50:10*pi;
st = sin(t);
ct = cos(t);

figure
plot3(st,ct,t)

二  . 三维网格图:mesh;

 [X,Y] = meshgrid(-8:.5:8);

R = sqrt(X.^2 + Y.^2) + eps;

Z = sin(R)./R;

mesh(Z);

三、曲面图形绘制,surf

曲面图形的绘制使用surf函数完成,与mesh函数类似

surf函数:

k = 5;

n = 2^k-1;

[x,y,z] = sphere(n);

c = hadamard(2^k);

surf(x,y,z,c);

colormap([1  1  0; 0  1  1])

axis equal

surfc:

> [X,Y,Z] = peaks(30);

surfc(X,Y,Z)

colormap hsv

axis([-3 3 -3 3 -10 10])

 三维曲面实例:

绘制圆锥体曲面。

clc,clear,close all
X = -10:1:10;
Y = -10:1:10;
[X,Y] = meshgrid(X,Y);
Z = sqrt(X.^2 + Y.^2);
surf(X,Y,Z)
xlabel('x')
ylabel('y')
zlabel('z')
box on
axis tight
colormap(lines)
shading interp
set(gca,'Ydir','reverse');
set(gcf,'color','w');

 四、特殊图形绘制

Matlab对于不同的三维曲面的绘制提供了不同的画图函数,如slice切片函数、quiver3三维箭头标记函数、sphere等。下面以绘制空间曲线及其运动为例抛砖引玉:

已知空间曲线的方程为:

%   空间曲线的绘制

clc,clear,close all

t = 00:0.1:1.5;     % 设置运动时间

% 给定曲线方程

x = t.^2;

y = (2/3)*t.^3;

z = (6/4)*t.^4-(1/3)*t.^3;

plot3(x,y,x,'r.-'),hold on,grid on

% 计算各方向梯度

Vx = gradient(x);

Vy = gradient(y);

Vz = gradient(z);

% 绘制速度矢量图

quiver3(x,y,z,Vx,Vy,Vz);

xlabel('x')

ylabel('y')

zlabel('z')

 五.三维图形的精细处理

 1.视点处理

方位角

Matlab提供了设置视点的函数view,其调用格式为:

view(az,el)

其中az为方位角,el为仰角,它们均以度为单位。系统默认的视点定义为方位角为-37.5度,仰角30度。

实例:从不同视点绘制多峰函数曲面

subplot(2,2,1);mesh(peaks);

view(-37.5,30);

title('1');

subplot(2,2,2);mesh(peaks);

view(0,90);

title('2');

subplot(2,2,3);mesh(peaks);

view(90,0);

title('3');

subplot(2,2,4);mesh(peaks);

view(-7,-10);

title('4');

2.色彩处理

3.裁剪处理

六. 动画制作

 抖动的帽子

x=-8:0.5:8;

[XX,YY]=meshgrid(x);

r=sqrt(XX.^2+YY.^2)+eps;

Z=sin(r)./r;

surf(Z);

theAxes=axis;

fmat=moviein(20);

for j=1:20;

surf(sin(2*pi*j/20)*Z,Z)

axis(theAxes)

fmat(:,j)=getframe;

end

movie(fmat,10)

 

跳动的爱心
figure('Color','y')

while 1

for i=-5:0.2:5

f=@(xx,yy,zz) xx.^2.*zz.^3+9*yy.^2.*zz.^3/80-(xx.^2+9*yy.^2/4+zz.^2-1).^3;%心形曲面函数

[xx,yy,zz]=meshgrid(-1.5:0.1:1.5);%画图范围

vv=f(xx,yy,zz);

h=patch(isosurface(xx,yy,zz,vv,0));

isonormals(xx,yy,zz,vv,h)

set(h,'FaceColor','r','EdgeColor','none');

lighting gouraud

view(40*i,20)

drawnow 

axis equal off

grid off

pause(0.01)

end

end













 
 阅读(4921)  收藏  (0)   我要纠错

 

原文地址:https://www.cnblogs.com/xiaobai-yemao/p/8793431.html