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一带而过
接下来就进入实际锻炼了