c++矩阵作为函数输入变量_详解Matlab基本函数与绘图命令 文末附福利

891f001f5023eb33b97c10512fd53f11.gif 663f6e2ed4c26f34ce3e3011ccf32175.gif

宠宠宠宠宠宠粉时刻 文末领取福利!

数学运算与函数

① 基本代数运算操作

 +,-,*,\,/,^,

② 矩阵运算函数:

求行列式(det),矩阵求逆(inv),求秩(rank),求迹(trace), 求模(norm),d=eig(A)求矩阵A 的特征值,[v,d]=eig(A)求矩阵A 的特征向量和特征值,这里 v 的列向量是对应的特征向量。

矩阵基本运算:

A\B, B/A, A.*B, A./B, A.\B, A.^B。

③ 基本数学函数

常用的数学函数有sin,cos,tan,abs,min,sqrt,log,log10,sign,asin,acos,atan,max,sum,exp,fix 等。具体使用方法可参看帮助 help。

常用的矩阵函数有 expm,logm,sqrtm 和 funm,funm 函数可计算任何一个基本数

学函数的矩阵函数。它可以表示为

 fa=funm(a,'fun')

式中,fun 可以是任意一个基本函数,如 sin,cos,log10 等。 

④ 多项式

任意多项式都可以用一个行向量来表示,即 n 维的向量 a 表示多项式

30353ba53e9d0a390fbb7ecdd1b5bb79.png

反过来,任意一个向量就可以作为多项式。

例如:

p=[1 –6 11 -6]; poly2sym(p,’x’)

ans =

x^3-6*x^2+11*x-6

求s3 + 2s2 + 3s + 4 的根可用如下命令。

A=[1 2 3 4]; roots(A)

i) poly 函数

p=poly(A),A 是一个n× n 的矩阵时,此函数返回矩阵 A 的特征多项式 p,p 是n +1 维向量;A是向量时,此函数返回以向量中的元素为根的多项式。

ii) 多项式的数组运算

y=polyval(p,x) 计算多项式在 x 处的值,x 可以是矩阵或向量,此时函数计算多项式在 x 的每个元素处的值。

iii) 多项式的矩阵运算

y=polyvalm(p,x) 相当于用矩阵 x 代替多项式的变量来对矩阵而不是对数组进行运算,x 必须是方阵。例如:

786a114b5f6ddc969f5875a81f890183.png

可采用如下的命令进行计算

p=[1 3 2];

a=[1 2; 3 4];

polyvalm(p,a)

iv) 多项式的乘法和除法运算

w=conv(u,v) 此函数求多项式 u 和 v 的乘积,即求向量 u 和 v 的卷积。如果m=length(u),n=length(v),则 w 的长度为 m+n-1。

[q,r]=deconv(u,v) 此函数表示多项式 u 除以多项式 v 得到商多项式 q 和余数多项式 r,如果 r 的元素全部为零,则表示多项式 v 可以整除多项式 u。

绘图命令

① 二维图形

二维绘图的基本命令有 plot,loglog,semilogx,semilogy 和 polar。它们的使用方法基本相同,其不同特点是在不同的坐标中绘制图形。plot 命令使用线性坐标空间绘制图形;loglog 命令在两个对数坐标空间中绘制图形;而 semilogx(或 semilogy) 命令使用x 轴(或y 轴)为对数刻度,另外一个轴为线性刻度的坐标空间绘制图形;polar使用极坐标空间绘制图形。

二维绘图命令 plot 为了适应各种绘图需要,提供了用于控制线色、数据点和线型的 3 组基本参数。它的使用格式如下:

plot(x,y,’color_point_linestyle’)

◾该命令是绘制 y 对应 x 的轨迹的命令。

◾y 与 x 均为向量,且具有相同的元素个数。

