matlab实验六--多元函数的极值

matlab实验六--多元函数的极值
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)

结果为

A=12*x^2

B=-8

C=4

由判别法可知P(-4,-2)和Q(4,2)都是函数的极小值点,而点Q(0,0)不是极值点。实际上,P(-4,-2)和Q(4,2)是函数的最小值点。当然,我们可以通过画函数图形来观测极值点与鞍点。

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

运行结果为

还可以通过画等值线来观察极值。

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

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

运行结果为

练习2 求函数z xy =在条件1x y +=下的极值。构造Lagrange 函数

(,,)(1)L x y xy x y λλ=++-

求Lagrange 函数的极值。先求(,,)L x θλ关于,,x θλ的一阶偏导数,相应的MATLAB 代码为

>>clear;syms x y k

>>l=x*y+k*(x+y-1);

>>diff(l,x)

>>diff(l,y)

>>diff(l.k) 得L y x λ?=+?,L x y λ?=+?,1L x y λ

?=+-?,再解正规方程 >>clear;syms x y k

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

2x =-,12y =,12λ=。经过判断,该点为函数的极大值点,此

时函数达到最大值。

【练习与思考】

1. 求1444+-+=xy y x z 的极值,并对图形进行观察。

2. 求函数222),(y x y x f +=在圆周122=+y x 的最大值和最小值。

实验6+过程_函数和程序...

实验6过程、函数和程序包 姓名:学号: 专业:班级: 同组人:无实验日期:2013/7/21 【实验目的与要求】 ?掌握过程的创建与调用 ?掌握PL/SQL函数的编写与调用 ?熟悉程序包的使用 【实验内容与步骤】 6.0.实验准备工作:PL/SQL程序文件的编辑与执行 1.使用文档编辑器编辑以下文件,并保存为aa.sql: 2.以scott身份登录,在SQ L Plus中执行@aa命令运行程序: 注:测试时,文件名请用全名(即包含路径,如:@c:\aa) 给出运行结果:

6.1.存储过程 1.最简单的存储过程编写与执行 (1)创建测试表 drop table Exam_Table; create table Exam_Table( e_id number(5), e_name varchar2(20), e_salary number(8,2) ); (2)创建存储过程 create or replace procedure insert_salary (v_id number,v_name varchar2,v_salary number) is begin insert into Exam_Table values (v_id,v_name,v_salary); commit; dbms_output.put_line('数据插入成功'); end; / (3) 执行(调用)存储过程 exec insert_salary(6,'g',2000); (4)查询执行结果

select * from Exam_Table; 给出执行的最后结果: 2.参数的使用:in/out/in out参数 阅读以下程序,理解不同类型参数使用的不同,运行程序,给出运行结果。 (1) 用两个参数:in ,out 传入一个姓名,输出:某某人你好: create or replace procedure mp(v_in varchar2,v_out out varchar2) is begin v_out:=v_in||'你好'; end; declare v_name varchar2(10); begin mp('scott',v_name); dbms_output.put_line(v_name); end;--输出:scott你好 给出运行结果:

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

实验六 高层绘图操作答案

实验六 高层绘图操作 实验目的: 1. 掌握绘制二维图形的常用函数 2. 掌握绘制三维图形的常用函数 3. 掌握绘制图形的辅助操作 实验内容: 1. 1. 设x x x y cos 2^1sin 35.0????? ? ++=,在π 2~ 0=x 区间取101点,绘制函数曲 线。 x=0:pi/100:2*pi; y=(0.5+3*sin(x)./(1+x..^2)).*cos(x); plot(x,y); 2. 已知2 1x y = ,)2cos(2x y =,213y y y ?=,完成下列操作: (1) 在同一坐标系下用不同的颜色和线型绘制三条曲线。 (2) 以子图形式绘制三条曲线。 (3) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。 (1).在同一坐标系下用不同的颜色和线型绘制三条曲线。 x=0:pi/1000:2*pi; y1=x.^2; y2=cos(2*x); y3=y1.*y2;

plot(x,y1,'r',x,y2,'b-.',x,y3,'k--'); (2). 以子图形式绘制三条曲线。 x=0:pi/10:2*pi; y1=x.^2; subplot(2,2,1);plot(x,y1,'r'); title('y1=x^2'); y2=cos(2*x); subplot(2,2,2);plot(x,y2,'b-.'); title('y2=cos(2*x)'); y3=y1.*y2; subplot(2,2,3);plot(x,y3,'k--'); title('y3=y1.*y2'); (3). 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。x=0:pi/10:2*pi; y1=x.^2; subplot(2,2,1);bar(x,y1,'r'); title('y1=x^2'); subplot(2,2,2);stairs(x,y1,'r'); title('y1=x^2'); subplot(2,2,3);stem(x,y1,'r'); title('y1=x^2'); subplot(2,2,4);fill(x,y1,'r');

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

实验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 实验6 函数及其调用

数学实验练习六:函数 一、1)写一个 MATLAB 函数 piFun01.m 来计算下列级数: f(n) = 4*(1 - 1/3 + 1/5 - 1/7 + 1/9 - 1/11 + ...) 其中 n 为函数的输入,代表上述级数的项数,级数和 f(n) 则是函数的输出。 解:function f=pifun01(n) f=0; for i=1:n f=f+4*(-1)^(i+1)/(2*i-1); end >> piFun01(100000) ans = 3.1416 2)使用 tic 和 toc 指令来测量 piFun01(100000) 的计算时间。如果你不知道如何使用这两个指令,请使用 help tic 及 help toc 来查出它们的用法。我的旧计算机是 Pentium 450MHz,所得的计算时间约为 2 秒。请说明你的计算机规格以及其计算时间。

