1 MATLAB基础应用

1.1 工作区的一些基本操作

1)清除工作区变量:clear;清除命令窗口记录:clc

2)数据类型:数值、矩阵、元胞、变量(sym)等,这对于操作方式和输出结果是什么影响很大。

3)输入函数:input(‘string’),此时输入a则是错的因为a不是MATLAB的数据类型,输入’a’才是对的,是字符型的。

4)打印输出:disp 数据类型

5)换行输入:空格加三个点

在这里插入图片描述

1.2 符号运算

1)定义变量:syms 变量1 变量2 …注意以空格分开。定义的变量在工作空间是sym类型的,因此想要输出赋值未知数的结果需要用一个返回变量来过渡,如e=subs(a+b+c,{a,b,c},{1,2,3})。

2)变量赋值:subs(函数,{变量1,变量2,…},{变量1的值,变量2的值,…})

在这里插入图片描述

3)求导函数diff(f,x)—对函数f中的x进行求导,如f=xyz则输入diff(f,x)结果为y*z;

4)积分函数int(f,x)—对函数f求变量x的积分,如int(f,x,0,1)对函数f求变量x在[0,1]区间内的积分;

5)因式分解函数factor(g)—对g进行因式分解。如g=xz+yz则输入factor(g)返回[z,(x+y)]。

在这里插入图片描述

1.3 程序设计

  (一)文件①脚本文件.m:首行没有function关键字,程序按顺序从第一行执行到最后一行。脚本文件相当于在命令行一行一行的输入命令,可以点击【运行】启动,一般新建的.m文件都用作脚本文件。②函数文件.m:首行声明function 输出参数 = 函数文件名(输入参数);函数文件与脚本文件区别在于需要输入和输出,不能点击【运行】启动函数文件,函数文件可以直接调用!!!例如编写一个求和的函数文件:

%函数文件名fun_add
function e = fun_add(a,b)
e=a+b;

在命令行直接输入fun_add(1,1)则直接输出2;

   (二)流程控制:流程控制和C语言类似包括if的分支、while的循环、for循环和switch匹配选择等等。

1)if分支:if 表达式 语句块 else 语句块 end结尾。例如输入一个数大于0则打印OK,小于0打印NO,等于0打印0。

x = input('please input a number:     ');
if x>0
    disp 'OK';
elseif x<0
    disp 'NO';
else
    disp '0';
end

2)while循环:while 表达式 循环体 end。例如输入一个数如果大于0则累加到10跳出。

x = input('please input a number:     ');
while x>0
    x=x+1;
    disp (x);%如果不加括号则打印的是x字符!!!
    if x>10
        break;
    end
end

3)for循环:for 表达式 循环体 end。例如输入一个数依次累加10后打印。

x = input('please input a number:     ');
%y和C语言不一样,y最后不是作为临时变量被删除的,y一直存在工作空间并且最后值为x+10
for y=x:x+10
    disp (y);
end

4)switch选择:switch 表达式 case 值1 语句1 …otherwise 语句n+1 end。例如输入参数’a’或1,如果是’a’打印是字符,1则打印是数字,都不是打印Error。

x = input('please input a number:     ');
switch x
    case 'a'
        disp ('字符');
    case 1
        disp ('数字')
    otherwise
        disp ('Error')
end


1.4 基本的画图指令

1.4.1 绘制二维曲线图plot函数

   plot(变量1,变量2,‘关键字1’,‘关键字1的值’…),关键字有’颜色标志符描点形状连接线性’如红色+号点虚线连接即’r+:’;在plot函数后面还可以添加其他操作包括

①xlabel(‘string_name’)创建X坐标名;
②title(‘string_name’)创建图标题;
③legend(‘string1’, ‘string2’,…)添加文字标注;
④gtext(‘string1’)利用鼠标添加标注;
⑤grid on显示栅格;

%%绘制左边为sinx右边为x平方图并分别设置XY坐标名称和图标题
x=-pi:pi/5:pi;
y1=sin(x);
y2=x.*x;            %x是一排数字,数乘需要.运算符

subplot(1,2,1);     %subplot(m,n,k),k表示画在第k in m*n空白处
plot(x,y1,'b');
hold on;            %hold on保证两个图像在一张图里显示
plot(x,cos(x),'r');
xlabel('x');        %xlabel函数和title函数必须写在对应的plot下面
ylabel('y1');
%legend函数用来表示文字解释
legend('蓝色---:sinx','红色---:cosx');
title('y=sinx');

subplot(1,2,2)  
%'r.:'关键字表示红色点形:表示虚线连接,'marksize'表示点的大小
plot(x,y2,'r.:','MarkerSize',20);
xlabel('x');
ylabel('y2');
title('y=x*x');

在这里插入图片描述

1.4.2 绘制动态图像for循环联合drawnow函数

   在for循环内进行plot或者散点scatter绘图然后使用drawnow输出一次循环的图像:例如动态sinx输出然后生成gif图像。

在这里插入图片描述

clc;clear;
x = -pi : pi/100 : pi;
y = sin(x);
pic_num = 1;

hold on;
title('y=sinx');
xlabel('x');
ylabel('y');
for i = 1 : 200
    plot(x(i),y(i),'.b');hold on;
    axis([-5,5,-1,1]);
    drawnow;
    F=getframe(gcf);
    I=frame2im(F);
    [I,map]=rgb2ind(I,256);
    if pic_num == 1
        imwrite(I,map,'test.gif','gif', 'Loopcount',inf,'DelayTime',0.01);
    else
        imwrite(I,map,'test.gif','gif','WriteMode','append','DelayTime',0.01);
    end
    pic_num = pic_num + 1;
end

1.4.3 绘制甘特图

   绘制甘特图其实就是在是在对应的XY的位置绘制矩形,设置矩形左下角点的位置,矩形长度,矩形高度以及添加文字。

在这里插入图片描述

clear;clc;close all;
% 甘特图的矩形个数,也就是任务数目
num_task = 5;
color = ['r','g','b','c','m','y','r','g','b','c','m','y','r','g','b', ...
    'c','m','y','r','g','b','c','m','y','r','g','b','c','m','y','r','g','b','c','m','y', ...
    'r','g','b','c','m','y','r','g','b','c','m','y','r','g','b','c','m','y'];

% 甘特图数据,n*3 依次为起始时间,结束时间,工位位置
proMat  = [0 7 1;
    9 18 2;
    20 40 3;
    25 35 2;
    42 50 5;];




for i =1:num_task
    pos=[0,0,0,0];
    pos(1) = proMat(i,1);                   % 矩形的横坐标
    pos(2) = proMat(i,3)-0.2;               % 矩形的纵坐标,要减去矩形长度一半,保证位置在中间
    pos(3) = proMat(i,2)-proMat(i,1);       % 矩形的x轴方向的长度
    pos(4) = 0.4;                           % 矩形长度的宽度
    txt=sprintf('A0%d',i);                  % 注释字符串内容
    
    % 绘制甘特图的矩形
    rectangle('Position',pos,'LineWidth',0.5,'LineStyle','-','FaceColor',color(i));
    % 添加文字在图像内
    text((proMat(i,1)+proMat(i,2))/2,proMat(i,3),txt,'FontWeight','Bold','FontSize',10);
end

set(gca,'ytick',0:1:6);
set(gca,'xtick',0:10:50);
% set(gca,'xticklabel',{'t1','t2','t3','t3','t4','t5','t6','t7','t8','t9','t10'})

xlabel('加工时间(/h)','FontSize',15);
ylabel('工序号','FontSize',15);
title('甘特图示例,X表示时间,Y表示工序','FontSize',20);
  • 4
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值