[设计]罚函数法MATLAB程序

合集下载

matlab用外点罚函数法求解等式约束最优化问题

matlab用外点罚函数法求解等式约束最优化问题

一、引言我们需要明确什么是等式约束最优化问题。

在实际应用中,经常会遇到这样的问题:在满足一定的条件约束下,寻找一个使得某个目标函数达到最优值的解。

而等式约束最优化问题就是在满足一系列等式约束条件的前提下,求解出目标函数的最优值和对应的解向量。

在数学领域,等式约束最优化问题有着重要的理论和实际意义,对于工程、经济、管理等领域都有着广泛的应用。

二、问题描述一个典型的等式约束最优化问题可以用如下的数学形式来描述:minimize f(x)subject to:g(x) = 0其中,f(x)是目标函数,x是自变量向量,g(x)是等式约束条件函数。

三、外点罚函数法外点罚函数法是一种常用的方法,用于求解等式约束最优化问题。

它的基本思想是通过对目标函数和约束条件进行适当的变换,将等式约束问题转化为无约束问题。

具体地,外点罚函数法通过引入罚函数,将约束条件融入到目标函数中,构造出一个新的优化问题。

然后将这个新问题求解为原问题的近似解。

在优化的过程中,罚函数的惩罚项会惩罚那些违反约束条件的解,从而使得优化过程能够逼近满足约束条件的最优解。

四、matlab中的外点罚函数法求解在matlab中,可以利用现成的优化工具箱来求解等式约束最优化问题。

其中,fmincon函数是用来求解带有等式约束的最优化问题的。

它允许用户自定义目标函数和约束条件函数,并指定优化的初始点和其他参数。

通过在fmincon函数中调用外点罚函数法求解等式约束最优化问题,可以得到目标函数的最优值和对应的解向量。

五、实例分析为了更加直观地理解matlab中外点罚函数法的应用,我们来举一个简单的实例。

假设我们要求解如下的等式约束最优化问题:minimize f(x) = x1^2 + x2^2subject to:g(x) = x1 + x2 - 1 = 0我们需要将目标函数和约束条件转化成matlab可以识别的形式。

我们可以利用fmincon函数来求解这个最优化问题。

MATLAB程序设计函数文件和程序调试

MATLAB程序设计函数文件和程序调试
用。只有在程序执行过程中调用了函数,形参才有可能
得到具体的值,并参与运算求得函数值。
形参在整个函数体内都可以使用, 离开该函数那么不能
使用。
4
函数M文件介绍
%注释说明局部〔可选〕
第一注释行为大写的函数文件名和函数功能简要描述,供
lookfor和help使用
第一注释行之后为函数输入/输出参数的含义及调用格式
执行,直至下一断点
F5
Go until Cursor
执行至当前光标处

Set/Clear Breakpoint
设置或删除断点
F12
Set/Modify Conditional Breakpoint…
设置或修改条件断点

Enable/Disable Breakpoint
开启或关闭光标行的断点

Clear Breakpoints in All Files
当输出形参多于一个时,用方括号括起来
函数必须是一个单独的M文件, 函数文件名建议与函数名
一致,通常为函数名.m,不一致时以文件名为准。
3
函数M文件介绍
形参
全称为“形式参数〞 由于它不是实际存在变量,所以又
称虚拟变量。形参是在定义函数的时候使用的参数,目的
是用来接收调用该函数时传入的参数。
形参也可以理解为函数的自变量,其初值来源于函数的调
M文本文件介绍
MATLAB编写的程序文件称为M文件,M文件有脚本文
件和函数文件两种。
脚本文件〔 M-script 〕不需要输入参数,也不输出
参数,按照文件中制定的顺序执行命令序列。脚本文件
适合于小规模运算。
函数文件接受其他数据为输入参数,并且可以返回数据。

MATLAB实验指导书(共5篇)

MATLAB实验指导书(共5篇)

