(整理)实验五用matlab求二元函数的极值.

(整理)实验五用matlab求二元函数的极值.
(整理)实验五用matlab求二元函数的极值.

实验五 用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

极值点; 如果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*y

ans =-8*x+4*y

.

4

8

,

8

43y

x

y

z

y

x

x

z

+

-

=

?

?

-

=

?

?

再求解方程,求得各驻点的坐标。一般方程组的符号解

用solve命令,当方程组不存在符号解时,solve将给出数值解。求解方程的MATLAB代码为:

>>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; syms x y;

>>z=x^4-8*x*y+2*y^2-3;

>>A=diff(z,x,2)

>>B=diff(diff(z,x),y)

>>C=diff(z,y,2)

结果为

A=2*x^2

B =-8

C =4

由判别法可知

)2

,4

(-

-

P和)2,4(

Q都是函数的极小值点,而点Q(0,0)不是极值点,实际上,

)2

,4

(-

-

P和)2,4(

Q是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍点。

>>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')

结果如图16.5.1

图16.5.1 函数曲面图

可见在图6.1中不容易观测极值点,这是因为z 的取值范围为[-500,100],是一幅远景图,局部信息丢失较多,观测不到图像细节.可以通过画等值线来观测极值.

>>contour(X,Y,Z, 600)

>>xlabel('x'),ylabel('y')

结果如图16.5.2

图16.5.2 等值线图

由图16.5.2可见,随着图形灰度的逐渐变浅,函数值逐渐减小,图形中有两个明显的极小值点)2,4(--P 和)2,4(Q .根据提梯度与等高线之间的关系,梯度的方向是等高线的法方向,且

指向函数增加的方向.由此可知,极值点应该有等高线环绕,而点

)0,0(

Q周围没有等高线环绕,

不是极值点,是鞍点.

例2求函数

xy

z=在条件1

=

+y

x下的极值..构造Lagrange函数

)1

(

)

,

(-

+

+

=y

x

xy

y

x

求Lagrange函数的自由极值.先求L关于

λ,

,y

x的一阶偏导数

>>clear; syms x y k >>l=x*y+k*(x+y-1); >>diff(l,x)

>>diff(l,y)

>>diff(l,k)

,1

,

,-

+

=

?

?

+

=

?

?

+

=

?

?

y

x

L

x

y

L

y

x

L

λ

λ

λ

再解方程

>>clear; syms x y k

>>[x,y,k]=solve('y+k=0','x+k=0','x+y-1=0','x','y','k')

,

2

1

,

2

1

,

2

1

-

=

=

y

x

进过判断,此点为函数的极大值点,此时函数达到最大值.

例3抛物面

2

2y

x

z+

=被平面1

=

+

+z

y

x截成一个椭圆,求这个椭圆到原点的最长

与最短距离.

这个问题实际上就是求函数

2

2

2

)

,

,

(z

y

x

z

y

x

f+

+

=

在条件

2

2y

x

z+

=及1

=

+

+z

y

x下的最大值和最小值问题.构造Lagrange函数

)1

(

)

(

)

,

,

