matlab学习第一天,青春年少,校园时光,没有好好学习,踏入社会好好学习。记录一下学习感悟

x=0:10;
y=x.^2-10.*x+15;
plot(x,y,'r--',x,y,'bo');

  


 

x=0:10;
y=x.^2-10.*x+15;
plot(x,y,'ro--');

  

总结:matlab画图中,先是颜色、再是符号,最后才是线型。

如果想要将具体线条与符号颜色,区分开。可以类似联合作图那样去做。


 

legend 来制作条例:

x=0:pi/100:2*pi;
y1=sin(2*x);
y2=2*cos(2*x);
plot(x,y1,'k-',x,y2,'b--');
title('Plot of f(x)=sin(2x) and its derivative');
xlabel('x');
ylabel('y');
legend('f(x)','d/dx f(x))');
grid on ;

  

总结:legend写出来的图例一般位于右上角,可以自由拖动,图例的作用是更好的在图形中直接观看线型。

plot 的x,y 均用线性尺度;

semilog 函数x轴用对数尺度,y轴用线性尺度;

semiloge 函数x轴用线性尺度,y轴用对数尺度;

loglog 函数的x,y均用对数尺度。

这四个函数的意义是等价的,只是坐标轴的类型不同。

ps:pdf中的四个不同的函数所得出的图形,目前不会画。。。。


 

习题1:

代码如下:

T_HUASHI=input('ENTER THE HUASHI TEMPERATRURE:');
T_KAIERWEN=(5/9*(T_HUASHI-32))+273.15;
STR=['THE T_KAIERWEN IS  ' num2str(T_KAIERWEN)];
disp(STR);
% 另外一种输出方法
fprintf('%6.2f T_HUASHI=%6.2f T_KAIERWEN',T_HUASHI,T_KAIERWEN);

其中matlab输出表达有两种方式:fprintf,disp。各表达式的意思都是,就是类型的匹配要对应的上。

同时disp与fprintf的最大区别是,disp输出的字符串是用中括号类似矩阵的形式表述输出,然后用disp展示出来。

学到这里的感悟是,matlab的所有标量都可以随便定义,定义得目的是为了后续计算的代入使用


 MATLAB有三种类型的错误:

1、语法错误;2、运行时错误;3、逻辑错误

matlab中运算符的意义如下表格:

不等于的形式是~=

逻辑运算符的意义如下所示:

其中xor应该是逻辑异或。

MATLAB的逻辑函数如下表所示

真为1,假为0.

if语句要以end结尾

下面给出习题,加强理解记忆:

x=input('enter x : ');
y=input('enter y : ');
if x>=0& y>=0
    fun=x+y;
elseif x>=0&y<0
    fun=x+y^2;
elseif x<0&y>=0
    fun=x^2+y;
else
    fun=x^2+y^2;
end
disp(['the ans is :' num2str(fun)]);

matlab编译器自动缩进。切记disp输出的表达方式,小括号类似与fprintf的输出表达,带结果输出的字符串是在中括号内以矩阵形式表示的。

switch语句也是以end结尾的,其中case后面只需要跟表达式就可以了

matlab也用来捕捉异常

try。。catch。。结尾也是以end结束。语句块里和平常的表达方式无差异


 

附加的画图属性:

用来对轴进行控制。


 

在同一个坐标轴内画出多个图像,这是上面遗留问题的解决方法:

x=-pi:pi/20:pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'b-');
hold on ;
plot(x,y2,'k--');
hold off;
legend('sin x','cos x');

  

hold on 然后是hold off,最后添加图例。可以将hold on理解为这个画图的窗口暂时hold住,我还要继续画图;

我将该方式用前面章节学到的方式也画到一起,看看有没有区别:

x=-pi:pi/20:pi;
y1=sin(x);
y2=cos(x);
plot(x,y1,'b-',x,y2,'k--');
legend('sin x','cos x');

  

结果完全一致,由此归纳出两种方法,一种是全部写在一个plot函数里,另外一种就是用hold on的分开表达形式。

创建多个图像:figure(1),figure(2),figure(3)....,由此打开多个画图窗口

子图像:

subplot(m,n,p)

该命令在当前窗口创建m*n个子图像,并选择子图像p来接受当前所有画图命令