MATLAB实验指导书(共5篇)第一篇:MATLAB实验指导书MATLAB 实验指导书皖西学院信息工程学院实验一 MATLAB编程环境及简单命令的执行一、实验目的1.熟悉MATLAB编程环境二、实验环境1.计算机2.MATLAB7.0集成环境三、实验说明1.首先应熟悉MATLAB7.0运行环境,正确操作2.实验学时:2学时四、实验内容和步骤1.实验内容(1)命令窗口的使用。

(2)工作空间窗口的使用。

(3)工作目录、搜索路径的设置。

(4)命令历史记录窗口的使用。

(5)帮助系统的使用。

(6)了解各菜单的功能。

2.实验步骤(1)启动MATLAB,熟悉MATLAB的桌面。

(2)进入MATLAB7.0集成环境。

(3)在命令窗口执行命令完成以下运算,观察workspace的变化,记录运算结果。

1)(365-52⨯2-70)÷3 2)>>area=pi*2.5^2 3)已知x=3,y=4,在MATLAB中求z:x2y3 z=2(x-y)4)将下面的矩阵赋值给变量m1,在workspace中察看m1在内存中占用的字节数。

⎡162313⎤⎢511108⎥⎥m1=⎢⎢97612⎥⎢⎥414151⎣⎦执行以下命令>>m1(2 , 3)>>m1(11)>>m1(: , 3)>>m1(2 : 3 , 1 : 3)>>m1(1 ,4)+ m1(2 ,3)+ m1(3 ,2)+ m1(4 ,1)5)执行命令>>helpabs 查看函数abs的用法及用途,计算abs(3 + 4i)6)执行命令>>x=0:0.1:6*pi;>>y=5*sin(x);>>plot(x,y)7)运行MATLAB的演示程序,>>demo,以便对MATLAB有一个总体了解。

五、思考题1、以下变量名是否合法?为什么?(1)x2(2)3col(3)_row (4)for2、求以下变量的值,并在MATLAB中验证。

matlab 程序设计 例题

matlab 程序设计 例题

一、概述Matlab是一种强大的工程计算软件,在工程领域有着广泛的应用。

对于学习Matlab程序设计来说,通过例题学习是非常有效的方法。

通过实际的例题练习,可以帮助学生更深入地理解Matlab的基本原理和应用技巧。

本文将介绍几个常见的Matlab程序设计例题,并进行详细的分析和讲解,希望能够帮助读者加深对Matlab程序设计的理解。

二、例题一:矩阵运算题目:编写一个Matlab程序,实现两个任意大小的矩阵相加的运算。

1.我们需要定义两个任意大小的矩阵A和矩阵B,可以通过rand函数生成随机矩阵,也可以手动输入矩阵的元素。

2.编写Matlab程序,使用矩阵的加法运算符“+”进行矩阵相加操作。

3.输出矩阵相加的结果,并进行验证和检查。

通过这个例题,可以加深对Matlab矩阵运算的理解,包括矩阵的定义、矩阵相加的操作和结果输出的方法。

三、例题二:函数绘图题目:编写一个Matlab程序,绘制sin函数的曲线图像。

1.我们需要定义sin函数的自变量范围和取值步长,可以使用linspace函数生成自变量的取值范围。

2.编写Matlab程序,调用sin函数计算自变量对应的函数值。

3.接下来,使用plot函数绘制sin函数的曲线图像,并设置图像的标题、坐标轴标签等其他参数。

4.输出绘制好的sin函数曲线图像,并进行观察和分析。

通过这个例题,可以了解Matlab中函数绘图的基本方法,包括自变量的定义、函数值的计算和图像的绘制等操作。

四、例题三:数值积分题目:编写一个Matlab程序,实现对指定函数在指定区间上的数值积分。

1.我们需要定义积分的目标函数和积分区间,在Matlab中可以使用function定义目标函数,也可以手动输入目标函数和积分区间。

2.编写Matlab程序,调用Matlab内置的数值积分函数(如quad、quadl等)进行数值积分的计算。