解:function f=pifun01(n) tic f=0; for i=1:n f=f+4*(-1)^(i+1)/(2*i-1); end f=toc 二、写一个 MATLAB 的递归函数 fibo.m 来计算 Fibonacci 数列, 其定义如下: fibo(n+2) = fibo(n+1)+fibo(n) 此数列的启始条件如下: fibo(1) = 0, fibo(2) = 1. a) fibo(25) 的返回的值是多少? 解:function f=fibo(n) if n==1 f=0; elseif n==2

f=1; else f=fibo(n-1)+fibo(n-2); end >> clear >> fibo(25) ans = 46368 b)使用 tic 和 toc 指令来测量 fibo(25) 的计算时间。我的计 算机是 Pentium 2GHz,所得的计算时间约为 3.35 秒。请说明你的计算机规格以及其计算时间。 解: function f=fibo(n) tic if n==1 f=0; elseif n==2 f=1; else f=fibo(n-1)+fibo(n-2); end

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

实验六、用窗函数法设计FIR滤波器分析解析

实验六 用窗函数法设计 FIR 滤波器 一、实验目的 (1) 掌握用窗函数法设计FIR 数字滤波器的原理和方法。 (2) 熟悉线性相位FIR 数字滤波器特性。 (3) 了解各种窗函数对滤波特性的影响。 二、实验原理 滤波器的理想频率响应函数为H d (e j ω ),则其对应的单位脉冲响应为: h d (n) = ?-π π ωωωπ d e e H n j j d )(21 窗函数设计法的基本原理是用有限长单位脉冲响应序列h(n)逼h d (n)。由于h d (n)往往是无 限长序列,且是非因果的,所以用窗函数。w(n)将h d (n)截断,并进行加权处理: h(n) = h d (n) w(n) h(n)就作为实际设计的FIR 数字滤波器的单位脉冲响应序列,其频率响应函数H(e j ω )为: H(e j ω ) = ∑-=-1 )(N n n j e n h ω 如果要求线性相位特性,则h (n )还必须满足: )1()(n N h n h --±= 可根据具体情况选择h(n)的长度及对称性。 用窗函数法设计的滤波器性能取决于窗函数w(n)的类型及窗口长度N 的取值。设计过程中,要根据对阻带最小衰减和过渡带宽度的要求选择合适的窗函数类型和窗口长度N 。 三、实验步骤 1. 写出理想低通滤波器的传输函数和单位脉冲响应。 2. 写出用四种窗函数设计的滤波器的单位脉冲响应。 3. 用窗函数法设计一个线性相位FIR 低通滤波器,用理想低通滤波器作为逼近滤波器,截止频率ωc =π/4 rad ,选择窗函数的长度N =15,33两种情况。要求在两种窗口长度下,分别求出h(n),打印出相应的幅频特性和相频特性曲线,观察3dB 带宽和阻带衰减; 4 用其它窗函数(汉宁窗(升余弦窗)、哈明窗(改进的升余弦窗)、布莱克曼窗) 设计该滤波器,要求同1;比较四种窗函数对滤波器特性的影响。 四、实验用MATLAB 函数 可以调用MATLAB 工具箱函数fir1实现本实验所要求的线性相位FIR-DF 的设计,调用一维快速傅立叶变换函数fft 来计算滤波器的频率响应函数。

实验六 函数

实验六 函数 一、实验目的 1.掌握自定义函数的一般结构及定义函数的方法。 2.掌握形参、实参、函数原型等重要概念。 3.掌握函数声明、函数调用的一般方法。 4. 了解函数的嵌套调用以及函数的递归调用的格式。 二、实验预习 1 .理解为什么要在程序中引入函数?函数的引入对程序的整体结构有什么样的影响? 2. 函数的定义格式,理解函数的类型说明符根据什么来确定? 3. 充分理解函数实参和形参的联系和区别,掌握单向值传递的意义。 4. 了解针对不同返回类型的函数返回值的应用,尤其是有无return 语句的区别。 5. 掌握函数调用与函数声明的格式,了解什么情况下需要进行函数声明?什么情况下不需要? 6. 了解函数嵌套调用和递归调用的原理及使用原则。 三、实验内容 (一)阅读并调试下列程序,根据要求给出程序结果。 1.求三角形面积函数。 ⑴ 编程分析 ① 设三角形边长为a 、b 、c ,面积area 的算法是s=(a+b+c)/2, area=))()((c s b s a s s --- ,其中 显然,要计算三角形面积,需要用到三个参数,面积函数的返回值的数据类型应为实型。 ② 尽管main()函数可以出现在程序的任何位置,但为了方便程序阅读,通常将主函数放在程序的开始位置,并在它之前集中进行自定义函数的原型声明。 ⑵ 参考程序 /* 定义和使用求三角形面积函数的程序 */ #include "math.h" #include "stdio.h" float area(float,float,float); /*函数的声明*/ void main() { float a,b,c; printf("请输入三角形的三个边长值:\n") scanf("%f,%f,%f",&a,&b,&c); if(a+b>c&&a+c>b&&b+c>a&&a>0.0&&b>0.0&&c>0.0) printf("Area=%-7.2f\n",area(a,b,c)); /* 以下是计算任意三角形面积的函数 */ float area(float a,float b,float c) { float s,area_s; s=(a+b+c)/2.0;

实验六 自定义函数

实验六自定义函数 实验目的:熟悉Matlab自定义函数的定义和调用方法 实验内容: 2. 编写程序,在主程序中提示用户输入一组数字,编写子程序文件 find_div2.m找出能被2整除的数字,find_max_min.m找出输入数字中的最大值和最小值之和,find_averag求出输入数字的平均值,sort_number对数字进行排序,在主程序中调用子程序并且把上述结果输出。例如输入的数字为1,2,3,4,5,要求输出格式为:输入数字中能被2整除的数为:2,4 输入数字中最大值与最小值之和为:5+1=6 输入数字的平均值为:3 输入数字从大到小排序为:5,4 3,2,1 主程序: clear,clc s=input('请输入一组数字:','s'); x=str2num(s); find_div2(x); find_max_min(x); find_averag(x); sort_number(x);

子程序: function find_div2(x) b=length(x); for i=1:b A(i)=x(i); end c=find(rem(A,2)==0); A=A(c); disp(['输入数字中能被2整除的数为:',num2str(A)]) 子程序: function find_max_min(x) a=max(x); b=min(x); c=a+b; disp(['输入数字中最大值与最小值之和为:',num2str(a),'+',num2str(b),'=',num2str(c) 子程序: function find_averag(x) a=mean(x); disp(['输入数字的平均值为: ',num2str(a)]) 子程序: f unction sort_number(x) a=sort(x); b=fliplr(a); disp(['输入数字从大到小排序为:',num2str(b)])

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)

C++实验六 函数

实验名称:实验六函数 班级学号姓名 实验地点完成日期成绩 (一)实验目的与要求 1.掌握高级语言中定义和使用函数的方法; 2.掌握通过“值传送”调用函数的方法; 3. 掌握函数的嵌套调用和递归函数的设计方法; 4.进一步练习阅读检查与调试修改高级语言程序的方法。 (二)实验内容 1.调试运行如下二程序,分析调用函数前后程序1中a,b这二个变量的值是否发生改变?为什么?程序2中数组a的二个元素的值是否发生改变?为什么? 程序1(变量作函数实参) int main( ) { int a=3,b=6; printf("a=%d,b=%d¥n",a,b); exchange1(a,b); printf("a=%d,b=%d¥n",a,b); return 0; } void exchange1(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d¥n",x,y); } 程序2(数组名作函数实参) int main( ) { void exchange2(int x[2]); static int a[2]={3,6};

printf("a[0]=%d,a[1]=%d¥n",a[0],a[1]); exchange2(a); printf("a[0]=%d,a[1]=%d¥n",a[0],a[1]); return 0; } void exchange2(int x[2]) { int t; t=x[0];x[0]=x[1];x[1]=t; printf("x[0]=%d,x[1]=%d¥n",x[0],x[1]); } 2. 写一个判别素数的函数,在主函数输入一个整数,输出是否素数的信息。 本程序应当准备以下测试数据:17、2、1。分别输入数据,运行程序并检查结果是否正确。 3. 编写转换函数,将十进制整数n(-2^31<=n<=2^31-1)转换成k(2<=k<=16)进制数。字母请使用大写。(HLOJ 8001) (三)实验具体步骤 1.调试运行如下二程序,分析调用函数前后程序1中a,b这二个变量的值是否发生改变?为什么?程序2中数组a的二个元素的值是否发生改变?为什么? 程序1(变量作函数实参) int main( ) { int a=3,b=6; printf("a=%d,b=%d¥n",a,b); exchange1(a,b); printf("a=%d,b=%d¥n",a,b); return 0; } void exchange1(int x,int y) { int t; t=x;x=y;y=t; printf("x=%d,y=%d¥n",x,y); }

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 ,

实验六 窗函数及其对信号频谱的影响

实验六窗函数 及其对信号频谱 的影响 一. 实验目的 1. 掌握几种典型窗函数的性质、特点,比较几种典型的窗函数对信号频谱的影响。 2. 通过实验认识它们在克服FFT 频谱分析的能量泄漏和栅栏效应误差中的作用,以便在实际工作中能根据具体情况正确选用窗函数 二. 实验原理 1. 信号的截断及能量泄漏效应 数字信号处理的主要数学工具是博里叶变换.应注意到,傅里叶变换是研究整个时间域和频率域的关系。然而,当运用计算机实现工程测试信号处理时,不可能对无限长的信号进行测量和运算,而是取其有限的时间片段进行分析。做法是从信号中截取一个时间片段,然后用观察的信号时间片段进行周期延拓处理,得到虚拟的无限长的信号,然后就可以对信号进行傅里叶变换、相关分析等数学处理。 图6.1 信号的周期延拓 周期延拓后的信号与真实信号是不同的,下面我们就从数学的角度来看这种处理带来的误差情况。设有余弦信号x(t)在时域分布为无限长(- ∞,∞),当用矩形窗函数w(t)与其相乘时,得到截断信号xT(t) =x(t)w(t)。根据博里叶变换关系,余弦信号的频谱X(ω)是位于ω。处的δ函数,而矩形窗函数w(t)的谱为sinc(ω)函数,按照频域卷积定理,则截断信号xT(t) 的谱XT(ω) 应为: 将截断信号的谱XT(ω)与原始信号的谱X(ω)相比较可知,它已不是原来的两条谱线,而是两段振荡的连续谱.这表明原来的信号被截断以后,其频谱发生了畸变,原来集中在f0处的能量被分散到两个较宽的频带中去了,这种现象称之为频谱能量泄漏(Leakage)。 信号截断以后产生的能量泄漏现象是必然的,因为窗函数w(t)是一个频带无限的函数,所以即使原信号x(t)是限带宽信号,而在截断以后也必然成为无限带宽的函数,即信号在频域的能量与分布被扩展了。又从采样定理可知,无论采样频率多高,只要信号一经截断,就不可避免地引起混叠,因此信号截断必然导致一些误差,这是信号分析中不容忽视的问题。

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

C++上机实验报告实验六

实验六 实验目的 1.掌握运算符重载的方法 2.学习使用虚函数实现动态多态性 实验要求 1.定义Point类,有坐标_x,_y两个成员变量;对Point类重载“++”(自增)、“――”(自减)运算符,实现对坐标值的改变。 2.定义一个车(vehiele)基类,有Run、Stop等成员函数,由此派生出自行车(bicycle)类、汽车(motorcar)类,从bicycle和motorcar派生出摩托车(motorcycle)类,它们都有Run、Stop 等成员函数。观察虚函数的作用。 3. (选做)对实验4中的People类重载“==”运算符和“-”运算符,“==”运算符判断两个people类对象的id属性是否相等;“-”运算符实现People类对象的赋值操作。 实验内容及实验步骤 1.编写程序定义Point类,在类中定义整型的私有成员变量_x_y,定义成员函数Point& operator++();Point operator++(int);以实现对Point类重载“++”(自增)运算符,定义成员函数Point& operator--();Point operator--(int);以实现对Point类重载“--”(自减)运算符,实现对坐标值的改变。程序名:1ab8_1.Cpp #include using namespace std; class Point { public: Point(); Point(int x,int y); ~Point(){} //Point类析构函数 Point& operator++(); //公有成员函数 Point operator++(int); Point&operator--(); Point operator--(int); void Show(); private: int _x; //私有数据成员 int _y; }; Point::Point(){ //Point类构造函数 _x=0;_y=0;} Point::Point(int x,int y) //Point类构造函数 { _x=x; _y=y; }

实验6 函数的定义和调用1

实验六函数的定义和调用 一、实验实训目的及要求 1、掌握C语言函数的定义方法、函数的声明及函数的调用方法。 2、了解主调函数和被调函数之间的参数传递方式。 二、实验实训内容 1、写一个判断素数的函数,在主函数输入一个整数,输出是否素数的信息。 2、写两个函数,分别求两个正数的最大公约数和最小公倍数,用主函数调用这两个函数并输出结果。两个正数由键盘输入。 三、实验实训指导 1、程序清单: mian() { int number; printf(“请输入一个正整数:\n”); scanf(“%d”,&number); if (prime(number)) printf(“\n %d是素数.”,number); else printf(“\n %d不是素数.”,number); } int prime(int number) /*此函数用于判别素数*/ { int flag=1,n; for(n=2;n

2 hcf(int u,int v) { int a,b,t,r; if(u>v) { t=u; u=v; v=t; } a=u; b=v; while((r=b%a)!=0) { b=a; a=r; } return(a); } lcd(int u,int v,int h) { return(u*v/h); } main() { int u,v,h,l; scanf("%d,%d",&u,&v); h=hcf(u,v); printf("H.C.F=%d\n",h); l=lcd(u,v,h); printf("L.C.D=%d\n",l); } 这是一个十分典型的算法,同学们一定要认真分析、学习。 四、实训思考题 1编写函数,求1!+2!+…+n!的和。N的值有键盘输入。 实验指导书

基于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所示。

自动控制原理-实验六

华南师范大学实验报告 姓 名 _xxx 学 号 _xxx 年级班级 _xxx 课程名称 xxx 实验时间 _xxx 一、实验目的 1.学习控制系统稳定性分析的MATLAB 实现; 2.掌握控制系统的稳定判据; 二、实验内容及要求 1.已知系统的开环传递函数: ) 20)(1() 2(100 )(+++=s s s s s G 用求根的方法来判别闭环系统的稳定性。 编写程序,求特征多项式及其根(不能手工计算),判断系统的稳定性。 >>num=[100,200];den=[1,21,20,0];sys=tf(num,den); P=[1,21,20,0];roots(P) ans = 0 -20 -1 >>a=[1,0];b=[1,1];c=conv(a,b);d=[1,20];e=conv(c,d) e = 1 21 20 0 因为三个根有一个为0,所以系统不稳定。 2.已知一个单位负反馈开环传递函数G(S),当k 分别为1、5、10、20时闭环系统的稳定性。 ) 22)(6)(5() 3()(2 +++++=s s s s s s k s G 以k 为输入参数,编写函数,画出上述k 值对应的闭环根,并判断系统的稳定性。

>>a=[1,11,30,0];b=[1,2,2];c=conv(a,b) c = 1 13 54 8 2 60 0 >>num=[1,3];den=[1,13,54,82,60,0];k=1;rlocus(num,den,k) >>num=[1,3];den=[1,13,54,82,60,0];k=5;rlocus(num,den,k)

遗传算法求函数极大值matlab实现

遗传算法求函数最大值(matlab实现) 一、题目: 2,,当x在0~31区间的最大值。寻找f(x)=x 二、源程序: %遗传算法求解函数最大值 %本程序用到了英国谢菲尔德大学(Sheffield)开发的工具箱GATBX,该工具箱比matlab自带的GATOOL使用更加灵活,但在编写程序方面稍微复杂一些 Close all; Clear all; figure(1); fplot('variable*variable',[0,31]); %画出函数曲线 %以下定义遗传算法参数 GTSM=40; %定义个体数目 ZDYCDS=20; %定义最大遗传代数 EJZWS=5; %定义变量的二进制位数 DG=0.9; %定义代沟 最优结果的初始值% trace=zeros(2, ZDYCDS);

FieldD=[5;-1;2;1;0;1;1]; %定义区域描述器的各个参数%以下为遗传算法基本操作部分,包括创建初始种群、复制、交叉和变异 Chrom=crtbp(GTSM, EJZWS); %创建初始种群,即生成给定规模的二进制种群和结构 gen=0; %定义代数计数器初始值variable=bs2rv(Chrom, FieldD); %对生成的初始种群进行十进制转换 2 f(x)=x计算目标函数值% ObjV=variable*variable; while gen

相关文档
最新文档