(2

2

2

2

2-

+

+

+

-

+

+

+

+

=z

y

x

z

y

x

z

y

x

z

y

x

λ

求Lagrange函数的自由极值.先求L关于

μ

λ,

,

,

,z

y

x的一阶偏导数

>>clear; syms x y z u v

>>l=x^2+y^2+z^2+u*(x^2+y^2-z)+v*(x+y+z-1);

>>diff(l,x)

>>diff(l,y)

>>diff(l,z)

>>diff(l,u)

>>diff(l,v)

μλμλμλ+-=??++=??++=??z z L y y y L x x x L 2,22,22

1,22-++=??-+=??z y x L z y x L μλ

再解方程

>>clear;

>>[x,y,z,u,v]=solve('2*x+2*x*u+v=0','2*y+2*y*u+v=0','2*z-u+v=0', 'x^2+y^2-z=0','x+y+z-1=0','x','y','z','u','v')

.32,231,33117,3353 =±-==±-=±-=z y x μλ

上面就是Lagrange 函数的稳定点,求所求的条件极值点必在其中取到。由于所求问题存在

最大值与最小值(因为函数f 在有界闭集

}1,:),,{(22=++=+z y x z y x z y x ,上连续,从而存在最大值与最小值),故由

359.)32,231,231( =±-±-f 求得的两个函数值,可得椭圆到原点的最长距离为359+,最短距离为359-。

习题16-5

1.求

1444+-+=xy y x z 的极值,并对图形进行观测。 2.求函数()222,y x y x f +=在圆周

122=+y x 的最大值和最小值。

3.在球面

1222=++z y x 求出与点(3,1,-1)距离最近和最远点。

实验4函数文件

实验四 函数文件 1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。 函数文件: function [e,ln,s,c]=plural(x) e=exp(x); ln=log(x); s=sin(x); c=cos(x); End 命令文件: x=input('请输入一个复数:'); [e,ln,s,c]=plural(x); e ln s c 运行结果: 请输入一个复数:3+4i e = -13.1288 -15.2008i ln = 1.6094 + 0.9273i s = 3.8537 -27.0168i c = -27.0349 - 3.8512i 2.一物理系统可用下列方程组来表示: ? ?????????????=??????????????????????????----g g m m N N a a m m m m 2121212111001cos 000sin 00cos 0sin 0sin cos θθ θθ θθ 从键盘输入m 1、m 2和θ的值,求N a a 121、、和N 2的值。其中g 取9.8,输入 θ时以角度为单位。 函数文件: function [a1,a2,N1,N2]=physis(m1,m2,t) g=9.8; A=[m1*cos(t*pi/180),-m1,-sin(t*pi/180),0;... m1*sin(t*pi/180),0,cos(t*pi/180),0;... 0,m2,-sin(t*pi/180),0;... 0,0,-cos(t*pi/180),1]; B=[0;m1*g;0;m2*g];

实验五 M文件和MATLAB程序设计

实验五 M文件和MATLAB程序设计 一、实验目的 matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。 1.掌握M文件的使用方法。 2.掌握if语句和switch语句的使用 3. 掌握循环语句的使用 4. 通过练习理解MATLAB编程方法。 二、实验原理 1.m文件 用matlab语言编写的程序,称为m文件。M文件根据调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file)。区别? 2.程序控制结构 1)顺序结构 2)选择结构 (1)if语句a) 单分支if语句b) 双分支if语句c) 多分支if语句 (2)switch 语句 (3)try语句 3)循环结构 (1)for 语句 (2)while语句 (3)break语句、continue语句、return使用,区别? 3.函数文件 function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 三、实验要求 1.首先上机练习PPT中各种流程控制语句的有关实例。 2.然后上机练习下面的实验习题。 四、实验习题 1.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2→1 3→10→5→16→8→4→2→1