3.输出数值积分的结果,并与解析解进行比较和分析。

通过这个例题,可以了解Matlab中数值积分的计算方法,包括目标函数的定义、积分区间的设定和数值积分函数的调用。

MATLAB中常用函数的使用方法解析

MATLAB中常用函数的使用方法解析

MATLAB中常用函数的使用方法解析一、简介MATLAB(Matrix Laboratory)是一款用于数值计算和科学研究的高级编程语言和环境,它提供了许多强大的函数和工具包,方便用户进行数据处理、可视化、建模和仿真等工作。

在本文中,我们将解析一些在MATLAB中常用的函数,让读者掌握它们的基本使用方法。

二、矩阵运算函数1. abs函数:用于计算矩阵中各元素的绝对值。

2. inv函数:用于求矩阵的逆矩阵。

3. det函数:用于计算矩阵的行列式。

4. rank函数:用于计算矩阵的秩。

5. svd函数:用于进行奇异值分解,将矩阵分解为三个矩阵相乘的形式。

6. eig函数:用于计算方阵的特征值和特征向量。

7. trace函数:用于计算矩阵的迹,即矩阵对角线上元素的和。

三、向量操作函数1. dot函数:用于计算两个向量的点积。

2. cross函数:用于计算两个三维向量的叉积。

3. norm函数:用于计算向量的模。

4. angle函数:用于计算两个向量之间的夹角。

5. linspace函数:用于生成一维等差数列。

四、数学函数1. sin函数:计算给定角度的正弦值。

2. cos函数:计算给定角度的余弦值。

3. tan函数:计算给定角度的正切值。

4. exp函数:计算给定数的指数值。

5. log函数:计算给定数的自然对数。

6. sqrt函数:计算给定数的平方根。

7. power函数:计算给定数的幂。

五、数据统计函数1. mean函数:计算矩阵或向量的均值。

2. median函数:计算矩阵或向量的中位数。

3. std函数:计算矩阵或向量的标准差。

4. var函数:计算矩阵或向量的方差。

5. cov函数:计算矩阵或向量的协方差。

六、数据处理函数1. sort函数:对矩阵或向量进行排序。

2. unique函数:去除矩阵或向量中的重复元素。

3. reshape函数:改变矩阵的形状。

4. repmat函数:将矩阵或向量进行复制扩展。

MATLAB函数的使用方法及示例详解

MATLAB函数的使用方法及示例详解

MATLAB函数的使用方法及示例详解引言:MATLAB是一种用于算法开发、数据可视化、数据分析和数值计算的强大工具。

它不仅具备丰富的内置函数库,还可由用户编写函数,以满足各种复杂的计算需求。

本文将详细介绍MATLAB函数的使用方法,并通过示例来解释其具体应用。

一、MATLAB函数的定义与调用在MATLAB中,函数是一段封装了特定操作的可重复使用的代码,它可以接受输入参数,并返回输出结果。

函数的定义与调用是使用MATLAB的重要基础。

函数的定义:MATLAB中函数的定义以关键词"function"开头,后面跟着函数名和一对圆括号。

函数名用于函数的调用,圆括号内可定义输入参数。

函数体代码位于圆括号之后,用于实现函数的具体功能。

举个例子,定义一个简单的函数用于计算两个数的和:```function result = add(a, b)result = a + b;end```在这个例子中,`add`是函数名,`a`和`b`是输入参数,`result`是输出结果。

函数的调用:函数的调用通过函数名和相应的参数实现。

调用函数时,需要提供参数的值。

调用函数后,函数会执行其功能,并返回结果。

我们使用上面定义的`add`函数来进行示例调用:```x = 3;y = 5;sum = add(x, y);disp(sum);```在这个例子中,我们定义了两个变量`x`和`y`,分别赋值为3和5,然后调用`add`函数,并将结果赋值给变量`sum`。

