第二周周末学习下matlab
Matlab学习之周末
🔎目前学习资源:R2020a
请先自行从各大免费资源网址下载安装好
🔑建议学习时间:
学习解析几何或者学习线性代数时同步学习
目录
第一天学习
数组:
行向量&列向量&转置&矩阵&特殊数组
x1=[a b c d e f]
x2=[a,b,c,d,e,f] % x2=x1
x3=[a;b;c;d;e;f] % x3=x2' 转置
x4=[a,b,c;d,e,f]
% define another array
x=m:n % (m,m+1,m+2,...,n)
x=m:k:n % (m,m+k,m+2k,...,n)
x=linspace(m,n,k) % (m,m+(n-m)/(k-1),m+2(n-m)/(k-1),...,n)即在[m,n]上k-1等分,一共有k个元素
数组与标量运算
x=[a,b,c,d,e]
% 加减乘除
% x+q=[a+q,b+q,c+q,...]
% x*q=[a*q,b*q,c*q,...]
% x/q=[a/q,b/q,c/q,...]
% x.\q=[q/a,q/b,q/c,...]
% 幂运算
% x.^q=[a^q,b^q,c^q,...]
% q.^x=[q^a,q^b,q^c,...]
数组与数组运算
x=[a,b,c,d];
y=[e,f,g,h];
% x+y=[a+e,b+f,...]
% x.*y=[a*e,b*f,...]
% x./y=[a/e,b/f,...]这才是除号
% x.\y=[e/a,f/b,...]
% x.^y=[a^e,b^f,...]
注释:
crtl+R注释,crtl+L取消
[x,y]=meshgrid(-20:1:20);
z=2*x-3*y;
mesh(x,y,z);
% hold on;
xlabel('x');
ylabel('y');
zlabel('z');
产生特殊矩阵
a=eye(m,n)
% m*n 单位矩阵 a=eye(2,4)->a=[1 0 0 0;0 1 0 0]
b=zeros(m,n) % m*n 零矩阵
矩阵元素操作
(提取,删除,合并)
>> a=[1 2 3 4;
5 6 7 8;
9 10 11 12]
a =
1 2 3 4
5 6 7 8
9 10 11 12
>> a(1:2 3:4)
a(1:2 3:4)
↑
错误: 表达式无效。请检查缺失的乘法运算符、缺失或不对称的分隔符或者其他语法错误。要构造矩阵,请使用方括号而不是圆括号。% 想表达的是没有逗号
>> a(1:2,3:4) % 提取部分矩阵
ans =
3 4
7 8
>> a(1:2,:) % 提取部分行
ans =
1 2 3 4
5 6 7 8
>> a(:,3:4) % 提取部分列
ans =
3 4
7 8
11 12
>> c=[1;3;5]
c =
1
3
5
>> [a,c] %列合并
ans =
1 2 3 4 1
5 6 7 8 3
9 10 11 12 5
% 注如果纬度不一致会这样提示:错误使用 horzcat要串联的数组的维度不一致。
>> d=[1,2,3,4]
d =
1 2 3 4
>> [a;d] %行合并
ans =
1 2 3 4
5 6 7 8
9 10 11 12
1 2 3 4
矩阵运算
>> A=[1,2;3,4]
A =
1 2
3 4
>> B=[4,5;6,7]
B =
4 5
6 7
>> A+B
ans =
5 7
9 11
>> A*B
ans =
16 19
36 43
>> det(A) % 行列式
ans =
-2
>> inv(A) % 逆矩阵
ans =
-2.0000 1.0000
1.5000 -0.5000
>> A/B % 矩阵右除 X*B=A的解
ans =
2.5000 -1.5000
1.5000 -0.5000
>> A\B % 矩阵左除 A*X=B的解
ans =
-2.0000 -3.0000
3.0000 4.0000
循环
for循环
>> clear %清空此前的变量赋值
>> s=0;
>> for i=1:50; %执行50次
s=s+i;
end %循环休止
>> s
s =
1275
>> for n=1:6;
x(n)=sin(pi/n);
end
>> x(1) %输出结果说明了精确度有多小,而我们还是期待为零
ans =
1.2246e-16
>> x
x =
0.0000 1.0000 0.8660 0.7071 0.5878 0.5000
>> x(2)
ans =
1
while循环
>> clear
>> m=4.5;
>> cnt=0;
>> while m<5
cnt=cnt+1
m=m*1.03
end
cnt =
1
m =
4.6350
cnt =
2
m =
4.7740
cnt =
3
m =
4.9173
cnt =
4
m =
5.0648
if-else-end
function f=fdhs(x) %分段函数简写
if x<0
f=2*x+sin(x)
end
if x>=0
f=exp(x)-1
end
>> fdhs(3)
f =
19.0855
ans =
19.0855
function f=fdhs(x)
if x<0
f=2*x+sin(x)
elseif x>=0&x<=1
f=exp(x)-1
elseif x>1
f=2
end %这个函数其实也可以写成几个if-end
第二天学习
绘图
plot:输出单条线
plot(x,y,'S') % S为线的形状
>> x=[0:0.01:2*pi];
>> y=sin(x);
>> plot(x,y) %在这之后会输出实线
>> plot(x,y,'--')
plot:输出多条线
>> x=[0:0.01:2*pi];
>> y1=sin(x+pi/6);
>> y2=sin(x+pi/3);
>> y3=sin(x+pi/2);
>> plot(x,y1,'^',x,y2,'*',x,y3)
ezplot
>> ezplot('sin(t)',[0,2*pi])
%ezplot('f(x)',[a,b])
%y=f(x)在[a,b]上的图像
>> ezplot('sin(x)-cos(y)-1',[-2*pi,2*pi,-2*pi,2*pi])
%ezplot('f(x,y)',[a,b,c,d])
%f(x,y)=0在x属于[a,b]上,y属于[c,d]上的图像
ezplot('x(t)','y(t)',[a,b])
上面这些都是定义二维的
>> ezplot3('sin(t)','cos(t)','t',[0,6*pi])
%三维参数方程,最后一个参数是范围
>> ezplot('x.^2+y.^3-1',[-10,10,-10,10])
%这里之所以用.^是因为x、y是个数组array
fplot
function f=fdhs(x)
f=cos(x.^5)
上面这段保存在fdhs.m文件里
命令行运行
fplot('fdhs',[-3,3])
添加标注
>> x=[0:pi/100:2*pi];
>> y=sin(x.^3);
>> plot(x,y)
>> xlabel('自变量x')
>> ylabel('因变量y')
>> title('y=sin(x.^3)的图像')
>> gtext('ohhhhhhhhhhh') %这个输入之后会等待你在图上放置标注内容
添加网格、调整图像坐标系、分割图像窗口
命令行输入(注:下面的输入都是接着添加标注的代码一起的)
>> grid on %开启
>> grid off %关闭
>> axis([1,2,-1,0]) %只显示该区域
>> axis auto %恢复缺省设置
>> subplot(2,2,1);
>> plot(x,y)
>> subplot(2,2,2);
>> plot(x,y)
>> axis(4,6,-1,0) %这里报错是因为没有定义成数组的形式(也叫向量)
错误使用 axis>LocSetLimits (line 319)
向量必须包含 4、6 或 8 个元素。
出错 axis (line 114)
LocSetLimits(ax(j),cur_arg,names);
>> axis([4,6,-1,0])
>> subplot(2,2,3);
>> plot(x,y)
>> axis([4,6,0,1])
>> subplot(2,2,4)
>> plot(x,y)
>> axis([0,6,0,1])
>> title('图像4')
>> subplot(2,2,1) %这里纯粹是由于忘记加图题了,发现重新调用就还可以对图像进行操作
>> title('图像1')
>> subplot(2,2,2);
>> title('图像2')
>> subplot(2,2,3);
>> title('图像3')
绘图2
极坐标
>> theta=0:0.1:2*pi;
>> r=3*(1+cos(theta));
>> polar(theta,r)
theta = 0:0.01:2*pi;
rho = sin(2*theta).*cos(2*theta);
figure
polar(theta,rho,'--b')
plot3:一条三维曲线(以老师说的螺旋线为例)
>> polar(theta,rho,'--b')
>> clear
>> t=0:0.1:6*pi;
>> x=cos(t);
>> y=sin(t);
>> z=t;
>> plot3(x,y,z)
plot3:多条三维曲线
>> x=-3:0.1:3;
>> y=0:0.1:2*pi;
>> [x,y]=meshgrid(x,y);
>> z=x.*sin(y)+4*x.*cos(y); %由下面坐标可知x方向上是离散的,也正好说明了此式的意义,也不难发现yoz平面上的投影是连续不平行的,而其它两个平面上的投影是离散的,且线与线之间是平行的。
>> plot3(x,y,z)
>> ylabel('y')
>> xlabel('x')
>> zlabel('z')
🏄surf:三维曲面
>> surf(x,y,z) %接着plot3那段一起来的
>> shading flat %图像平滑
🍖mesh
>> mesh(x,y,z) %网格图
>> meshz(x,y,z) %带参考平面
💢其它
>> meshc(x,y,z) %带等高线
>> surfc(x,y,z) %带等高线
>> surface(x,y,z) %xoy面上投影,带颜色
绘制散点图
>> plot(x,y,'k') %绘制散点并连线
>> scatter(x,y,'k') %绘制散点
周末学习总结
matlab这东西只能说应该是每个学生都应该掌握的本领,它在很多领域都有非常大的作用,这篇学习笔记介绍的只是很小的一部分内容且没有广度也没有深度,但这也是目前作者所能初步学习到的知识了,放在这里与大家一起学习,另外有关于基本绘图函数的更多信息。
🥀