figure(1);
subplot(2,1,1);
x=-pi:pi/20:pi;
y=sin(x);
plot(x,y);
title('Subplot 1 title');
subplot(2,1,2);
x=-pi:pi/20:pi;
y=cos(x);
plot(x,y);
title('Subplot 2 title');

  

这种方式非常好,将想要的图形绘制在一个窗口中,首先定义只需要一个窗口,然后定义子图1,再给出子图1的制作方式;定义子图2,再给出子图2的制作方式

通过子图方式,可以讲很多数据类比的图放在一个窗口直接对比,更体现图像化的优势


 

对画线的增强控制:

while循环也是以end结尾

for循环同样以end结尾

disp('calculate the day');
disp('current day');
month=input('enter month(1-12) ;');
day=input('enter day (1-31) :');
year=input('enter year(yyyy):');
if mod(year,400)==0
    leap_year=1;
elseif mod(year,100)==0
    leap_year=0;
elseif mod(year,4)==0
    leap_year=1;
else
    leap_year=0;
end
day_of_year=day;
for ii=1:month-1
    switch (ii)
        case {1,3,5,7,8,10,12},
            day_of_year=day_of_year+31;
        case{4,6,9,11},
            day_of_year=day_of_year+30;
        case 2,
            day_of_year=day_of_year+28+leap_year;
    end
end
fprintf('the date %2d/%2d/%4d.is day of year %d\n',...
    month,day,year,day_of_year);
            
            

  case语句后,跟的是逗号。


 

逻辑数组有一个重要的属性,它在算术运算中,能提供一个屏蔽,屏蔽是指一个数组,它从另一个数组选择所需的元素参与运算。


 

自定义函数:

其基本形式如下:

选择性参数:

nargin 返回调用这个函数时,所需要的实际输入参数的个数                              
nargout 返回调用这个函数时,所需要的实际输出参数的个数
nargchk 如果一个函数调用、被调用时,参数过多或者过少,将返回一个标注错误信息
error 显示错误信息
warning 显示警告信息并继续执行函数
inputname 返回对于特定参数个数的实际变量名

 

 

 

 

 

全局变量的声明要用到global语句

函数的函数,比如:fzero(cos,[0,pi]),fzero('exp(x)-2',[0 1])

函数的函数有点类似与反函数。在实际应用中应该作用很大,。。。。学到这里,脑袋有点不清醒了,有点犯困了。时间:2017-3-26 22:20:35

未完待续,回家睡觉。。

--2017-3-27 07:32:14

函数的函数操作关键字有两个专门的matlab函数,eval和feval,函数eval对一个字符串进行求值,就如它在命令窗口中已经键入了一样。函数feval用一个特定的输入值

对命名的函数进行求值。

函数eval的形式如:eval(string)

函数feval的形式如:feval(fun,value)

>> x1=eval('sin(pi/4)')

x1 =

    0.7071

>> x2=feval('sin',pi/4)

x2 =

    0.7071

两者只是函数输入形式的不同,eval,输入值是一个整体的str,而feavl,是函数+值的构造。


 

子函数和私有函数

在一个单个文件中可以创建多个函数,如果超过1个的函数出现在一个文件中,那么最上面的那个函数为普通函数,下面的函数称为子函数或者中间函数。子函数看起来和普通函数一样,但是只能被同一文件中的函数调用

function [avg med]=mystats(u)
n=length(u);
avg=mean(u,n);
med=median(u,n);
%%
function a=mean(v,n)
a=sum(v)/n;
%%
function b=median(v,n)
w=sort(v);
if rem(n,2)==1
b=w((n+1)/2);
else
b=(w(n/2)+w(n/2+1))/2;
end

 


matlab的基础数据类型为double和char

创建matlab复数的最简单方法是用其自带的因有变量i和j。原来matlab中的i和j已经有特殊的函数指定,难怪在很多for循环中看到的是用ii


 

复函数

常见的支持复数运算的matlab函数

复数数据的作图

传统的plot来作图复数的话,只有实数会被显示出来,而虚部将会被忽略

t=0:pi/20:4*pi;
y=exp(-0.2*t).*(cos(t)+i.*sin(t));
plot(t,real(y),'b-');
hold on;
plot(t,imag(y),'r--');
title('\bfPlot of Complex Function vs Time');
xlabel('\bf\itt');
ylabel('\bf\ity(t)');
legend('real','imaginary');
hold off;

 