最后,使用`disp`函数显示`sum`的值。

二、MATLAB内置函数的使用方法MATLAB提供了丰富的内置函数库,涵盖了数学、统计、信号处理、图像处理等各个领域。

下面我们将介绍几个常用的内置函数及其使用方法。

1. `sin`函数:`sin`函数用于计算给定角度的正弦值。

其使用方法为:```result = sin(angle);```其中,`angle`为角度的值,`result`为计算得到的正弦值。

惩罚函数法求解多维非线性优化问题的算法设计

惩罚函数法求解多维非线性优化问题的算法设计

本科毕业设计题目:惩罚函数法求解多维非线性优化问题的算法设计学院:专业:学号:学生姓名:指导教师:日期:摘要现在的科技进步速度惊人,可以用一日千里来形容了。

在我们所学的专业课程中,如自动控制原理、现代控制理论等课程,一般讲的都是线性系统。

但是,在现实生活中,我们所碰到的不可能是线性系统。

因为在实际中,总是会有很多不确定的因素会影响到系统的运行,诸如温度、压力、湿度等等。

所以本文主要是研究非线性函数在约束条件下的优化。

本文是在Matlab环境下,在M文件中通过编写程序来实现遗传算法,进而来求得函数的最优解。

所以主要程序都是M文件来完成的。

编写的程序可以实现一维函数、二维函数的优化,并且能将算法实现在过程通过Matlab的plot函数画图,图像可以像动画一样呈现在我们面前。

通过实验,我们可以清晰的看见算法实现的过程。

计算一维函数时,第一代在约束范围内随机产生inn个点(即inn个第一代个体),然后经过以遗传算法为核心的算法运算gn代后,最终会集中到一个点上去。

这个点就是要求的那个点。

求二维函数优化算法的原理和计算一维的原理是一样的,但是在画图方面就比一维的难一点。

利用遗传算法求解优化,可以对非线性的函数求解优化,并且在以后的进一步对程序优化后,可以再广泛的生产和生活中得到运用。

所以在我们以后的学习中,可以把这一思想运用到那些生产生活中碰到的非线性问题。

关键词:Matlab;优化;遗传算法;非线性AbstractNow at an alarming rate of scientific and technological progress, by leaps and bounds can be used to describe it. What we learned in our professional courses, such as automatic control principle, modern control theory and other courses are generally said linear system. However, in real life, we have encountered can not be the linear system. Because in practice, there will always be a lot of uncertain factors that may affect the operation of the system, such as temperature, pressure, humidity and so on. Therefore, this paper is to examine the nonlinear function in the optimization of binding conditions.This article is in the Matlab environment, in the M documents through the preparation process to achieve the genetic algorithm, and then to find the optimal solution function. Therefore, the main procedures are to be completed M documents. Procedures for the preparation of one-dimensional function can be achieved, two-dimensional function optimization, and algorithm can be adopted in the process of drawing Matlab's plot function, images can be shown the same animation as before us.Through experiments, we can clearly see the process of algorithm. Calculation of one-dimensional function, the first generation in the range of randomly generated binding sites inn (the inn of the first generation of individuals), and then through a genetic algorithm as the core gn-generation algorithm, the final will focus on up to a point. The point is that the points required. Optimization algorithm for two-dimensional function of the principle and the principle of one-dimensional calculation is the same, but in drawing on more than one-dimensional point of difficulty.Optimize the use of genetic algorithm can solve the nonlinear optimization function, and in the future after further optimization of the process, can be a wide range of production and life use to be. Therefore, in our subsequent study, this idea can be applied to the production and life of those they encountered in nonlinear problems.Keywords: Matlab; Optimization; Genetic Algorithm; Nonlinear目录1 绪论 (1)1.1 研究背景及意义 (1)1.2 研究的内容 (2)1.3 本文的结构安排 (3)2 研究原理和工具介绍 (4)2.1 遗传算法的原理和应用 (4)2.1.1 遗传算法的定义和现状 (4)2.1.2 遗传算法的特点及应用 (6)2.1.3 遗传算法的应用步骤 (8)2.2 惩罚函数简介 (8)2.3 求解最优化问题的介绍和方法分类 (9)2.3.1 最优化问题及分类 (9)2.3.2 优化算法及分类 (10)2.4 Matlab的介绍和应用 (11)2.4.1 Matlab简介 (11)2.4.2 Matlab的应用 (11)3 算法的分析设计及部分程序说明 (14)3.1 算法的一维部分 (14)3.1.1 一维程序的分析与设计 (14)3.1.2 一维程序关键部分说明 (16)3.2 算法的二维部分 (19)3.2.1 二维程序的分析与设计 (19)3.2.2 二维程序关键部分说明 (19)4 运行结果及分析 (20)4.1 算法的一维部分 (20)4.1.1 直接运行结果 (20)4.1.2 参数修改运行对比 (23)4.2 算法的二维部分 (28)4.3 本章小结 (29)5 算法设计的优化 (30)5.1 已经完成的优化 (30)5.2 未来优化方向 (34)6 结束语 (36)参考文献 (37)致谢 (38)1 绪论1.1 研究背景及意义按照进化论的观点,地球上的每一物种从诞生开始就进去了漫长的进化过程,各种生物药生存下去就必须进行生存斗争,既有较强生存能力的生物个体容易存活下来并有较多的机会产生后代,反之则被淘汰,逐渐消亡。