6→3→10→5→16→8→4→2→1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)==0 n=n/2; else n=3*n+1; end a=[a,n]; end a end Enter n,negative quits:3 a = 3 10 5 16 8 4 2 1 2. 编程求满足∑=>m i i 1100002的最小m 值。 a=0; i=1; while (a<10000) a=a+pow2(i); i=i+1; end m=i-1; m 13 3. 编写一个函数,计算下面函数的值,给出x 的值,调用该函数后,返回y 的值。 function [y]=myfun1(x) ?? ???>+-≤<≤=3,630, 0,sin )(x x x x x x x y 选择一些数据测试你编写的函数。 function y=myfun1(x) if x<=0 y=sin(x);

实验五 用matlab求二元函数的极值

实验五 用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>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

MATLAB实验五 函数文件

MATLAB实验报告 学院:光电学院 班级:073-1 姓名:刘颖 学号:200713503117

实验五 函数文件 1.定义一个函数文件,求给定复数的指数、对数、正弦和余弦,并在命令文件中调用该函数文件。 程序设计: function [e ln s c]=num(x) e=exp(x) ln=log(x) s=sin(x) c=cos(x) end 运行结果: >> num(5i) e = 0.2837 - 0.9589i ln = 1.6094 + 1.5708i s = 0 +74.2032i c = 74.2099 ans = 0.2837 - 0.9589i 2.一物理系统可用下列方程组来表示: ??? ? ??? ???????= ?????? ??? ??? ???????????? ??----g g m m N N a a m m m m 2121212 111001cos 0 0sin 00cos 0 sin 0sin cos θ θθ θθθ 从键盘输入 m 1 、 m 2 和θ的值,求 N a a 121、、和 N 2 的值。其中g 取9.8,输入θ时以角度为单位。 程序设计: 函数文件in.m: function [a1,a2,N1,N2]=in(m1,m2,t) g=9.8; A=[m1*cos(t) -m1 -sin(t) 0;m1*sin(t) 0 cos(t) 0;0 m2 -sin(t) 0;0 0 -cos(t) 1]; C=[0;m1*g;0;m2*g]; B=inv(A)*C; a1=B(1); a2=B(2); N1=B(3); N2=B(4); end 调用in.m 的命令文件: >> m1=1;m2=2;t=30*pi/180; >> [a1,a2,N1,N2]=in(m1,m2,t) 运行结果: a1 = 6.5333 a2 = 1.8860 N1 = 7.5440 N2 = 26.1333 4.设 f(x)= 01 .01 1 .01 ) 3() 2(4 2 +++--x x , 编写一个MATLAB 函数文件fx.m ,使得调用f(x)时,x 可用矩阵代入,得出的f(x)为同阶矩阵。 程序设计: 函数文件fx.m: function A=fx(x) A=1./((x-2).^2+0.1)+1./(((x-3).^4)+0.01) end 调用fx.m 的命令文件: >> A=fx([1 2;2 3;4 3]) 运行结果: A = 0.9716 10.9901 10.9901 100.9091 1.2340 100.9091 5.已知y= ) 20()30() 40(f f f + (1)当f(n)=n+10ln(n 2+5)时,求y 的值。

用MATLAB求极值

用MATLAB求极值 灵活的运用MATLAB的计算功能,可以很容易地求得函数的极值。 例3.6.1 求 2 2 344 1 x x y x x ++ = ++ 的极值 解首先建立函数关系: s yms s 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,考察函数在驻点处二阶导数的正负情况: d2y=diff(y,2); ↙ z1=limit(d2y,x,0) ↙z1= -2 z2=limit(d2y,x,-2) ↙z2= 2/9 于是知在x 1=0处二阶导数的值为z 1 =-2,小于0,函数有极大值;在x 2 =-2处二阶导数的值 为z 2 =2/9,大于0,函数有极小值。如果需要,可顺便求出极值点处的函数值: y 1 =limit(y,x,0) ↙ y 1 = 4 y 2 =limit(y,x,-2) ↙ y 2 = 8/3 事实上,如果知道了一个函数的图形,则它的极值情况和许多其它特性是一目了然的。而借助MA TLAB的作图功能,我们很容易做到这一点。 例3.6.2画出上例中函数的图形 解syms x ↙ y=(3*x^2+4*x+4)/( x^2+x+1); ↙得到如下图形 ezplot(y) ↙

如何用MATLAB求函数的极值点和最大值 比如说y=x^3+x^2+1,怎样用matlab来算它的极值和最大值? 求极值: syms x y >> y=x^3+x^2+1 >> diff(y) %求导 ans = 3*x^2 + 2*x >> solve(ans)%求导函数为零的点 ans = -2/3 极值有两点。 求最大值,既求-y的最小值: >> f=@(x)(-x^3-x^2-1)

实验五.函数文件的编写

闽江学院电子系 实验报告 学生姓名:班级:学号:3142731 课程:函数文件的编写 一、(填实验几,例:试验一):实验五 二、实验地点:实验楼A210 实验目的: 1.掌握函数文件的定义方法,函数头的写法; 2.掌握调用函数文件的方法,了解函数文件的嵌套调用; 3.熟悉MATLAB函数文件的特点。 三、实验内容: 1、定义一个函数文件lifang.m,用于计算一个立方体的表面积和体积。在命令窗口中调用它。函数文件: 命令窗口:

2、当n分别取100、1000、10000时,求下列各式的值: (1) 2 2232 1111 1236 n π ??++++= ? ?? (2) ()() ()() 22 224466 133******** n n n n π ?? ? ??? ???????? = ? ????? ? ????-+ ???????? ?? 要求用函数文件的定义和调用来实现。(1)函数文件的定义: 函数文件的调用: 命令窗口:

(2)函数文件的定义: 函数文件的调用: 命令窗口: 3、利用函数文件,实现极坐标(,)ρθ与直角坐标(,)x y 之间的转换,并通过函数调用加以验证。 直角坐标转化为极坐标函数定义: 极坐标转化为直角坐标函数定义:

函数文件的调用: 命令窗口: 4、利用预定义变量nargin和nargout,实现以下功能的函数:若输入只有一个参数,输出以 该参数为半径的球的体积;若输入有两个参数,输出分别以该参数为底面半径和高的圆柱体积;若输入有三个参数,输出分别以该参数为三条边的长方体的体积;若输入参数多

实验3 Matlab 符号运算及求函数极值

实验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 代码为:

matlab自定义函数与极值求法

实验5 matlab 自定义函数与导数应用 实验目的 1.学习matlab 自定义函数. 2.加深理解罗必塔法则、极值、最值、单调性. 实验内容 1.学习matlab 自定义函数及求函数最小值命令. 函数关系是指变量之间的对应法则,这种对应法则需要我们告诉计算机,这样,当我们输入自变量时,计算机才会给出函数值,matlab 软件包含了大量的函数,比如常用的正弦、余弦函数等.matlab 允许用户自定义函数,即允许用户将自己的新函数加到已存在的matlab 函数库中,显然这为matlab 提供了扩展的功能,无庸置疑,这也正是matlab 的精髓所在.因为matlab 的强大功能就源于这种为解决用户特殊问题的需要而创建新函数的能力.matlab 自定义函数是一个指令集合,第一行必须以单词function 作为引导词,存为具有扩展名“.m ”的文件,故称之为函数M -文件. 函数M -文件的定义格式为: function 输出参数=函数名(输入参数) 函数体 …… 函数体 一旦函数被定义,就必须将其存为M -文件,以便今后可随时调用.比如我们希望建立函数12)(2++=x x x f ,在matlab 工作区中输入命令: syms x ;y=x^2+2*x+1; 不能建立函数关系,只建立了一个变量名为y 的符号表达式,当我们调用y 时,将返回这一表达式. y ? y=x^2+2*x+1 当给出x 的值时,matlab 不能给出相应的函数值来. x=3;y ? y=x^2+2*x+1 如果我们先给x 赋值. x=3;y=x^2+2*x+1 得结果:y=16 若希望得出2|=x y 的值,输入: x=2;y ? 得结果:y=16,不是2=x 时的值.读者从这里已经领悟到在matlab 工作区中输入命令:y=x^2+2*x+1不能建立函数关系,如何建立函数关系呢?我们可以点选菜单Fill\New\M-fill 打开matlab 文本编辑器,输入: function y=f1(x) y=x^2+2*x+1; 存为f1.m .调用该函数时,输入: syms x ;y=f1(x)?

实验五 函数文件的编写

闽 江 学 院 电 子 系 实 验 报 告 学生姓名: 班级: 学 号: 课程:MATLAB 程序设计教程 一、实验题目:函数文件的编写 二、实验地点:A210 三、实验目的: 1、掌握函数文件的定义方法,函数头的写法; 2、掌握调用函数文件的方法,了解函数文件的嵌套调用; 3、熟悉MATLAB 函数文件的特点。 四、实验内容: 1、定义一个函数文件lifang.m ,用于计算一个立方体的表面积和体积。在命令窗口中调用它。 2、当n 分别取100、1000、10000时,求下列各式的值: (1)2223211111236n π??++++= ??? (2)()()( )()2222446613355721212n n n n π??????????????= ? ????? ? ????-+?????????? 要求用函数文件的定义和调用来实现。 3、利用函数文件,实现极坐标(,)ρθ与直角坐标(,)x y 之间的转换,并通过函数调用加以验证。 4、利用预定义变量nargin 和nargout ,实现以下功能的函数:若输入只有一个参数,输出以该参数为半径的球的体积;若输入有两个参数,输出分别以该参数为底面半径和高的圆柱体积;若输入有三个参数,输出分别以该参数为三 条边的长方体的体积;若输入参数多于三个,则报错。 5、 先用函数的递归调用定义一个函数文件求1n m i i =∑,然后调用该函数文件求10050102111 1k k k k k k ===++∑∑∑。

五、实验环境(使用的软硬件):Matlab6.5 六、实验步骤及操作: 1.计算立方体体积 函数文件lifang.m 2求函数值 (1)

实验五--M文件和MATLAB程序设计

实验五--M文件和MATLAB程序设计

实验五 M文件和MATLAB程序设计 一、实验目的 matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m 文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。 1.掌握M文件的使用方法。 2.掌握if语句和switch语句的使用 3. 掌握循环语句的使用 4. 通过练习理解MATLAB编程方法。 二、实验原理 1.m文件 用matlab语言编写的程序,称为m文件。M文件根据调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file)。区别? 2.程序控制结构 1)顺序结构 2)选择结构 (1)if语句a) 单分支if语句b) 双分