◾用字符串‘color_point_linestyle’完成对上面 3 个参数的设置。

  ▪ 线色(r-red,g-green, b-blue,w-white,k-black,i-invisible,y-yellow),

  ▪ 数据点(.,o,x,+,*,S, H,D,V,^,>,

  ▪ 线型(-,-.,--,:)都可以根据需要适当选择。

当 plot(x,y)中的 x 和 y 均为m× n 矩阵时,plot 命令将绘得n 条曲线。plot(t,[x1,x2,x3])在同一坐标轴内同时绘制三条曲线。如果多重曲线对应不同的向量绘制,可使用命令 

plot(t1,x1,t2,x2,t3,x3)

式中 x1 对应 t1,x2 对应 t2 等等。在这种情况下,t1,t2 和 t3 可以具有不同的元素个数,但要求 x1,,x2 和 x3 必须分别与 t1,t2 和 t3 具有相同的元素数量。

subplot 命令使得在一个屏幕上可以分开显示 n 个不同坐标系,且可分别在每一个坐标系中绘制曲线。其命令格式如下:

subplot(r,c,p)

该命令将屏幕分成 r*c,而 p 表示在第几个窗口。窗口的排号是从左到右,自上而下。 在图形绘制完毕后,执行如下命令可以再在图中加入题目、标号、说明和分格线等。这些命令有 title,xlabel,ylabel,text,gtext 等。它们的命令格式如下: 

title(‘My Title’),

xlabel(‘My X-axis Label’),

ylabel(‘My Y-axis Label’),

text(x,y,'Text for annotation'),

gtext('Text for annotation'), 

grid

gtext命令是使用鼠标器定位的文字注释命令。当输入命令后,可以在屏幕上得到 一个光标,然后使用鼠标器控制它的位置。按鼠标器的左键,即可确定文字设定的位置。

hold on 是图形保持命令,可以把当前图形保持在屏幕上不变,同时在这个坐标系内绘制另外一个图形。hold 命令是一个交替转换命令,即执行一次,转变一个状态(相当于hold on、hold off)。

Matlab可以自动选择坐标轴的定标尺度,也可以使用axis命令定义坐标轴的特殊 定标尺度。其命令格式如下:

axis([x-min,x-max,y-min,y-max])

axis 命令的另一个作用是控制纵横尺度的比例。例如,输入 axis(‘square’)后,可得到一个显示方框,此时再在该框内绘制一个圆形时(如:plot(sin(x),cos(x)),在屏幕上可以看到一个圆(一般情况下,由于屏幕的不规则原因,只能看到一个椭圆)。再次输入 axis(‘normal’)命令,屏幕返回到一般状态。

x=0:0.25:5;

y1=x.^0.1; 

y2=x.^0.5; 

y3=x.^0.8; 

y4=x.^1.5;

t=0:0.001:2*pi; 

hold on

plot(3*cos(t),3*sin(t))

plot(x,y1,'bo',x,y2,'rH-')

plot(x,y3,'gp--') 

plot(x,y4,'mx-.')

title('My Title'),

xlabel('My X-axis Label'),

ylabel('My Y-axisLabel')

text(2,8,'Text for annotation')

gtext('Text for annotation'),grid

结果如图所示:

fb5a1cf0a583988f8cfd29a35b71ced2.png

例 

用极坐标绘图命令绘制方程r = cos 2θ (四叶玫瑰线)的图形。

x=0:0.1:2*pi;

r=cos(2*x);

polar(x,r)

c239f91dcfc73e845e9088c73b11c360.png

例 

随机地产生 20 个数据,再根据这些数据画统计直方图。

x=rand(1,20); 

y=round(20*x);

subplot(1,2,1)

hist(x) 

subplot(1,2,2)

hist(y)

② 三维图形

在实际工程计算中,最常用的三维绘图是三维曲线图、三维网格图和三维曲面图 3 种基本类型。与此对应,Matlab 也提供了 3 个三维基本绘图命令(三维曲线命令 plot3、三维网格命令 mesh 和三维表面命令 surf)。下面先初步介绍其中的两个。

i)三维曲线

plot3(x,y,z)通过描点连线画出曲线,这里 x,y,z 都是 n 维向量,分别表示该曲线上点集的横坐标、纵坐标、竖坐标。

例 

在区间[0,10*pi]画出参数曲线x = sin(t) ,y = cos(t),z = t ,并分别标注。

t=0:pi/50:10*pi;

plot3(sin(t),cos(t),t)

xlabel('sin(t)'),ylabel('cos(t)'),zlabel('t')

2c1a50b2feb00875faf82afae96de5f0.png

ii)网格命令 mesh(x,y,z)画网格曲面。

这里 x,y,z 是三个同维数的数据矩阵,分别表示数据点的横坐标、纵坐标、竖坐标,命令mesh(x,y,z)将该数据点在空间中描出,并连成网格。

绘制二元函数

77d52e81eb3bf1582de420ef22413a44.png

的三维网格图。

解 x=-3:0.1:3;y=-5:0.1:5;