MATLAB数学建模14个范例

MATLAB数学建模14个范例

1.整数规划的蒙特卡洛解法2015-06-10 (2)2. 罚函数法 2015-06-11 (3)3. 层次分析 2015-06-12 (4)4. 粒子群优化算法的寻优算法--非线性函数极值寻优 2015-06-13 (5)5有约束函数极值APSO寻优 2015-06-14 (12)6.模拟退火算法 TSP问题2015-06-15 (17)7. 右端步连续微分方程求解2015-06-16 (19)8. 多元方差分析 2015-06-17 (22)9. 基于MIV的神经网络变量筛选 2015-06-18 (25)10. RBF网络的回归--非线性函数回归的实现 2015-06-19 (29)11. 极限学习机在回归拟合中的应用 2015-06-20 (32)12. 极限学习机在分类中的应用 2015-06-21 (34)13. 基于PSO改进策略 2015-06-22 (37)14. 神经网络遗传算法函数极值寻优 2015-06-23 (46)1.1.整数规划的蒙特卡洛解法2015-06-10 已知非线性整数规划为:⎪⎪⎪⎩⎪⎪⎪⎨⎧≤++≤++≤++++≤++++=≤≤-----++++=200520062800622400)5,....,1(9902328243max 54233216432154321543212524232221x x x x x x x x x x x x x x x x i x x x x x x x x x x x z i如果用显枚举试探,共需要计算100^5=10^10个点,其计算量非常大。

然而应用蒙特卡洛去随机模拟计算10^6个点,便可以找到满意解,那么这种方法的可信度究竟怎么样呢? 下面就分析随机采样10^6个点计算时,应用概率理论估计下可信度。

不是一般性,假设一个整数规划的最优点不是孤立的奇点。

假设目标函数落在高值区的概率分别为0.01,0.00001,则当计算10^6个点后,有任一个点落在高值区的概率分别为:1-0.99^1000000=0.99...99(100多位) 1-0.99999^1000000=0.999954602解 (1)首先编写M 文件 mengte.m 定义目标函数f 和约束向量g,程序如下:function [f,g]=mengte(x);f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-... x(4)-2*x(5); g=[sum(x)-400x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800 2*x(1)+x(2)+6*x(3)-200 x(3)*x(3)+x(4)+5*x(5)-200];(2)编写M 文件mainint.m 如下求问题的解: rand('state',sum(clock)); p0=0; ticfor i=1:10^5x=99*rand(5,1);x1=floor(x);%向下取整 x2=ceil(x);%向上取整 [f,g]=mengte(x1); if sum(g<=0)==4 if p0<=f x0=x1; p0=f; end end[f,g]=mengte(x2); if sum(g<=0)==4 if p0<=fx0=x2; p0=f; end end end x0,p0Matlab 求解整数规划祥见第二章(优秀教材)2.罚函数法 2015-06-11利用罚函数法,可将非线性规划问题的求解,转化为求解一系列无约束极值问题,因而也称这种方法为系列无约束最小化技术,简记为SUMT 。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

[设计]罚函数法MATLAB程序
一、进退法、0.618法、Powell法、罚函数法的Matlab程序设计罚函数法(通用)
function y=ff(x,k)
y=-17.86*0.42*x(1)/(0.8+0.42*x(1))*(1-exp(-
2*(0.8+0.42*x(1))/3))*exp(-1.6)*x(2)-22.
99*x(1)/(0.8+x(1))*(1-exp(-2*(0.8+x(1))/3))*x(3)+k*(x(2)-
(1.22*10^2*(9517.8*exp(-1
.6-2*0.42*x(1)/3)*x(2)+19035.6*exp(-
2*x(1)/3)*x(3)))/(1.22*10^2+9517.8*exp(-1.6-2
*0.42*x(1)/3)*x(2)+19035.6*exp(-2*x(1)/3)*x(3)))^2+k*(x(3)-exp(-0.8-2*x(1)/3)*x(3)
-exp(-2.4-2*0.42*x(1)/3)*x(2))^2; % 主函数,参数包括未知数的个数n,惩罚因子q,惩罚因子增长系数k,初值x0,以及允许的误差r function G=FHS(x0,q,k,n,r,h,a) l=1;
while (l)
x=powell(x0,n,q,r(1),h,a); %调用powell函数
g(1)=ff1(x),g(2)=ff2(x) . . . g(p)=ffp(x); %调用不等式约束函数,将其值
%存入数组g
h(1)=hh1(x),h(2)=hh2(x) . . . h(t)=hht(x); %调用等式约束函数,将其值%存入数组h
for i=1:p
if g(i)<r
for j=1:t
if abs(h(j))<r(2)
continue;
else
break;
end
end
else
break;
end
end
if (i==p)&(j==t) %如果所有约束条件的值都在允许的范围内就结束 %搜索,否则加大惩罚力度继续搜索
l=0;
else
x0=x;
q=k*q;
end
end
G=x
%powell算法,用于寻找无约束最优值点
function powel=powell(x0,n,q,r,h,a)
d=eye(n); %n个线性无关的初始搜索方向
k=1;
kk=1;
xx(1,1:n)=x0;
while (kk)
y(1,1:n)=xx(k,1:n);
for j=1:n
s(j)=HJ(y(j,1:n),d(j,1:n),q); %调用0.618算法
y(j+1,1:n)=y(j,1:n)+s(j).*d(j,1:n);
end
d(n+1,1:n)=y(n+1,1:n)-y(1,1:n);
if (norm(d(n+1,1:n),2)<r)
kk=0;
break;
else
ww=0;
m=1;
for i=1:n
gg=ff(y(i,1:n),q)-ff(y(i+1,1:n),q);
if (gg>=ww)
m=i;
end
end
cha=ff(y(1,1:n),q)-2*ff(y(n+1,1:n),q)+ff(2*y(n+1,1:n)-y(1,1:n),q); cha1=2*(ff(y(m,1:n),q)-ff(y(m+1,1:n),q));
if (cha<cha1)
s(n+1)=HJ(y(n+1,1:n),h,a,d(n+1,1:n),q)
xx(k+1,1:2)=y(n+1,1:n)+s(n+1).*d(n+1,1:n)
for j=m+1:n
d(j,1:n)=d(j+1,1:n);
end
k=k+1;
else
xx(k+1,1:n)=y(n+1,1:n);
k=k+1;
end
end
end
powel=y(n+1,1:n)
function w=HJ(x0,h,d,dd,q) %0.618算法
[a,b]=JTF(x0,h,d,dd,q); %调用进退法算法,确定范围r=0.618;
r1=a+(1-r)*(b-a);
r2=a+r*(b-a);
y1=ff(x0+r1.*dd,q);
y2=ff(x0+r2.*dd,q);
k=1;
while (abs(r1-r2)>=0.1)
if y1<y2
b=r2;
r2=r1;
y2=y1;
r1=a+(1-r)*(b-a);
y1=ff(x0+r1.*dd,q);
else
a=r1;
r1=r2;
y1=y2;
r2=a+r*(b-a);
y2=ff(x0+r2.*dd,q);
end
end
w=(r1+r2)/2
%进退法
function [a,b]=JTF(x0,h,d,dd,q) r0=0;
y0=ff(x0+r0.*dd,q);
k=0;
l=1;
while (l)
r1=r0+h;
y1=ff(x0+r1.*dd,q);
if y1<y0
h=d*h;
r=r0;
r0=r1;
y0=y1;
else
if k==0;
h=-h;
r=r0;
else
l=0;
break;
end
end
k=k+1;
end
a=min(r,r1);
b=max(r,r1);
二、进退法、0.618法的C语言程序设计
例1 设f(x)=x^2-2*x+4 ,试确定初始搜索区间,并输出迭代次数main()
{int n=0;
float t,h,a,b,c,d,f1,f2;
printf(“t,h:”);
scanf(“%f,%f”,&t,&h);
f1=t*t-2*t+4;
if((t+h)*(t+h)-2*(t+h)+4<=f1) {c=t+h;f2=c*c-2*c+4;} else {h=-h;c=t+h; f2=c*c-2*c+4;} while(f2<=f1)
{h=2*h;d=t;t=c;f1=f2;c=t+h; f2=c*c-2*c+4;n=n+1;}
if(c<=d)
{a=c;b=d;}
else
{a=d;b=c;}
printf(“[a,b]=[%.2f,%f]\n”,a,b); printf(“n=%d\n”,n);
}
运行情况如下:
(1)t,h:0,0.05
[a,b]=[0.35,1.55]
n=4
(2) t,h:-1.0,0.02
[a,b]=[0.26,4.10]
n=7
(3)t,h:-100,0.01
[a,b]=[-59.05,63.83]
n=13
例2 用0.618法求f(x)=8x^3-2*x^2-7*x+3 的局部最优解(允许误差ε=0.0001 ,初始点
设为x0=0 ,初始步长h=1 (
#include“math.h”
float f(x)
float x;
float y;
{y=((8.0*x-2.0)*x-7.0)*x+3.0;
return(y);
}
main()
{int n=0;
float t,h,a,b,c,d,x0,f0,f1,f2,fc,fd;
printf(“t,h:”);
scanf(“%f,%f”,&t,&h);
f1=f(t);
if (f(t+h)<=f1)c=t+h;
else{h=-h;c=t+h;}
f2=f(c);
while(f2<=f1)
{d=t;t=c;f1=f2;c=t+h;f2=f(c);} if(c<=d){a=c;b=d;}
else{a=d;b=c;}
c=a+0.382*(b-a);fc=f(c);d=a+0.618*(b-a);fd=f(d);
do
{if (fc>=fd) {a=c;c=d;fc=fd;d=a+0.618*(b-a); fd=f(d);} else {b=d;d=c;fd=fc;c=a+0.382*(b-a);fc=f(c);}
n++;
}
while (b-a>0.0001);
x0=(a+b)/2.0;f0=f(x0);
pintf(“n=%d,x0=%7.4f,f0=%7.4f\n”,n,x0,f0); } 运行情况如下:
t,h:0,1.0
n=21,xo=0.6298,f0=-0.2034(。

相关文档
最新文档