支if语句c) 多分支if语句 (2)switch 语句 (3)try语句 3)循环结构 (1)for 语句 (2)while语句 (3)break语句、continue语句、return使用,区别? 3.函数文件 function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 三、实验要求 1.首先上机练习PPT中各种流程控制语句的有关实例。 2.然后上机练习下面的实验习题。 四、实验习题 1.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如:

3→10→5→16→8→4→2→1 6→3→10→5→16→8→4→2→1 运行下面的程序,按程序提示输入n=1,2,3,5,7等数来验证这一结论。 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)==0 n=n/2; else n=3*n+1; end a=[a,n]; end a

matlab实验六 多元函数的极值

实验六多元函数的极值 【实验目的】 1.了解多元函数偏导数的求法。 2.了解多元函数极值的求法。 3.了解多元函数条件极值的求法。 4.学习、掌握MATLAB软件有关的命令。 【实验内容】 求函数42 =-+-的极值点和极值。 823 z x xy y 【实验准备】 1.计算多元函数的极值 2.计算二元函数在区域D内的最大值和最小值 3.求函数偏导数的MATLAB命令 MATLAB中主要用diff求函数的偏导数,用jacobian求Jacobian 矩阵。 diff(f,x,n)求函数f关于自变量x的n阶导数。 jacobian(f,x)求向量函数f关于自变量x(x也为向量)的jacobian 矩阵。 【实验重点】 1、多元函数的偏导数计算 2、多元函数极值的计算 【实验难点】 1、多元函数极值的计算