x1=ones(size(y'))*x;y1=y'*ones(size(x));

[x2,y2]=meshgrid(x,y);

z1=(sin(x1.*y1)+eps)./(x1.*y1+eps); 

z2=(sin(x2.*y2)+eps)./(x2.*y2+eps);

subplot(1,2,1),mesh(x1,y1,z1)

subplot(1,2,2),mesh(x2,y2,z2)

③ 符号函数的简易绘图函数ezplot

ezplot(f)绘制f(x)的函数图,这里f 为代表数学表达式的包含单个符号变量x 的字符串或符号表达式。x 轴的近似范围为[-2*pi,2*pi]。 

ezplot(f,xmin,xmax)或 ezplot(f,[min,max])使用输入参数来代替默认横坐标范围[- 2*pi,2*pi]。

画出函数y = tan x的图形

解:ezplot(‘tan(x)’)

④ 绘制函数图函数fplot

fplot(fun,lims)绘制由字符串fun 指定函数名的函数在x 轴区间为lims=[xmin, xmax] 的函数图。若lims=[xmin,xmax,ymin,ymax],则y 轴也被输入限制。fun 必须为M 文件 的函数名或对变量x 的可执行字符串,此字符串被送入函数eval 后被执行。函数fun(x)必须要返回针对向量x 的每一元素结果的行向量。

37fcbbe70fd7f4dfb8e7b49225a0410b.png

解:

(1)首先用M 文件fun1.m 定义函数 f (x) 如下:

function y=fun1(x);

if x<1

y=x+1; 

else y=1+1./x; 

end

(2)在matlab 命令窗口输入

fplot(‘fun1’,[-3,3]) 

就可画出函数 f (x) 的图形。

⑤ 画等高线的函数contour

在Matlab 中,可以用contour 命令绘制平面等高线,用contour3 命令绘制空间等高线。

绘制平面等高线contour 命令的具体使用格式为:contour(x,y,z,n) 

contour(x,y,z,v) 

contourf(…)

其中x,y 为其横纵坐标值向量,如果x 为s 维,y 为m 维,则z 为m×s 维矩阵,为对应于坐标(x,y)的高度。参数 n 为整数,指定了绘出等高线的条数。参数 v 为向量, 指定了在哪些高度绘出等高线,如只想在一个高度z 绘出等高线,则v=[z,z]。 

contourf(…)命令的参数与contour 命令完全相同,只是其绘出的等高线图将被自动填上颜色。

上面2 个命令用来计算所画等高线的x,y 坐标值。

clabel(c) 

clabel(c,v)

上面2 个命令用来标注计算的c 阵处的高度值。clabel(c)将把所绘等高线全部自动标注,clabel(c,v)将自动标注由向量v 确定的若干条等高线的高度值。

clc;clf;

x=0:400:5600; y=0:400:4800;

z=[370,470,550,600,670,690,670,620,580,450,400,300,100,150,250; 510,620,730,800,850,870,850,780,720,650,500,200,300,350,320; 650,760,880,970,1020,1050,1020,830,800,700,300,500,550,480,350; 740,880,1080,1130,1250,1280,1230,1040,900,500,700,780,750,650,550; 830,980,1180,1320,1450,1420,1400,1300,700,900,850,810,380,780,750; 880,1060,1230,1390,1500,1500,1400,900,1100,1060,950,870,900,930,950; 910,1090,1270,1500,1200,1100,1350,1450,1200,1150,1010,880,1000,1050,1100; 950,1190,1370,1500,1200,1100,1550,1600,1550,1380,1070,900,1050,1150,1200; 1430,1450,1460,1500,1550,1600,1550,1600,1600,1600,1550,1500,1500,1550,1550; 1420,1430,1450,1480,1500,1550,1510,1430,1300,1200,980,850,750,550,500; 1380,1410,1430,1450,1470,1320,1280,1200,1080,940,780,620,460,370,350; 1370,1390,1410,1430,1440,1140,1110,1050,950,820,690,540,380,300,210; 1350,1370,1390,1400,1410,960,940,880,800,690,570,430,290,210,150];

figure,hold on

c=contourf(x,y,z,10);clabel(c)

text(0,800,'▼\leftarrow 起点','fontsize',15,'color','r') text(4000,2000,'▼\leftarrow 居民点','fontsize',15,'color','r')

- End -

文末福利!

7021f4bc92c49ad40dce6a92673b37c7.png

本推文发送24小时后(即截止7月29号17:00点),留言区排名第1、第3、第5、第7、第9的五位同学将免费获取2019年“高教社杯”国赛赛题、2019年“高教社杯”优秀论文以及2020年最新“数维杯”国赛优秀论文全套资料~

e3cda8a259c77ed8fc907d8d08654d6e.png

扫码关注我们

4be25c7ef5a94aefa4241d8f7e23877f.png

2020夏令营QQ交流群

d7812b904b2e165d2b9bca7901e7d112.png 05c933054312286cfcfb141813e761ad.gif
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值