实验3 Matlab 符号运算及求函数极值
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验3 Matlab 符号运算及求函数极值一、实验目的和要求
掌握用Matlab软件进行符号运算以及求函数的极值。
二、实验环境
Windows系列操作系统,Matlab软件。
三、实验内容
1.用MATLAB进行符号运算;
2.编程求函数的极值。
四、实验步骤
3.开启软件平台——Matlab,开启Matlab编辑窗口;
4.根据求解步骤编写M文件;
5.保存文件并运行;
6.观察运行结果(数值或图形);
7.根据观察到的结果和体会写出实验报告。
五、示例
1.计算一元函数的极值
例1求
2
2
344
1
x x
y
x x
++
=
++
的极值
解首先建立函数关系:
s yms x
y=(3*x^2+4*x+4)/( x^2+x+1); 然后求函数的驻点:
dy=diff(y);
xz=solve(dy)
xz=
[0] [-2]
知道函数有两个驻点x
1=0和x
2
=-2,
接下来我们通过考察函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MATLAB的作图功能,我们很容易做到这一点。
例2 画出上例中函数的图形
解 syms x
y=(3*x^2+4*x+4)/( x^2+x+1); 得到如下图形
ezplot(y)
2.计算二元函数的极值
MATLAB 中主要用diff 求函数的偏导数,用jacobian 求Jacobian 矩阵。
例1 求函数42823z x xy y =-+-的极值点和极值.
首先用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*y
ans =-8*x+4*y
即348,84z z x y x y x y
∂∂=-=-+∂∂再求解方程,求得各驻点的坐标。一般方程组的符号解用solve 命令,当方程组不存在符号解时,solve 将给出数值解。求解方程的MA TLAB 代码为:
>>clear;
>>[x,y]=solve('4*x^3-8*y=0','-8*x+4*y=0','x','y')
结果有三个驻点,分别是P(-2,-4),Q(0,0),R(2,4).
我们仍然通过画函数图形来观测极值点与鞍点。
>>clear;
>>x=-5:0.2:5; y=-5:0.2:5;
>>[X,Y]=meshgrid(x,y);
>>Z=X.^4-8*X.*Y+2*Y.^2-3;
>>mesh(X,Y,Z)
>>xlabel('x'),ylabel('y'),zlabel('z')
结果如图1
图1 函数曲面图
可见在图1中不容易观测极值点,这是因为z的取值范围为[-500,100],是一幅远景图,局部信息丢失较多,观测不到图像细节.可以通过画等值线来观测极值.
>>contour(X,Y,Z, 600)
>>xlabel('x'),ylabel('y')
结果如图2
图2 等值线图
由图2可见,随着图形灰度的逐渐变浅,函数值逐渐减小,图形中有两个明显的极小值点(2,4)P --和(2,4)Q .根据提梯度与等高线之间的关系,梯度的方向是等高线的法方向,且指向函数增加的方向.由此可知,极值点应该有等高线环绕,而点(0,0)Q 周围没有等高线环绕,不是极值点,是鞍点.
六、实验任务:
1.求1
2sin sin 33
y x x =+的极值,并画出函数图形。
2.求4441z x y xy =+-+的极值,并对图形进行观测。 七、 程序代码及运行结果(经调试后正确的源程序)
1.
2.
八、实验总结
通过本节课让我学会了怎样计算一元函数的极值和二元函数的极值。并知道了diff(f,x,n) 是求函数f关于自变量x的n阶导数。jacobian(f,x) 是求向量函数f关于自变量x(x也为向
量)的jacobian矩阵。