【实验方法与步骤】 练习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 将给出数值解。求解正规方程的MATLAB 代码为 >>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;syms x y; >>z=x^4-8*x*y+2*y^2-3; >>A=diff(z,x,2) >>B=diff(diff((z,x),y)) >>C=diff(z,y,2)

实验5 函数

实验5 函数 实验要求: 使用Visual C++ 6.0开发环境,完成以下习题。 1. 编程实现:分别编写一个求三个整数最大值的函数max,和一个求三个整数最小值的函数min,然后在主函数输入三个整数的值,分别调用max和min函数求最大最小值,并输出。源程序保存为5_1.c文件。 2. 编程实现:编写一个函数,由实参(数组传参)传来一个字符串(字符数组),统计此字符串中字母、数字(0~9)、空格和其它字符的个数,要求在主函数中输入字符串以及输出上述结果。字符串的大小(里面所包含的字符个数)可以是固定的,亦可以是根据输入情况变化。源程序保存为5_2.c文件。 3. 选做题:在一体育比赛中,有10个评委为参赛选手打分(分数在1~10之间),分数使用数组保存,求选手的最后得分,选手最后得分规则:去掉一个最高分和一个最低分后其余分数的平均值。编写一个函数;(例如:函数名为:calculator)计算选手的最后得分。在主函数中定义分数数组,并输入分数,调用自己函数计算最后得分,输出最后得分,结果保留2位小数。 源程序保存为5_3.c 实验提交要求: 1.每位同学的文件必须严格按照题目的要求对文件进行命名,否则按不提交作 业处理。 2.每位同学的作业放在一个文件夹中提交,只需提交源文件(后缀名是.c的文 件),文件夹按以下格式命名: “班内序号_姓名_实验5” 例如:01_黄明_实验5 3.实验完成后,提交到指定服务器。服务器地址: ftp://fcy:fcy@10.5.1.5 请提交到服务器的“作业→高级语言程序设计(C)→实验5”文件夹中以各自

班级名称命名的文件夹内。 (请认清楚班级名称提交,切勿提交到其他班的文件夹中。)

实验5说明

实验5说明(函数和指针) 注意,在实验过程中,你编写的程序不要存放在桌面或者C盘,要存在D 盘上。 实验做完之后,会有4个文件:test5-1.c,test5-2.c,test5-3.c,test5-4.c,将这4个文件压缩为学号-姓名-实验5.rar,其中,学号是你自己的学号,姓名是你自己的姓名。 实验5提交截至时间:2011.6.7(第16周周二),22:00之前。 实验5提交地址:ftp://202.204.120.77/hanhui/计算机应用基础/homework/C 语言中各班文件夹中的实验5文件夹。 同学们在上机的时候,请选择开机菜单中的“Develop”项进入系统。 同学们在编写程序的时候,对于需要做注释的语句,要给出适当的注释。 第一部分 编写程序,程序名称命名为test5-1.c,完成如下任务: (1)有很多物体,比如球体、立方体、圆柱体……,它们都有体积和表面积,要求求取哪个物体的体积和表面积,程序就必须输出那个物体的体积和表面积。 (2)编写球体子函数、立方体子函数、圆柱体子函数(思考一下,为什么形参中的体积和表面积必须用指针?),它们的功能是返回各自的体积和表面积。 (3)在主函数中调用三个子函数(思考一下,调用函数时,传递的实参是什么?),输入1时,输出球体的体积和表面积;输入2时,输出立方体的体积和表面积;输入3时,输出圆柱体的体积和表面积。 (4)在输入1、2或者3时,为了防止误输入,在主函数中要用do…while 语句实现纠错功能。(思考一下,为什么用do…while语句会比较好?)

