MATLAB绘制二元函数图形
- 格式:pdf
- 大小:784.60 KB
- 文档页数:21
实验五 用matlab 求二元函数的极值1.计算二元函数的极值对于二元函数的极值问题,根据二元函数极值的必要和充分条件,可分为以下几个步骤: 步骤1.定义二元函数),(y x f z =.步骤2.求解方程组0),(,0),(==y x f y x f y x ,得到驻点.步骤3.对于每一个驻点),(00y x ,求出二阶偏导数22222,,.z z z A B C x x y y ∂∂∂===∂∂∂∂ 步骤4. 对于每一个驻点),(00y x ,计算判别式2B AC -,如果02>-B AC ,则该驻点是极值点,当0>A 为极小值, 0<A 为极大值;如果02=-B AC ,需进一步判断此驻点是否为极值点; 如果02<-B AC 则该驻点不是极值点.2.计算二元函数在区域D 内的最大值和最小值设函数),(y x f z =在有界区域D 上连续,则),(y x f 在D 上必定有最大值和最小值。
求),(y x f 在D 上的最大值和最小值的一般步骤为:步骤1. 计算),(y x f 在D 内所有驻点处的函数值;步骤2. 计算),(y x f 在D 的各个边界线上的最大值和最小值;步骤3. 将上述各函数值进行比较,最终确定出在D 内的最大值和最小值。
3.函数求偏导数的MATLAB 命令MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
可以用help diff, help jacobian 查阅有关这些命令的详细信息例1 求函数32824-+-=y xy x z 的极值点和极值. 首先用diff 命令求z 关于x,y 的偏导数>>clear; syms x y;>>z=x^4-8*x*y+2*y^2-3;>>diff(z,x)>>diff(z,y)结果为ans =4*x^3-8*yans =-8*x+4*y即.48,843yxyzyxxz+-=∂∂-=∂∂再求解方程,求得各驻点的坐标。
⼀元、⼆元函数图像绘制⽬录概述本篇博客主要是在上⼀篇的基础上,进⼀步说明“函数”在函数式编程中的重要作⽤。
强调了函数和普通类型⼀样,可以赋值、存储、传参以及作为另外函数的返回值。
本⽂附带了⼀个Demo,该Demo可以将任意字符串函数表达式解析之后⽣成对应的函数(⼀元、⼆元以及三元),如果你输⼊的是⼀元或者⼆元函数表达式,则可以绘制出相应的函数图像。
⼀元函数图像为平⾯曲线,⼆元函数图像为⽴体曲⾯。
看下图:函数表达式中只识别X、Y、Z三个⾃变量。
字符串表达式解析字符串解析是重点。
怎样去识别⼀串字符串函数表达式呢?如x^2+sin(x)*cos(y)。
之后怎样去计算函数值呢?其实原理很简单,由于每个函数表达式中包含的有效符号是有限的,如X、Y、Z、+、-、*、/以及⼀些函数诸如log、sin、cos等等,只要我们将这些有效符号均识别筛选出来之后,再根据这些符号的优先级别⽣成⼀个函数语法树即可。
如上图所⽰,使⽤⼀个“树结构”去存储最终的语法树。
最后带⼊X、Y(⼆元)求得函数值。
表达式解析这块难点是语法树的构建和最终求值。
语法树的构建有点复杂,⼤家可以参见源码;最终求值的原理是,判断当前符号(节点)是单⽬运算符号(如cos、sin、负号等)还是双⽬运算符号(如+ - * /等),如果是单⽬运算⽐如cos函数,则先计算⼦节点(只有⼀个⼦节点)的值,然后将得到的值进⾏cos运算(Math.Cos(⼦节点的值));相反,如果是双⽬运算符⽐如+符号,那么先计算左⼦节点和右⼦节点的值,最后将两个值进⾏+操作(左⼦节点的值+右⼦节点的值),依次递归计算得到最终的函数值。
图像绘制图像绘制这块就⽐较简单了。
根据前⼀步得到的语法树,我们可以创建出对应的⼀元函数、⼆元函数以及三元函数(委托的形式)。
事先定义的委托结构如下:/// <summary>/// ⼀元函数/// </summary>/// <param name="x"></param>/// <returns></returns>public delegate double UnaryFunction(double x);/// <summary>/// ⼆元函数/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <returns></returns>public delegate double BinaryFunction(double x,double y);/// <summary>/// 三元函数/// </summary>/// <param name="x"></param>/// <param name="y"></param>/// <param name="z"></param>/// <returns></returns>public delegate double MultiFunction(double x,double y,double z);很简单就可以看出,⼀元函数接收⼀个参数,返回⼀个值;⼆元函数接收两个参数,返回⼀个值;三元函数接收三个参数,返回⼀个值。
Matlab 建模训练3 图形绘制一、学习二维平面图形的描绘方法1、 在同一窗口绘制正、余弦函数的图形。
2、绘制三叶玫瑰线r=sin(3θ)3、绘制分段函数311012≤≤≤≤⎩⎨⎧+=x x xx y 的图形。
二、学习空间曲线的绘制1、sin cos cos ,06sin ,06.x t t x t ty t t t y t t t z t z tππ==⎧⎧⎪⎪=≤≤=≤≤⎨⎨==⎪⎪⎩⎩及2、 绘制空间曲线sin ,cos ,x t t y t z ===三、学习空间曲面的绘制例 绘制函数sin z x =4个子图的不同特征。
[X,Y]=meshgrid(-4:0.2:4); Z=X.*sin(sqrt(X.^2+Y .^2)); subplot(2,2,1) mesh(Z)subplot(2,2,2) mesh(X,Y ,Z) subplot(2,2,3)surf(X,Y,Z)subplot(2,2,4)surfc(X,Y,Z)ezsurf命令彩色表面图,调用格式与ezmesh相同。
二维图形的视例 分别用命令ezmesh(22,22x y -≤≤-≤≤)和ezsurf(04,14x y ≤≤-≤≤)作函数例 绘制函数22xy z xe --=的图形,并在各坐标设置点观察图形。
功能在默认区域0,2x y π≤≤上画z=f(x,y)高线图,a x y b ≤≤上画z=f(x,y)的等高线图,a x b c y d ≤≤≤≤上画z=f(x,y)例 绘制函数sin cos(),,,,2222z x x y x y ππππ⎡⎤⎡⎤=++∈-∈-⎢⎥⎢⎥⎣⎦⎣⎦的二维等高线和填充等高线。
例 绘制多峰函数()()()222222211351311053x y x y x y x z x ex y e e--+-+---⎛⎫=----- ⎪⎝⎭,在[][],,,x y ππππ∈-∈-上的图形以及二维等高线、二维填充等高线和三维等高线的图形。
第二章绘图要画一个函数的图像,先是选取一堆x,求出相对应的y值,然后按照数值描点,接着用光滑的曲线把点连接起来。
和数学课讲的一样,在matlab中,我们画图也分为三步1. 建立一个x的点集;2. 根据函数关系式算出每个x对应y的点集;3. 将这些点用平滑的曲线连接起来。
例如要画y=sinx在[0,10]区间内的图像,首先我们要确定出x的区间>>x = [0:0.1:10];命令的意思是,产生一个数集,它从0开始,每次加0.1,一直加到10为止注意,命令后面的分号记得加上,否则matlab会把x的元素都打印出来,下面就是不加分号的后果:有了x的数集后,我们再根据函数关系式y=sinx得出y的点集>>y = sin(x);同样的,别忘了把分号加上抑制程序输出y的具体值,以及sin(x)的括号别忘了加到这里,我们已经把x和y确定下来,接下来只需用plot(x,y)命令即可绘制出图像>>plot(x,y)当然,如果你不定义y,而直接用一下嵌套命令也是可以的>>plot(x,sin(x))我们将x的增量变大一点,改为0到10,每次增幅为1,即>>x = [0:1:10];然后我们输入>>plot(x,y)我们会得到错误信息:原因是之前我们定义的y是由之前的x决定的,当x改变后,y依然没有改变,为了解决这个问题,我们要把y重新定义一遍,即命令要完整再输入一遍>>x = [0:1:10];>>y = sin(x);>>plot(x,y)然后程序会绘制出和我们预期相同的图像没错,我们将看到不光滑的曲线,这告诉我们,当使用plot(x,y)画图的时候x的增加幅度尽可能小一些,画出的图像才精确(跟数学里点越多图像越精确原理一样的)为了美化图像(有时是为了更清楚的辨析图像),我们经常要为图像加上网格,为坐标轴命名,改变曲线的颜色、形状这些命令2.1 加上网格我们使用grid on 命令我们这样书写:>>x=[0:0.1:10];y=sin(x);>>plot(x,y),grid on这样就画出了带网格的图像当然,也可以先画出没有网格的图像,再把窗口切回matlab命令输入窗口,输入grid on,这样图像就会加上网格,即>>x=[0:0.1:10];y=sin(x);>>plot(x,y)>>grid on2.2 为坐标轴命名为x坐标轴命名的命令是xlabel(),显然,y的就应该是ylabel()比如这里,我想让x命名为x,y命名为sinx,则如下输入:>>x=[0:0.1:10];y=sin(x);>>plot(x,y),xlabel(‘x’),ylabel(‘sinx’)注意,坐标轴的名字要用引号括起来,表示字符串当然也可以画图后再标坐标轴,即:>>x=[0:0.1:10];y=sin(x);>>plot(x,y)>>xlabel(‘x’)>>ylabel(‘sinx’)然后我们就可以看到坐标轴带命名的图像:2.3 绘制多条曲线绘制多条曲线有两种情况,一种是在同一个坐标面内画多条曲线,另一种是在一个面内画多个独立的曲线我们先讲第一种,假设我们要在一个坐标面内画sinx,cosx,tanx的图像先定义x,y>>x=[0:0.1:10]>>y1=sin(x);>>y2=cos(x);>>y3=tan(x);接着画图>>plot(x,y1)这时候函数绘制出了sinx的图像接着我们继续画>>plot(x,y2)我们会发现程序会把之前的sinx图像抹掉,然后绘制cosx的图像为了让他们同时存在,我们使用hold on命令,即画完一个图后,hold on,继续画当我们再加上tanx后会得到这个图像这是因为函数显示区间设置的原因,后面讲2.4 更改图像显示区间从楼上我们已经在一个图中画出了sinx、cosx、tanx的图像,但是我们知道tanx的值域是负无穷到正无穷,而sin,cos的值域是-1到1,这导致了我们基本上看不到sin,cos的图像,为了解决这个问题,我们只需用axis命令即可,命令格式为axis([xmin xmax ymin ymax])即括号内跟一个区间,四个数字分别是x的起点,x的终点,y的起点,y的终点。
MATL AB绘制二元函数的图形【实验目的】1.了解二元函数图形的绘制。
2.了解空间曲面等高线的绘制。
3.了解多元函数插值的方法。
4.学习、掌握MATLAB软件有关的命令。
【实验内容】画出函数22yz+=的图形,并画出其等高线。
x【实验准备】1.曲线绘图的MATLAB命令MATLAB中主要用mesh,surf命令绘制二元函数图形。
主要命令mesh(x,y,z)画网格曲面,这里x,y,z是数据矩阵,分别表示数据点的横坐标,纵坐标和函数值,该命令将数据点在空间中描出,并连成网格。
surf(x,y,z)画完整曲面,这里x,y,z是数据矩阵,分别表示数据点的横坐标,纵坐标和函数值,该命令将数据点所表示曲面画出。
【实验重点】1. 二元函数图形的描点法2. 曲面交线的计算3. 地形图的生成【实验难点】1. 二元函数图形的描点法2. 曲面交线的计算【实验方法与步骤】练习1画出函数22y=的图形,其中]3,3xz+⨯-yx。
∈,[]3,3[(-)用MATLAB作图的程序代码为>>clear;>>x=-3:0.1:3; %x的范围为[-3,3]>>y=-3:0.1:3; %y的范围为[-3,3]>>[X,Y]=meshgrid(x,y); %将向量x,y指定的区域转化为矩阵X,Y >>Z=sqrt(X.^2+Y.^2); %产生函数值Z>>mesh(X,Y,Z)运行结果为图5.3如果画等高线,用contour,contour3命令。
contour画二维等高线。
contour3画三维等高线。
画图5.3所示的三维等高线的MA TLAB 代码为>>clear;>>x=-3:0.1:3;>>y=-3:0.1:3;>>[X,Y]=meshgrid(x,y);>>Z=sqrt(X.^2+Y.^2);>>contour3(X,Y,Z,10); %画10条等高线>>xlabel('X-axis'),ylabel('Y-axis'),zlabel('Z-axis'); %三个坐标轴的标记>>title('Contour3 of Surface') %标题>>grid on %画网格线运行结果为图5.4如果画图5.4所示的二维等高线,相应的MATLAB代码为>>clear;x=-3:0.1:3;y=-3:0.1:3;>>[X,Y]=meshgrid(x,y);Z=sqrt(X.^2+Y.^2);>>contour (X,Y,Z,10);>>xlabel('X-axis'),ylabel('Y-axis');>>title('Contour3 of Surface')>>grid on运行结果为如果要画z=1的等高线,相应的MATLAB代码为>>clear;x=-3:0.1:3;y=-3:0.1:3;>>[X,Y]=meshgrid(x,y);Z=sqrt(X.^2+Y.^2);>>contour(X,Y,Z,[1 1])运行结果为练习2 二次曲面的方程如下222222x y z d a b c++= 讨论参数a ,b ,c 对其形状的影响。
surfl函数surfl函数是Matlab图形用户界面(GUI)中一个常用的三维绘图函数。
该函数用于生成二元函数在三维空间中的表面图形。
在Matlab中,三维表面绘图是一种流行的数据可视化方式,它使我们可以通过图形直观地理解数据的特征和关系。
surfl函数主要用于绘制函数的函数值在三维坐标系中对应的等值面或网格图,以便于我们更好地理解数据。
surfl(Z)surfl(X,Y,Z)surfl(Z,C)surfl(X,Y,Z,C)surfl(...,'LineSpec')surfl(axes_handle,...)其中,X,Y和Z参数分别为定义函数在三维坐标系中的域值,C参数是一个可选的颜色参数。
在这些参数中,Z是必需的。
当Z参数不是矩阵时,Matlab会将其转换为矩阵。
如果X,Y和Z是矩阵,则它们的尺寸必须是相同的。
当C参数不是矩阵时,Matlab会将其视为标量,所有网格的颜色都相同,否则,每个网格将被赋予一个与之相对应的颜色值。
在对surfl函数进行调用时,还可以添加额外的参数以定制绘制出的表面细节。
其中,'LineSpec'参数用于指定线条的颜色、线型和宽度等信息。
axes_handle参数用于指定一个目标绘图区域的句柄,以便于将surfl函数的输出嵌入到其他绘图中。
在Matlab中,surfl函数通常与其他三维绘图函数(如plot3、mesh、meshc和surf 等)一起使用,以便进行更细致的三维数据可视化。
例如,我们可以使用plot3函数来添加数据点到surfl函数生成的表面图中,以便于更好地理解数据分布情况。
此外,我们还可以使用Colormap函数来为绘图添加更丰富的颜色映射,以便高效地显示数据区域和变化趋势。
总之,surfl函数是Matlab图形界面中一种非常强大的三维绘图函数,可用于生成图形、等值线和网格图等不同类型的三维表面。
其灵活的参数结构和强大的功能使其成为了Matlab数据可视化的重要工具。