分别对实部,虚部在一张图上,用同一坐标轴作图。

如果一个复参数提供给plot函数,它会自动产生一个函数的实部和虚部

t=0:pi/20:4*pi;
y=exp(-0.2*t).*(cos(t)+i.*sin(t));
plot(y,'b-');
title('bfPlot of Complex Function');
xlabel('\bfReal Part');
ylabel('\bfImaginary Part');

  

直接画出y没有x的参与,横坐标就是实部,纵坐标为虚部

画出极坐标图:

t=0:pi/20:4*pi;
y=exp(-0.2*t).*(cos(t)+i.*sin(t));
polar(angle(y),abs(y));
title('bfPlot of Complex Function');

  

极坐标图画出的图形比较酷炫,但是未来工作中不知道是否会用到,极坐标图的特点就是幅角与模


 

字符串函数

一个matlab字符串是一个char型数组。每一个字型占两个字节。当字符串被赋值于一个变量时,这个变量将会被自动创建为字符变量

name=char('Stephen J.Chapman','Senior Engineer');
line2=name(2,:);
line2_trim=deblank(name(2,:));
t1=size(line2);
t2=size(line2_trim);

deblank去除掉多余的空格


 

字符串的连接

strcat 水平连接两字符串;

strvcat 竖直连接两字符串

strcmp 判断两字符串是否相等

strcmpi 忽略大小写判断两字符串是否等价

strncmp 判断两字符串前n个字符是否等价

strncmpi 忽略大小写判断两字符串前n个字符是否等价

 

isletter 用来判断一个字符是否为字母

isspace 判断一个字符是否为空白字符

函数findstr 返回段字符串在长字符串中所有的开始位置 

函数strmatch是另外一种匹配函数,它用来查看二维数组行开头俄字符,并返回那些以指定的字符序列为开头行号

函数strrep 用于进行标准的查找和替换操作,它能找到一个字符串中的所有另一个字符串,并被第三个字符串替换,其函数形式为result=strrep(str,srch,repl)

函数strtok返回输入字符串中第一次出现在分隔符前面的所有字符。默认的分隔符为一系列的空白符。strtok的形式如下:

[token,remainder]=strtok(string,delim)

可以利用函数strtok把一个句子转换为单词

function all_words=word(input_string)
remainder=input_string;
all_words='';
while (any(remainder))
    [chopped,remainder]=strtok(remainder);
    all_words=strvcat(all_words,chopped);
end

这样做的函数,可以把一行字符串,转换成独立的以单词结束的多列字符串


 

字符串转化为数字要用到函数eval,也可以用sscanf函数转化为相应的数字:value=sscanf(string,format)

而%d,%g分别代表输出的为整数或者浮点数

数字转化为字符串

num2str,int2str

matlab函数mat2str可以把一个数组转化为响应的matlab能运算字符串

matlab中有一个专门的函数sprintf等价于函数fprintf,唯一不同的是它的输出是一个字符串。

例子:str=sprintf('The value of pi =%8.6f',pi)


 

附加的二维作图类型

matlab提供了两个函数可以直接作出图像,而不需要创建中间数据组

它们是ezplot和fplot

可以用plot3函数画出时间物体位置的三维图像

t=0:0.1:10;
x=exp(-0.2*t).*cos(2*t);
y=exp(-0.2*t).*sin(2*t);
plot3(x,y,t);
title('\bfThree-Dimensional Line Plot');
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfTime');
axis square;
grid on;


表面,网格,等高线图像

[x,y]=meshgrid(-4:0.2:4,-4:0.2:4);
z=exp(-0.5*(x.^2+y.^2));
mesh(x,y,z);
xlabel('\bfx');
ylabel('\bfy');
zlabel('\bfz');

  


 

稀疏矩阵

单元阵列

可以用赋值语句把值赋于单元阵列的一个单元,一次赋一个单元。有两种赋值的方法,即内容索引和单元索引

内容索引要用{},还有它们的下标,以及单元的内容。a{1,1}='i love' 

单元索引的形式为:a(1,1)={'i love' }

struct 函数

 


匆忙的将基础看完了,其中的gui一带而过

接下来就进入实际锻炼了

 

 

posted on 2017-03-26 22:22  zhangbaoc  阅读(408)  评论(0编辑  收藏  举报

导航