第二部分 编写程序,程序名称命名为test5-2.c,完成如下任务: (1)编写求最大值子函数max、求最小值子函数min、求和子函数sum,它们函数头如下所示: float max(float *p, int n) float min(float *p, int n) float sum(float *p, int n) (2)在主函数main中定义一个一维数组a(数组元素的个数由你来定),调用上述子函数,分别求出数组的最大值、最小值、总和,并且输入结果。(思考一下,调用子函数的时候,传递的实参是什么?) 第三部分 将下面一段程序存储为test5-3.c,读懂该程序的功能,并且对主函数和子函数中的变量、参数、以及执行语句做出注释,并且用注释的形式说明子函数的功能: #include #include void main() { void inverse(char str[]); char string[100]; printf("input string:"); gets(string); inverse(string); printf("inverse string:%s\n",string); } void inverse(char str[]) {

Matlab优化(求极值)

第七讲 Matlab 优化(求极值) 理论介绍:算法介绍、软件求解. 一.线性规划问题 1.线性规划问题是在一组线性约束条件的限制下,求一线性目标函数最大或最小值的问题,Matlab 中规定线性规划的标准形式为 min s.t.T x c x Ax b Aeq x beq lb x ub ≤?? ?=??≤≤? 其中c 和x 为n 维列向量,A 、Aeq 为适当维数的矩阵,b 、beq 为适当维数的列向量。注意:线性规划问题化为Matlab 规定中的标准形式。 求解线性规划问题的Matlab 函数形式为linprog(c,A,b),它返回向量x 的值,它的具体调用形式为: [x,fval]=linprog(c,A,b,Aeq,beq,LB,UB,x0,OPTIONS) 这里fval 返回目标函数的值,LB 、UB 分别是变量x 的下界和上界,x0是x 的初始值,OPTIONS 是控制参数。 例1 求解线性规划问题 1231231 23123123max 23572510s.t.312,,0 z x x x x x x x x x x x x x x x =+-++=??-+≥??++≤??≥? 程序:c=[2;3;5]; >> A=[-2,5,-1;1,3,1];b=[-10;12]; >> Aeq=[1,1,1];beq=[7]; >> LB=[0;0;0];(zeros(3,1)) >> [x,fval]=linprog(c,A,b,Aeq,beq,LB,[]) 练习与思考:求解线性规划问题

12312312123 min 23+428 s.t.3+26,,0z x x x x x x x x x x x =+++≥?? ≥??≥? 注意:若没有不等式:b AX ≤存在,则令A=[ ],b=[ ]. 若没有等式约束, 则令Aeq=[ ], beq=[ ]. 2.可以转化为线性规划的问题 规划问题12min||+||++||s.t.,n x x x Ax b ≤L 其中1=[],T n x x x L ,A b 为相应维数的矩阵和向量。注意到对任意的i x 存在,>0i i u v 满足=-,||=+i i i i i i x u v x u v ,事实上只要取 +||||-= ,=22 i i i i i i x x x x u v 就可以满足上面的条件。 这样,记11=[],=[],T T n n u u u v v v L L 从而可以把问题变成 =1min (+) (-)s.t.,0 n i i i u v A u v b u v ≤?? ≥?∑ 例2 求解规划问题min{max||}i i i x y ε,其中=-.i i i x y ε 对于这个问题,如果取0=lim||i i y x ε,这样,上面的问题就变换成 01100min s.t.-,,-n n x x y x x y x ≤≤L 这是我们通常的线性规划问题。 练习与思考:规划问题 1234123412341234min ||2||+3||+4||--+=0s.t.-+-3=11--2+3=-2 z x x x x x x x x x x x x x x x x =+? ?? ???? 二.非线性一元函数的最小值 对于求一元函数的最小值问题,Matlab 提供了一个命令函数fminbnd ,

D实验五 M文件和MATLAB程序设计

实验五M文件和MATLAB程序设计 一、实验目的 matlab作为一种高级计算机语言,不仅可以命令行方式完成操作,也具有数据结构、控制流、输入输出等能力,本次实验通过熟悉和掌握m文件的建立与使用方法,以及函数与控制程序流程语句的使用,使学生具备一定的编程和程序调试能力。 1.掌握M文件的使用方法。 2.掌握if语句和switch语句的使用 3. 掌握循环语句的使用 4. 通过练习理解MATLAB编程方法。 二、实验原理 1.m文件 用matlab语言编写的程序,称为m文件。M文件根据调用方式的不同分为两类,命令文件(Script file)和函数文件(Function file)。区别? 2.程序控制结构 1)顺序结构 2)选择结构 (1)if语句a) 单分支if语句b) 双分支if语句c) 多分支if语句 (2)switch 语句 (3)try语句 3)循环结构 (1)for 语句 (2)while语句 (3)break语句、continue语句、return使用,区别? 3.函数文件 function 输出形参表=函数名(输入形参表) 注释说明部分 函数体语句 注意事项? 三、实验要求 1.首先上机练习PPT中各种流程控制语句的有关实例。 2.然后上机练习下面的实验习题。 四、实验习题

1.数论中一个有趣的题目:任意一个正整数,若为偶数,则用2除之,若为奇数,则与3相乘再加上1。重复此过程,最终得到的结果为1。如: 2→1 3→10→5→16→8→4→2→1 6→3→10→5→16→8→4→2→1 运行下面的程序,按程序提示输入n=1,2,3,5,7,8,9等数来验证这一结论。 %classic "3n+1" problem from number theory. while 1 n=input('Enter n,negative quits:'); if n<=0 break end a=n; while n>1 if rem(n,2)==0 n=n/2; else n=3*n+1; end a=[a,n]; end a end Enter n,negative quits: 2. 编程求满足∑=>m i i 11000020的最小m 值。 a=0; i=1; while (a<100000) a=a+pow2(i); i=i+1; end m=i-1 3. 编写一个函数,计算下面函数的值,给出x 的值,调用该函数后,返回y 的值。 function [y]=myfun1(x)

Matlab求函数最值

MATLAB 求函數極小(大)值

函數的極值 n函數的極值(極大值或極小值)可從兩個角度來談,一為絕對的極值(absolute or global extreme value),另一為相對的極值(relative or local extreme value) n絕對的極值:在所有定義域內中的極大值或極小值 n相對的極值:在定義域內某一區間中的極大值或極小值

n 單一變數函數 n 多變數函數 n y = f (x 1, x 2, …, x n )為一函數。若f 在x*上有極值,則 函數極值的發生處 0x y = f (x ) 0x y = f (x )極小值 極大值***12()0,()0,,()0n f f f x x x x x x ???===???L

求單變數函數之極小值n 在特定區間尋找單一變數之函數f(x) 之極小值 n 方法一:在區間內取點,計算這些點的函數值,然後利用min 指令找出其極小值 Ex. 求之極小值,其中>> x=linspace(0,8,100);>> y=cos(x).*exp(-2*x);>> [ymin index]=min(y)>> xmin=x(index) ()* min (),=££l u x f x f x x x x 08 ££x 2()cos()-=x f x x e ymin =-0.0076index =26xmin =2.0202f(x) 稱為目標函數(objective function)

求單變數函數之極小值n 方法二:利用MATLAB 內建函數fminbnd Ex.求之極小值,其中*step 1. edit fun.m function F=fun(x) F=cos(x)*exp(-2*x); *step 2. 求解(回到Matlab Command Window )>> [x, fval]=fminbnd(@fun, 0, 8)[x, fval] = fminbnd(@fun, x1, x2) x: 使函數值最小之x 值fval: 函數之極小值fun: 定義目標函數的function m-file 檔名x1: 區間下限, x2: 區間上限 2()cos()-=x f x x e 08 ££x x =2.0344fval =-0.0076

实验六 M函数文件编程

实验六 M函数文件编程 1、 实验目的 1、掌握M语言程序设计的方法 2、掌握函数文件的编写方法 2、掌握用户参数交互输入设计技术 2、 主要仪器及耗材 计算机,MATLAB7.0。 3、 实验内容和步骤 1、给定三个边长,看看他们是否能够组成一个三角形。 要求: 编写M函数,输入参数为三个边长,而输出则为字符串,说明给定的边长是否能够组成三角形,若可能,进一步指出是否为等腰三角形或者是等边三角形。 对输入的错误数据格式(如字符串等)能够给出错误提示。 2、费波纳切数列:1、1、2、 3、5、8、13……,其递推公式为: a(1)=a(2)=1,a(n)=a(n-1)+a(n-2)(n>=3)。编程实现求n项的费波纳切数列。 要求:用M语言函数实现;对输入的错误数据格式(如字符串、小数等)能够给出错误提示。 3编写M脚本文件,输出9×9乘法表。显示如下。 1×1= 1 1×2= 2 2×2= 4 1×3= 3 2×3= 6 3×3= 9 1×4= 4 2×4= 8 3×4=12 4×4=16 1×5= 5 2×5=10 3×5=15 4×5=20 5×5=25 1×6= 6 2×6=12 3×6=18 4×6=24 5×6=30 6×6=36 1×7= 7 2×7=14 3×7=21 4×7=28 5×7=35 6×7=42 7×7=49 1×8= 8 2×8=16 3×8=24 4×8=32 5×8=40 6×8=48 7×8=56 8×8=64 1×9= 9 2×9=18 3×9=27 4×9=36 5×9=45 6×9=54 7×9=63 8×9=72 9×9=81 参考程序: for i=1:9;

南昌大学C++实验5 函数

南昌大学实验报告 学生姓名:学号:专业班级: 实验类型:□验证□综合□√设计□创新实验日期:实验成绩:一、实验名称 实验5 函数 二、实验目的 1.掌握函数的定义方法、函数的调用方法、参数说明以及返回值。掌握实参与形参的对应关系以及参数之间的“值传递”的方式;掌握函数的嵌套调用及递归调用的设计方法; 2.掌握全局变量和局部变量、动态变量与静态变量的概念和使用方法; 3.在编程过程中加深理解函数调用的程序设计思想。 二.实验内容 1.多模块的程序设计与调试的方法; 2.函数的定义和调用的方法; 3.用递归方法进行程序设计。 三.实验环境 PC微机 DOS操作系统或Windows 操作系统 Turbo C 程序集成环境 四.实验内容 1.编写一个函数primeNum(int num),它的功能是判别一个数是否为素数。如果num 是素数,返回该数;否则返回0值。 要求:(1)在主函数输入一个整数num,调用该函数后,输出num是否是素数的信息。输出格式为:num is prime或num is not prime。 (2)分别输入以下数据:0,1,2,5,9,13,59,121,运行程序并检查结果是否正确。 2.编写一个计算组合数的函数combinNum(int m,int n)。计算结果由函数返回。 计算组合数的公式是: c(m,n)=m!/(n!*(m-n)!) 要求:

(1)从主函数输入m 和n 的值。对m>n 、mn 、m using namespace std; int primeNum(int num) { for(int i=2;i*i<=num;i++)//i 不需要遍历到num { if(!(num%i))//如果能整除则不为素数 return 0; } return num; } void main() { int i;

基于MATLAB的可行方向法求极值问题讲解

基于MATLAB 可行方向法求极值的实现 姓名:xxx 学号:xxx (北京理工大学机械与车辆学院车辆工程,北京 100081) 摘要:在工程实际的优化设计中,随着设计变量数和约束条件数的增加,随机方向搜索法和复合形法等直接优化解法的求解效率会偏低。可行方向法,顾名思义,一种始终在可行域内寻找下降方向的搜索法,以其收敛速度快、效果好的优点已成为求解约束非线性问题的一种有代表性的直接解法,同时也是求解大型约束优化问题的主要方法之一。本文将简单介绍可行方向法的数学思想,采用线性规划法和约束最优步长法编写MATLAB 程序,最后通过算例完成对优化问题的求解。 关键字:可行方向法;MATLAB ;优化方法。 1. 可行方向法的基本数学思想 1.1可行方向法的搜索策略 可行方向法迭代的第一步都是从可行域的某一初始点(0)X 出发,沿负梯度 (0)()f X -?方向移至某一个或J 个起作用约束面的交集()k X 上。以后的搜索路线和迭代计算可根据约束函数和目标函数的不同性状,分别采用以下三种不同策略继续搜索。 1) 由点()k X 出发,沿可行方向作一维最优化搜索,若所得新点(1)k X +在可行域内,则再沿(1)()k f X +-?方向作一维最优化搜索;若所得的新点不在可行域内,则将它移至约束面上再反复重复上述步骤,若 (1)()k f X ε+?≤,则停止迭代,如图1.1所示。 2) 由点()k X 出发,沿可行方向作一维最优化搜索,若所得新点(1)k X +在可行域外,则沿可行方向以最大步长到达另一个约束面上一点,将该点作为迭代点(1)k X +进行反复搜索,直至满足给出的K-T 条件,如图1.2所示。

相关文档
最新文档