机械优化设计程序

合集下载

机械优化设计的知识点

机械优化设计的知识点

机械优化设计的知识点机械优化设计是指通过科学的方法和技术手段对机械产品进行结构、性能、工艺等方面的改进和优化,以提高其性能、降低成本、提高可靠性和可维修性等指标,从而满足客户要求和市场竞争的需求。

在机械优化设计过程中,有一些重要的知识点需要我们掌握和运用。

一、需求分析和目标设定机械优化设计的第一步是进行需求分析和目标设定。

在此阶段,我们需要了解用户的需求和期望,明确产品所需的性能指标,例如负载能力、精度要求、速度要求等。

同时,我们还需要考虑市场竞争和成本限制等问题,为优化设计制定明确的目标。

二、材料选择和参数优化在机械优化设计中,材料的选择对产品的性能和成本有着重要影响。

我们需要根据产品的使用环境和要求选择合适的材料,并进行参数优化。

例如,对于需要高强度和轻量化的机械产品,我们可以考虑采用新型材料如碳纤维复合材料;对于需要高耐磨性和耐腐蚀的机械零部件,我们可以选择使用合适的表面涂层技术。

三、结构优化和拓扑优化结构优化和拓扑优化是机械优化设计中常用的方法。

结构优化是指通过调整机械产品的结构参数,如尺寸、形状、布局等,以满足性能和强度等要求。

而拓扑优化则是通过数学模型和计算方法,对机械结构进行优化,以获得最佳的设计方案。

这些优化方法可以显著提高机械产品的性能和效率。

四、仿真和验证在机械优化设计过程中,仿真和验证是非常重要的环节。

通过使用计算机辅助工程(CAE)软件和虚拟模拟技术,我们可以对机械产品的性能进行预测和评估,发现潜在的问题并进行改进。

同时,我们还需要进行实物验证和测试,以确保产品设计的可靠性和稳定性。

五、成本控制和可维修性设计在机械优化设计中,成本控制是一个重要的考量因素。

我们需要在保证产品性能的前提下,尽量降低成本。

对于大批量生产的机械产品来说,可维修性设计也是一个重要的要求。

合理的设计结构和选用易于维修和更换的零部件,可以降低维护和维修成本,提高产品的可用性。

六、环境友好和可持续发展在现代社会,对环境友好和可持续发展的要求越来越高。

机械优化设计

机械优化设计

机械优化设计1.机械优化设计基本思路1。

1优化问题概述在保证基本机械性能的基础上,借助计算机,应用一些精度较高的力学/ 数学规划方法进行分析计算,让某项机械设计在规定的各种设计限制条件下,优选设计参数,使某项或几项设计指标(外观、形状、结构、重量、成本、承载能力、动力特性等)获得最优值。

机械优化设计的过程:(l)分析设计变量,提出目标函数,确定约束条件,建立优化设计的数学模型;(2)选择适当的优化方法,编写优化程序;(3)准备必须的初始数据并上机计算,对计算机求得的结果进行必要的分析.优化方法的选择取决于数学模型的特点,如优化设计问题规模的大小、目标函数和约束函数的性态以及计算精度等,在选择各种可用的优化方法时,需要考虑的问题是优化方法本身的适应性和计算机执行该程序时所花费的时间和费用。

.一般认为,对于目标函数和约束函数均为显函数且设计变量个数不太多的问题,可选用罚函数法;对于只含有线性约束的非线性规划问题,可选用梯度投影法;对于函数易于求导的问题,可选用可行方向法;对于难以求导的问题则应选用直接法,如复合形法.1.2传统优化算法概述根据对约束条件处理的方式不同,可将传统的约束优化方法分为直接法和间接法两大类.直接法通常适用于只含不等式约束的优化问题,它是在可行域内直接搜索可行的最优点的优化方法,如复合形法、随机方向法、可行方向法和广义简约梯度法。

间接法是目前在机械优化设计中应用较为广泛的一种优化方法,其基本思路是将约束优化问题转化成一个或一系列无约束优化问题,再进行无约束优化计算,从而间接地搜索到原约束问题的最优解。

如惩罚函数法和增广拉格朗日乘子法。

1.2。

1直接法复合形法是一种求解约束优化问题的重要的直接解法,其基本思想是在n 维设计空间内构造以k 个可行点为顶点的超多面体,即复合形.对各个顶点所对应的目标函数值进行比较,将目标函数值最大的顶点,即最坏点去掉,然后按照一定的法则求出目标函数值有所下降的可行的新点,并以此点代替最坏点,构成新的复合形.如此重复,直至复合形缩小到一定的精度,即可停止迭代,获得最优解.随机方向法是一种原理很简单的直接解法,其基本思想是在可行域内任意选一初始点,然后利用随机数的概率特性产生若干个随机方向,并从中选出一个使目标函数值下降最快的随机方向作为搜索方向进行搜索.约束变尺度法是一种最先进的非线性规划计算方法,它将二次规划、线性近似、拉格朗日乘子、罚函数、变尺度以及不确定搜索这些方法有效地结合在一起,其基本思想是首先对优化问题产生拉格朗日函数,然后利用该函数在每个迭代点构造一个带有不等式约束条件的二次规划子问题,由于该子问题不易求解析解,所以只能借助于数值方法求解其极值,以每次迭代的二次规划子问题的极值解作为此次迭代的搜索方向,同时采用不精确一维搜索确定搜索步长因子,产生新的迭代点,经过一系列迭代后,最终逼近原问题的最优解。

机械优化设计方法

机械优化设计方法

机械优化设计方法
机械优化设计方法是指通过改变机械结构、优化参数以及采用新的优化算法等手段,使机械产品在设计阶段达到更高的性能和更低的成本。

常用的机械优化设计方法包括:
1. 数值优化方法:通过数学模型和计算机仿真技术,结合优化算法优化机械结构和参数。

常见的数值优化方法包括遗传算法、模拟退火算法、微粒群算法等。

2. 设计自动化方法:借助计算机辅助设计软件和优化算法,实现对机械结构的自动化设计和优化,从而提高设计效率和准确性。

3. 敏感性分析方法:通过对机械结构或参数进行敏感性分析,找出对系统性能影响最大的因素,然后对其进行优化,以达到整体性能的最优化。

4. 多目标优化方法:由于机械设计往往存在多个冲突的优化目标,如性能、重量、成本等,多目标优化方法可以帮助工程师在多个目标之间进行权衡和优化,得到一组最优解,以满足不同的需求。

5. 拓扑优化方法:通过拓扑学原理和优化算法,对机械结构进行优化设计,使得结构材料得到更合理的分布,从而达到降低重量、提高刚度和强度的目的。

总的来说,机械优化设计方法旨在通过优化机械结构和参数,以达到更好的性能、更低的成本和更高的可靠性。

采用合适的优化方法可以有效提高设计效率和准确性,推动机械产品的不断创新和提升。

机械优化设计方法

机械优化设计方法

图2-5 二维问题的可行域
三、目标函数
目标函数是设计变量的函数,是设计中所 追求的目标。如:轴的质量,弹簧的体积,齿 轮的承载能力等。
在优化设计中,用目标函数的大小来衡量设 计方案的优劣,故目标函数也可称评价函数。
目标函数的一般表示式为:
f(x)f(x1,x2,...xn)
优化设计的目的就是要求所选择的设计变 量使目标函数达到最佳值,即使 f(x)Opt
minF(x)CBTX1XTAX 2
机械优化设计方法
第一章:绪论
优化设计(Optimum Design)是60年代发展 起来的一门新的设计方法,是最优化技术 和计算技术在设计领域中应用的结果。
优化方法
解析法 微分求极值
数值计算法
迭代逼近最优值 计算机
优化设计
什么叫机械优化设计
机械优化设计是使某项机械设计在规定 的各种设计限制条件下,优选设计参数, 使某项或几项设计指标获得最优值。
图1-3 机械优化设计过程框图
优化设计与传统设计相比,具有如下三个特点:
(1)设计的思想是最优设计;
(2)设计的方法是优化方法; (3)设计的手段是计算机。
二、机械优化设计的发展概况
1.优化设计的应用领域 近几十年来,随着数学规划论和电子计算机的迅 速发展而产生的,它首先在结构设计、化学工程、 航空和造船等部门得到应用。
工程设计上的“最优值”(Optimum)或 “最佳值”系指在满足多种设计目标和 约束条件下所获得的最令人满意和最适 宜的值。
一、从传统设计到优化设计
机械设计一般需要经过调查研究(资料 检索)、拟订方案(设计模型)、分析计算(论 证方案)、绘图和编制技术文件等一系列的 工作过程。
图1-1 传统的机械设计过程

机械优化设计方法

机械优化设计方法
2 1 2 2 1 2 2
2 F B 2 h2 得到m(h) y h
第一章 优化设计概述
第一节 人字架的优化设计
解析法:
dm 2 F d B 2 h 2 2 F B2 求导 ( ) (1 2 ) 0 dh y dh h y h 解得h* B 152 cm 76cm 2 2F 代入D表达式D* 6.43cm T y 4 FB
l
θ
第一章 优化设计概述
第三节 优化设计问题的数学模型
优化问题的几何解释: 无约束优化问题:目标函数的极小点就是等值面的中心; 等式约束优化问题:设计变量x的设计点必须在 所表示的面或线上,为起作用约束。 不等式约束优化问题:可行点 g ( x) 0
h( x) 0
优化设计问题的数学模型的三要素:设计变量、目 标函数和约束条件。
第一章 优化设计概述
第三节 优化设计问题的数学模型
设计变量:
在设计过程中进行选择并最终必须确定的各项独立参数, 称为设计变量。
设计变量向量:
x [ x1x2
xn ]T
设计常量:参数中凡是可以根据设计要求事先给定的,称为设计常量 。 设计变量:需要在设计过程中优选的参数,称为设计变量。 连续设计变量:有界连续变化的量。 离散设计变量:表示为离散量。
钢管壁厚T=0.25cm,
钢管材料的弹性模量E=2.1×105Mpa, 材料密度ρ=7.8×103kg/m3,
许用压应力σy= 420MPa。
求在钢管压应力σ不超过许用压应力σy 和失稳临界应力σe的条件下, 人字架的高h和钢管平均直径D,使钢管总质量m为最小。
第一章 优化设计概述
第一节 人字架的优化设计
绪论

机械设计优化 Matlab经典程序

机械设计优化 Matlab经典程序

机械设计优化结课作业专业:机械设计制造及其自动化学号: 120606131 姓名:徐向阳指导老师:艾泽潭目录1. ()()()212t t t ϕ=+- 用二次插值法求极小值。

精度0.01e = .............................. 1 2. ()t ϕ=用黄金分割法求极小值。

精度0.01ε= .............................. 2 3. ()()()421211222x x x x x ƒ=-+- 用牛顿法,阻尼牛顿法,变尺度法求极小点。

1) 牛顿法 (3)2) 阻尼牛顿法 (4)3) 变尺度法 (5)4. ()22121212131222x x x x x x x ƒ=+-- 用共轭梯度法求极小点。

............................... 6 5. ()221212112242x x x x x x x ƒ=+-- 用鲍威尔法求极小值。

..................................... 7 6. 用单纯形法求解线性规划问题()()12341231234m i n 1.12.23.34.4..422.53501,2,3,4j x x x x x s t x x x x x x x x j ƒ=--+-⎫⎪++=⎪⎪+++=⎪⎪≥=⎭ ......................................................... 9 7. 求解线性规划问题()12123124125min 712..943604520031030001,2,,5j x x s t x x x x x x x x x x j ⎫Z =--⎪++=⎪⎪++=⎪++=⎪⎪⎪≥=⎭ (11)1. ()()()2e=12ϕ=+-用二次插值法求极小值。

精度0.01 t t t程序如下:function [y,x]=ChaZhi2(f,eps,h,x0)% 利用二次差值求极小值% f为待求函数% eps为精度,默认为eps=1.0e-10% h步长,默认为h=0.0001% x0为搜索区间起始,默认x0=QuJian(f)% 调用格式% [y,x]=ChaZhi2(f,eps,h,x0)% [y,x]=ChaZhi2(f )if nargin==1[a,b,c]=QuJian(f);x0=[a,b,c];eps=1.0e-10;h=0.0001;elseif nargin==2[a,b,c]=QuJian(f);x0=[a,b,c];h=0.0001;elseif nargin==3[a,b,c]=QuJian(f);x0=[a,b,c];endx1=x0(1); y1=subs(f,findsym(f),x1);x2=x0(2); y2=subs(f,findsym(f),x2);x3=x0(3); y3=subs(f,findsym(f),x3);tol=1;while tol>epsc1=(y3-y1)/(x3-x1);c2=((y2-y1)/(x2-x1)-c1)/(x2-x3);xp=0.5*(x1+x3-c1/c2);yp=subs(f,findsym(f),xp);tol=abs((y2-yp)/y2);if (xp-x2)/h>0if y2>=ypx1=x2; y1=y2;x2=xp; y2=yp;elsex3=xp; y3=yp;endelseif y2>=ypx3=x2; y3=y2;x2=xp; y2=yp;elsex1=xp; y1=yp;endendendif y2<ypx=x2; y=y2;elsex=xp; y=yp;endif abs(y)<1.0e-10y=0;if nargout<2y=x;endmatlab中运行如下:[t,ft,k]=TIM([2;3;4])t =2.0000ft =1.4791e-31k =62. ()ε=ϕ=用黄金分割法求极小值。

机械优化设计ppt

机械优化设计ppt
(2)性能约束
一、单级圆柱齿轮减速器的优化设计
第四节 平面连杆机构的优化设计
连杆机构的类型很多,这里只以曲柄摇杆机构两类 运动学设计为例来说明连杆机构优化设计的一般步骤 和方法。 一、曲柄摇杆机构再现已知运动规律的优化设计
1.设计变量的确定
决定机构尺寸的各杆长度,以及当摇杆按已知运 动规律开始运动时,曲柄所处的位置角φ0 为设计 变量。
g1
x
64Fx32 x1 x3
3 E x24 d 4
/
y0
1
0
g2 x 1 x1 / lmin 0
g3 x 1 x2 / Dmin 0
g4 x x2 / Dmax 1 0
g5 x 1 x3 / amin 0
第三节 圆柱齿轮减速器的优化设计
圆柱齿轮减速器是一种非常广泛的机械传动装置。
2.设计变量的尺度变换 当各设计变量之间在量级上相差很大时,在给定的搜索 方向上各自的灵敏度相差也很大。灵敏度大的搜索变化 快,灵敏度小的搜索变化慢。为了消除这种差别,可以 对设计变量进行重新标度。使它成为无量纲或规格化的 设计变量,这种处理称设计变量的尺度变换。
yi ki xi
ki 1/ xi0
x x1x2x3 T l daT
机床主轴优化设计的目标函数为
f
x
1
4
x1
x3
x22 d 2
再确定约束条件
g x y y0 0
在外力F给定的情况下,y是设计变量x的函数,其值按
下式计算
Fa2 l a
y
3 I
I D4 d 4 64
g
x
64Fx32 x1 x3
第二节机床主轴结构优化设计 一、数学模型的建立

机械优化设计流程

机械优化设计流程

机械优化设计流程机械优化设计是指在已有产品基础上,通过分析、设计和改进,提高产品的性能、功能和质量,以满足市场需求和客户需求的过程。

机械优化设计需要综合考虑各种因素,如设计需求、成本约束、制造工艺、材料选择等,以达到优化设计的目的。

下面我们将介绍机械优化设计的流程和方法。

一、需求分析阶段在机械优化设计的开始阶段,首先需要明确产品的需求和目标,包括功能需求、性能需求、质量需求、成本需求等。

在此阶段,设计师需要与客户、市场部门和生产部门等进行沟通,了解产品的使用环境、工作条件、使用要求等。

通过需求分析,设计师可以明确产品的设计方向,为后续的设计提供指导。

二、概念设计阶段在需求分析阶段完成后,设计团队开始进行概念设计。

概念设计是指根据产品的需求和目标,生成多种设计方案,并评估各种设计方案的优缺点,选择最合适的设计方案。

在概念设计阶段,设计团队可以使用各种设计工具和方法,如手绘、3D建模、原型制作等,快速生成设计方案,并与相关部门进行讨论和评审,以确定最终的设计方向。

三、详细设计阶段在概念设计阶段确定最终的设计方案后,设计团队开始进行详细设计。

详细设计是对概念设计进行细化和优化,包括确定材料、尺寸、结构、工艺等方面的具体内容。

在详细设计阶段,设计团队需要考虑产品的生产工艺、装配性、易维护性等因素,以确保产品的设计是可生产、可装配和易维护的。

四、仿真分析阶段在详细设计阶段完成后,设计团队可以进行仿真分析,对产品的性能、强度、刚度、振动等方面进行评估和优化。

通过仿真分析,设计团队可以发现产品存在的问题和不足之处,及时进行调整和改进,提高产品的性能和质量。

五、样机制作阶段在仿真分析完成后,设计团队可以制作样机进行测试验证。

通过样机测试,设计团队可以验证产品的设计是否符合需求和目标,发现并解决潜在问题,最终确定产品的设计方案。

在样机制作阶段,设计团队需要与生产部门密切合作,确保样机的制作和测试顺利进行。

六、优化改进阶段在完成样机测试后,设计团队可以根据测试结果对产品进行优化改进。

机械优化设计第一章

机械优化设计第一章

f ( x) W1 f1 ( x) W2 f2 ( x) ... Wq f q ( x)
Wq:加权因子,是个非负系数。
第一章 优化设计概述
第三节 优化设计问题的数学模型
求设计变量 x [ x1 x2 xn ]T , xn ) min , l) 使目标函数f ( x) f ( x1 , x2 , 和g j ( x) 0( j 1, 2, , m)
第一章 优化设计概述
第三节 优化设计问题的数学模型
约束条件:在优化设计中,对设计变量取值时的限制
条件,称为约束条件或设计约束,简称约束。
等式约束: h( x) 0 等式约束对设计变量的约束严格(降低设计自由度) 不等式约束: g ( x) 0 要求设计点在设计空间中约束曲面 g ( x) 0 的一侧 (包括曲面本身)
且满足约束条件hk ( x) 0(k 1, 2,
优化问题的数学模型
min f ( x), x R n s.t.hk ( x) 0(k 1, 2, g j ( x) 0( j 1, 2, , l) , m)
约束优化问题
无约束优化问题:k=j=0
min f ( x), x Rn
优化设计问题的数学模型的三要素:设计变量、目 标函数和约束条件。
第一章 优化设计概述
第三节 优化设计问题的数学模型
设计变量:
在设计过程中进行选择并最终必须确定的各项独立参数, 称为设计变量。
设计变量向量:
x [ x1x2
xn ]T
设计常量:参数中凡是可以根据设计要求事先给定的,称为设计常量 。 设计变量:需要在设计过程中优选的参数,称为设计变量。 连续设计变量:有界连续变化的量。 离散设计变量:表示为离散量。

机械优化设计理论与方法

机械优化设计理论与方法

06
机械优化设计案例分析
案例一:汽车悬架系统的优化设计
01
优化目标:提高汽车行驶平顺性和操纵稳定性。
02
优化方法:采用遗传算法对悬架系统进行多目标优化,结合耐久性和性能要求 进行权衡。
03
通过遗传算法对悬架系统进行多目标优化,包括弹簧刚度、阻尼系数、减震器 调校等,以提高汽车行驶平顺性和操纵稳定性,同时满足耐久性要求。在优化 过程中,考虑了多种约束条件,如质量、体积、成本等。
底盘和悬挂系统优化
通过优化设计底盘和悬挂系统,提高车辆的操控性和乘坐舒适性。
航空航天领域
飞机结构优化
通过对飞机结构进行优化设计,提高飞机的性能、安全性和舒适 性。
航空发动机性能优化
通过优化设计航空发动机的各个部件,提高发动机的性能和效率, 降低油耗和排放。
航天器结构优化
通过对航天器结构进行优化设计,提高航天器的性能、可靠性和寿 命。
案例二:航空发动机性能的优化设计
优化目标:提高航空发动机的性能和效率。
优化方法:采用响应面法进行多学科优化,结合实验设计和数值模拟。
通过响应面法对航空发动机进行多学科优化,包括气动性能、燃烧效率、冷却系统等,以提高发动机的 性能和效率。在优化过程中,结合了实验设计和数值模拟,考虑了多种学科之间的相互作用。
机械优化设计理论与方法
汇报人: 2023-12-11
目录
• 机械优化设计概述 • 机械优化设计的基本理论 • 机械优化设计的应用领域 • 机械优化设计中的关键技术问
题 • 机械优化设计中的先进方法与
技术 • 机械优化设计案例分析
01
机械优化设计概述
定义与目标
定义
机械优化设计是一种通过合理选 择设计参数,并按照一定的目标 函数进行最优化的设计方法。

机械优化实验报告

机械优化实验报告

一、实验目的本次实验旨在加深对机械优化设计方法的基本理论和算法步骤的理解,培养学生独立编制、调试计算机程序的能力,并掌握常用优化方法程序的使用方法。

通过实验,学生能够灵活运用优化设计方法解决工程实际问题。

二、实验内容本次实验主要涉及以下内容:1. 优化方法的基本原理2. 编程实现优化方法3. 优化方法的实际应用三、实验步骤1. 黄金分割法(1)基本原理黄金分割法是一种在给定初始区间内搜索极小点的一维搜索方法。

其基本原理是:在区间内取两个点,根据函数值的比较,将区间分为三段,保留包含极小值的段,再进行相同的操作,逐步缩小搜索区间。

(2)编程实现根据黄金分割法的基本原理,编写相应的C语言程序,实现一维搜索。

```c#include <stdio.h>#include <math.h>double f(double x) {// 定义目标函数return x x - 4 x + 4;}double golden_section_search(double a, double b, double tol) {double r = 0.618;double a1 = a + r (b - a); double a2 = b - r (b - a); double fa1 = f(a1);double fa2 = f(a2);while (fabs(b - a) > tol) { if (fa1 > fa2) {a = a1;a1 = a2;a2 = b - r (b - a); fa1 = fa2;fa2 = f(a2);} else {b = a2;a2 = a1;a1 = a + r (b - a); fa2 = fa1;fa1 = f(a1);}}return (a + b) / 2;}int main() {double x_min = golden_section_search(a, b, tol);printf("Optimal solution: x = %f\n", x_min);return 0;}```(3)结果分析通过运行程序,可以得到最优解 x = 2.000000,目标函数值为 f(x) = 0。

机械优化设计实例

机械优化设计实例

机械优化设计实例以汽车制造过程中的发动机设计优化为例,该实例涉及程序和算法框图。

1.现状分析:首先,我们需要分析目前使用的发动机设计的性能和问题,这可以通过实验数据和模拟结果来获取。

通过这些数据,我们可以确定哪些方面需要进行优化。

2.目标设定:在优化设计之前,我们需要设定设计目标,例如提高燃烧效率、减少排放、提高动力输出等。

3.参数选择:根据设计目标,我们需要选择一些关键参数进行调整,例如燃烧室形状、进气道设计、气缸布置等。

这些参数的选择可以基于经验或者通过试验和模拟得到。

4.方案设计:通过调整参数,我们可以设计若干不同的发动机构型。

这些构型可以通过CAD软件进行绘制和设计。

5.程序编写:为了评估不同构型的性能,我们需要编写相应的计算程序。

该程序可以基于数值模拟和实验数据,根据给定的输入参数计算发动机的性能指标,例如动力输出、燃油消耗等。

6.算法框图:以下是一个简化的算法框图,描述了发动机设计优化的步骤:开始->现状分析->目标设定->参数选择->方案设计->程序编写->性能计算->评估结果->是否满足设计目标?->是->结束;否->调整参数->重新方案设计->重新程序编写->重新性能计算->重新评估结果->…在这个框图中,我们可以看到,如果评估结果不满足设计目标,我们需要调整参数,并重新进行方案设计、程序编写和性能计算。

这个过程可以循环进行,直到满足设计目标为止。

总结:通过以上步骤,我们可以进行机械优化设计实例,特别是发动机设计优化。

通过分析现状、设定目标、调整参数、设计方案和编写程序,我们可以评估不同设计的性能,并通过循环优化的方式不断改进设计,以达到更好的性能和效果。

机械优化设计上机完整版(程序)

机械优化设计上机完整版(程序)

X_0 = [1;1];X0_1 = X_0;fprintf(' 迭代初始点坐标为::X0_1 = [%6f;%6f]\n',X0_1)E = 0.001;e1 = [1;0];e2 = [0;1];S1_1 = e1;S2_1 = e2;f0 = X0_1(1)^2+2*X0_1(2)^2-4*X0_1(1)-2*X0_1(1)*X0_1(2);F1 = f0;syms a1X1_1 = X0_1 + a1*S1_1;f1 = X1_1(1)^2+2*X1_1(2)^2-4*X1_1(1)-2*X1_1(1)*X1_1(2);ff1=diff(f1);a1=solve(ff1);fprintf(' 第一轮第一次一维搜索的最优步长因子为::a1 = %6f\n',eval(a1))X1_1 = X0_1 + a1*S1_1;f1 =eval( X1_1(1)^2+2*X1_1(2)^2-4*X1_1(1)-2*X1_1(1)*X1_1(2));syms a2X2_1 = X1_1 + a2*S2_1;f2 = X2_1(1)^2+2*X2_1(2)^2-4*X2_1(1)-2*X2_1(1)*X2_1(2);ff2 = diff(f2);a2 = solve(ff2);fprintf(' 第一轮第二次一维搜索的最优步长因子为::a2 = %6f\n',eval(a2))X2_1 = X1_1 + a2*S2_1;f2 = eval(X2_1(1)^2+2*X2_1(2)^2-4*X2_1(1)-2*X2_1(1)*X2_1(2));F2 = f2;S_1 = X2_1-X0_1;fprintf(' 第一轮迭代完成过后,得到的第一个共轭方向向量为::S_1 = [%4f;%4f]\n',eval(S_1))X3_1 = 2*X2_1-X0_1;fprintf(' 沿着共轭方向S_1 计算X0_1 的映射点为::X3_1 = [%4f;%4f]\n',eval(X3_1)) F3 = eval(X3_1(1)^2+2*X3_1(2)^2-4*X3_1(1)-2*X3_1(1)*X3_1(2));Dt1_1 = f0-f1;Dt2_1 = f1-f2;Dtm_1 = max(Dt1_1,Dt2_1);if (F3<F1&(F1+F3-2*F2)*(F1-F2-Dtm_1)^2<0.5*Dtm_1*(F1-F3)^2)S1_2 = S2_1;S2_2 = S_1;elseS1_2 = S2_1;S2_2 = S1_1;endX_1 = X2_1+a3*S_1;f3 = X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2);ff3 = diff(f3);a3 = solve(ff3);X_1 = X2_1+a3*S_1;f3 = eval(X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2));X0_2 =eval(X_1);F_1 = f3;d1 = sqrt((X0_2(1)-X0_1(1))^2+(X0_2(2)-X0_1(2))^2);fprintf(' 第一轮迭代完成过后的精度检验值为::d1 = %4f\n',d1)if (d1>E)syms a4X1_2 = X0_2+a4*S1_2;f4 = X1_2(1)^2+2*X1_2(2)^2-4*X1_2(1)-2*X1_2(1)*X1_2(2);ff4 = diff(f4);a4 = solve(ff4);fprintf(' 第二轮迭代第一次一维搜索的最优步长因子为: a4 = %4f\n',eval(a4))X1_2 = X0_2+a4*S1_2;f4 = eval(X1_2(1)^2+2*X1_2(2)^2-4*X1_2(1)-2*X1_2(1)*X1_2(2));syms a5X2_2 = X1_2 + a5*S2_2;f5 = X2_2(1)^2+2*X2_2(2)^2-4*X2_2(1)-2*X2_2(1)*X2_2(2);ff5 = diff(f5);a5 = solve(ff5);fprintf(' 第二轮迭代第二次一维搜索的最优步长因子为: a5 = %4f\n',eval(a5))X2_2 = X1_2 + a5*S2_2;f5 = eval(X2_2(1)^2+2*X2_2(2)^2-4*X2_2(1)-2*X2_2(1)*X2_2(2));F_2 = f5;S_2 = X2_2-X0_2;fprintf(' 第二轮迭代完成过后,得到的第二个共轭方向向量为::S_2 = [%4f;%4f]\n',eval(S_2))X3_2 = 2*X2_2-X0_2;fprintf(' 沿着共轭方向S_2 计算X0_2 的映射点为::X3_2 = [%4f;%4f]\n',eval(X3_2)) F_3 = eval(X3_2(1)^2+2*X3_2(2)^2-4*X3_2(1)-2*X3_2(1)*X3_2(2));Dt1_2 = f3-f4;Dt2_2 = f4-f5;Dtm_2 = max(Dt1_1,Dt2_1);if (F_3<F_1&(F_1-2*F_2+F_3)*(F_1-F_2-Dtm_2)^2<0.5*Dtm_2*(F_1-F_3)^2)S1_3 = S2_2;S2_3 = S_2;elseS1_3 = S2_2;S2_3 = S1_2;endsyms a6X_2 = X2_2+a6*S_2;f6 = X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2);ff6 = diff(f6);a6 = solve(ff6);X_2 = X2_2+a6*S_2;f6 = eval(X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2));X0_3 = eval(X_2);F__1 = f6;d2 = sqrt((X0_3(1)-X0_2(1))^2+(X0_3(2)-X0_2(2))^2);fprintf(' 第二轮迭代完成过后的精度检验值为::d2 = %4f\n',d2)if(d2>E)syms a7X1_3 = X0_3+a7*S1_3;f7 = X1_3(1)^2+2*X1_3(2)^2-4*X1_3(1)-2*X1_3(1)*X1_3(2);ff7 = diff(f7);a7 = solve(ff7);fprintf(' 第三轮迭代第一次一维搜索的最优步长因子为: a7 = %4f\n',eval(a7))X1_3 = X0_3+a4*S1_3;f7 = eval(X1_3(1)^2+2*X1_3(2)^2-4*X1_3(1)-2*X1_3(1)*X1_3(2));syms a8X2_3 = X1_3 + a8*S2_3;f8 = X2_3(1)^2+2*X2_3(2)^2-4*X2_3(1)-2*X2_3(1)*X2_3(2);ff8 = diff(f8);a8 = solve(ff8);fprintf(' 第三轮迭代第二次一维搜索的最优步长因子为: a8 = %4f\n',eval(a8))X2_3 = X1_3+a8*S2_3;f8 = eval(X2_3(1)^2+2*X2_3(2)^2-4*X2_3(1)-2*X2_3(1)*X2_3(2));F__2 = f8;S_3 = X2_3-X0_3;fprintf(' 第三轮迭代完成过后,得到的第三个共轭方向向量为::S_3 = [%4f;%4f]\n',eval(S_3))X3_3 = 2*X2_3-X0_3;fprintf(' 沿着共轭方向S_3 计算X0_3 的映射点为::X3_3= [%4f;%4f]\n',eval(X3_3)) F__3 = eval(X3_3(1)^2+2*X3_3(2)^2-4*X3_3(1)-2*X3_3(1)*X3_3(2));Dt1_3 = f6-f7;Dt2_3 = f7-f8;Dtm_3 = max(Dt1_3,Dt2_3);if (F__3<F__1&(F__1-2*F__2+F__3)*(F__1-F__2-Dtm_3)^2<0.5*Dtm_3*(F__1-F__3)^2)S1_4 = S2_3;S2_4 = S_3;elseS1_4 = S2_3;S2_4 = S1_3;endsyms a9X_3 = X2_3+a9*S_3;f9 = X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2);ff9 = diff(f9);a9 = solve(ff9);X_3 = X2_3+a9*S_3;f9 = eval(X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2));X0_4 = eval(X_3);F___1 = f9;d3 = sqrt((X0_4(1)-X0_3(1))^2+(X0_4(2)-X0_3(2))^2);fprintf(' 第三轮迭代完成过后的精度检验值为::d3 = %4f\n',d3)if (d3>E)disp(' 进行第四次迭代!')elsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_3))f = eval(X_3(1)^2+2*X_3(2)^2-4*X_3(1)-2*X_3(1)*X_3(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)endelsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_2))f = eval(X_2(1)^2+2*X_2(2)^2-4*X_2(1)-2*X_2(1)*X_2(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)endelsedisp(' 满足精度要求,故迭代终止!')fprintf(' 本优化问题的最优解为::X_* = [%4f;%4f]\n',eval(X_1))f = eval(X_1(1)^2+2*X_1(2)^2-4*X_1(1)-2*X_1(1)*X_1(2));fprintf(' 本优化问题的最优函数值::f_* = %4f\n',f)end>> 迭代初始点坐标为::X0_1 = [1.000000;1.000000]第一轮第一次一维搜索的最优步长因子为::a1 = 2.000000第一轮第二次一维搜索的最优步长因子为::a2 = 0.500000第一轮迭代完成过后,得到的第一个共轭方向向量为::S_1 = [2.000000;0.500000] 沿着共轭方向S_1 计算X0_1 的映射点为::X3_1 = [5.000000;2.000000]第一轮迭代完成过后的精度检验值为::d1 = 2.886174第二轮迭代第一次一维搜索的最优步长因子为: a4 = 0.200000第二轮迭代第二次一维搜索的最优步长因子为: a5 = 0.080000第二轮迭代完成过后,得到的第二个共轭方向向量为::S_2 = [0.160000;0.240000] 沿着共轭方向S_2 计算X0_2 的映射点为::X3_2 = [4.120000;2.180000]第二轮迭代完成过后的精度检验值为::d2 = 0.360555第三轮迭代第一次一维搜索的最优步长因子为: a7 = 0.000000第三轮迭代第二次一维搜索的最优步长因子为: a8 = 0.100000第三轮迭代完成过后,得到的第三个共轭方向向量为::S_3 = [0.400000;0.200000] 沿着共轭方向S_3 计算X0_3 的映射点为::X3_3= [4.800000;2.400000]第三轮迭代完成过后的精度检验值为::d3 = 0.000000满足精度要求,故迭代终止!本优化问题的最优解为::X_* = [4.000000;2.000000]本优化问题的最优函数值::f_* = -8.000000>>。

机械优化设计程序

机械优化设计程序

机械优化设计程序(2009-04-24 19:30:52)转载标签:机械优化设计程序powell外点惩罚函数法c杂谈今天终于交了机械优化设计作业,程序贴出来,那位要用就拿去吧,资源共享了,O(∩_∩)O下面是利用外点惩罚函数(Powell)法求解三维目标函数最优解与最优值的程序,用C++编写。

#include<iostream.h>#include<math.h>double lamta[10]={0, 1.0 ,0 ,0 ,0 ,1 ,0 ,0 ,0 ,1};//鲍威尔方法初始化方向,线性无关double lamta1[3]={0, 0 , 0};//暂存新的搜索方向double x1[4]={0, 0 ,0, 0 };//x1到x3用于存储各共轭方向的点double x2[4]={0, 0 ,0, 0 };double x3[4]={0, 0 ,0, 0 };double x4[4]={0, 0 ,0, 0 };//x4用于中间判断double x5[4]={0, 0 ,0, 0 };//x5用存放于更换方向后产生的新点int m=0;//标志double x_[4]={0, 0, 0, 0};//暂存鲍威尔最优解double x0[4]={0, 2, 2 , 2};//初值double c=10;//递减系数double e=0.00001;//精度控制double r0=1;//初始惩罚因子double r=1;//函数声明部分void Powell(double r); //鲍威尔方法函数double fxy(double x1,double x2,double x3,double r); //待求函数double ysearch(double x); //一维搜索的目标函数void search(double &a,double &b,double h); //区间搜索double yellowcut(double &a,double &b); //黄金分割void sort(double *p,int size);//选择法排序void main() //约束优化方法主函数入口{cout<<"请输入精度"<<endl;cin>>e;changyan:Powell(r);double cmpare[4];int flag1=0;for (int i=1;i<=3;i++){cmpare[i]=x_[i]-x0[i];if (fabs(cmpare[i])<e){flag1++;}}if (flag1==3){cout<<"最优解为:"<<"x1="<<x_[1]<<" "<<"x2="<<x_[2]<<" "<<"x3="<<x_[3]<<endl;cout<<"最小值为"<<fxy(x_[1],x_[2],x_[3],r)<<endl;}else{for (int j=1;j<=3;j++){x0[j]=x_[j];}r=c*r;goto changyan;}}//子函数定义部分double fxy(double x1,double x2,double x3,double r)//待求函数{double m,n,p;m=(-x1>0)?(-x1):0;n=(-x2>0)?(-x2):0;p=(-x3>0)?(-x3):0;return //惩罚函数1000-x1*x1-2*x2*x2-x3*x3-x1*x2-x1*x3+r*(m*m+n*n+p*p)+r*((x1*x1+x2*x2+x3*x3-25)*(x1*x1+x2*x2+x3 *x3-25)+(8*x1+14*x2+7*x3-56)*(8*x1+14*x2+7*x3-56));}void Powell(double r) //鲍威尔方法函数定义double det=0.0001; //迭代精度int k;my1: for (k=1;k<=3;k++){m=3*k-2;double a=0,b=0,xo=0;search(a,b,1); //完成区间搜索double temp;temp=yellowcut(a,b);//黄金分割法int n=3*k-2;for (int i=1;i<=3;i++){switch (k){case 1:x1[i]=x0[i]+temp*lamta[n++];break;case 2:x2[i]=x1[i]+temp*lamta[n++];break;case 3:x3[i]=x2[i]+temp*lamta[n++];break;default :break;}}}double cmp[4];int flag=0;for (int i=1;i<=3;i++){cmp[i]=x3[i]-x0[i];if (fabs(cmp[i])<det){flag++;}}if (flag==3) //找到最优解x_[1]=x3[1];x_[2]=x3[2];x_[3]=x3[3];}else{double fy[4];fy[0]=fxy(x0[1],x0[2],x0[3],r);fy[1]=fxy(x1[1],x1[2],x1[3],r);fy[2]=fxy(x2[1],x2[2],x2[3],r);fy[3]=fxy(x3[1],x3[2],x3[3],r); double fyy[3]; for (int ii=0;ii<3;ii++){fyy[ii]=fy[ii]-fy[ii+1];}sort(fyy,3);for (ii=1;ii<=3;ii++){x4[ii]=2*x3[ii]-x0[ii];}double f0,f3,f4;f0=fy[0];f3=fy[3];f4=fxy(x4[1],x4[2],x4[3],r);if ((f0+f4-2*f3)/2>=fyy[2]){if (f3<f4){for (int t=1;t<=3;t++){x0[t]=x3[t];}}elsefor (int t=1;t<=3;t++){x0[t]=x4[t];}}goto my1;}else{for (int t=0;t<3;t++){lamta1[t]=x3[t+1]-x0[t+1];}m=0; //switch 标志!double aa=0,bb=0;search(aa,bb,1);double temp1;temp1=yellowcut(aa,bb);for (int i=1;i<=3;i++){x5[i]=x3[i]+temp1*lamta1[i-1];}for (i=1;i<=3;i++){x0[i]=x5[i];}for (i=1;i<=6;i++){lamta[i]=lamta[i+3];}for (i=1;i<=3;i++){lamta[6+i]=lamta1[i-1];}goto my1;}}}double ysearch(double x) //一维搜索的目标函数{switch (m){case 1: return fxy(x0[1]+x*lamta[m],x0[2]+x*lamta[m+1],x0[3]+x*lamta[m+2],r);break;case 4: return fxy(x1[1]+x*lamta[m],x1[2]+x*lamta[m+1],x1[3]+x*lamta[m+2],r);break;case 7: return fxy(x2[1]+x*lamta[m],x2[2]+x*lamta[m+1],x2[3]+x*lamta[m+2],r);break;case 0: return fxy(x3[1]+x*lamta1[0],x3[2]+x*lamta1[1],x3[3]+x*lamta1[2],r);break;//更改方向后的一维搜索default:return 0; break;}}void search(double &a,double &b,double h) //区间搜索{double a1,a2,a3,y1,y2,y3;h=1;a1=a,y1=ysearch(a1);a2=a+h,y2=ysearch(a2);if(y2>=y1){h=-h,a3=a1,y3=y1;a1=a2,y1=y2,a2=a3,y2=y3;}a3=a2+h,y3=ysearch(a3);while(y3<=y2){h=2*h;a1=a2,y1=y2,a2=a3,y2=y3;a3=a2+h,y3=ysearch(a3);}if(h<0)a=a3,b=a1;else a=a1,b=a3;}double yellowcut(double &a,double &b){double e; //黄金分割法求解e=0.001;double c,fc;c=a+0.382*(b-a);fc=ysearch(c);double d,fd;double xo;d=a+0.618*(b-a);fd=ysearch(d);label2: if (fc<=fd){b=d;d=c;fd=fc;c=a+0.382*(b-a);fc=ysearch(c);}else{a=c;c=d;fc=fd;d=a+0.618*(b-a);fd=ysearch(d);}if ((b-a)<=e){xo=(a+b)/2;}elsegoto label2;return xo;}void sort(double *p,int size){//选择法排序int i,j;double k;for(i=0;i<size-1;i++)for(j=i+1;j<size;j++)if(*(p+i)>*(p+j)){k=*(p+i);*(p+i)=*(p+j);*(p+j)=k;} }。

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

应用变尺度法计算计算f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2 的无约束极值,初始点x0=[1,1]。

/*tt ---- 一维搜索初始步长ff ---- 差分法求梯度时的步长ac ---- 终止迭代收敛精度ad ---- 一维搜索收敛精度n ----- 设计变量的维数xk[n] -- 迭代初始点*/#include<stdio.h>#include<stdlib.h>#include<math.h>#include<conio.h>#define tt 0.01#define ff 1.0e-6#define ac 1.0e-6#define ad 1.0e-6#define n 2double ia;double fny(double *x){double x1=x[0],x2=x[1];double f;f=x1*x1+2*x2*x2-4*x1-2*x1*x2;return f;}double * iterate(double *x,double a,double *s){double *x1;int i;x1=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++)x1[i]=x[i]+a*s[i];return x1;}double func(double *x,double a,double *s){double *x1;double f;x1=iterate(x,a,s);f=fny(x1);return f;}void finding(double a[3],double f[3],double *xk,double *s) {double t=tt;int i;double a1,f1;a[0]=0;f[0]=func(xk,a[0],s);for(i=0;;i++){a[1]=a[0]+t;f[1]=func(xk,a[1],s);if(f[1]<f[0]) break;if(fabs(f[1]-f[0])>=ad){t=-t;a[0]=a[1];f[0]=f[1];}else{if(ia==1) return; //breakt=t/2;ia=1;}}for(i=0;;i++){a[2]=a[1]+t;f[2]=func(xk,a[2],s);if(f[2]>f[1]) break;t=2*t;a[0]=a[1];f[0]=f[1];a[1]=a[2];f[1]=f[2];}if(a[0]>a[2]){a1=a[0];f1=f[0];a[0]=a[2];f[0]=f[2];a[2]=a1;f[2]=f1;}return;}double lagrange(double *xk,double *ft,double *s){int i;double a[3],f[3];double b,c,d,aa;finding(a,f,xk,s);for(i=0;;i++){if(ia==1) { aa=a[1]; *ft=f[1]; break; }d=(pow(a[0],2)-pow(a[2],2))*(a[0]-a[1])-(pow(a[0],2)-pow(a[1],2))*(a[0]-a[2]);if(fabs(d)==0) break;c=((f[0]-f[2])*(a[0]-a[1])-(f[0]-f[1])*(a[0]-a[2]))/d;if(fabs(c)==0) break;b=((f[0]-f[1])-c*(pow(a[0],2)-pow(a[1],2)))/(a[0]-a[1]);aa=-b/(2*c);*ft=func(xk,aa,s);if(fabs(aa-a[1])<=ad) {if(*ft>f[1]) aa=a[1];break;}if(aa>a[1]){if(*ft>f[1]) {a[2]=aa;f[2]=*ft;}else if(*ft<f[1]) {a[0]=a[1];a[1]=aa;f[0]=f[1];f[1]=*ft;}else if(*ft==f[1]){a[2]=aa;a[0]=a[1];f[2]=*ft;f[0]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}else{if(*ft>f[1]) {a[0]=aa;f[0]=*ft;}else if(*ft<f[1]) {a[2]=a[1];a[1]=aa;f[2]=f[1];f[1]=*ft;}else if(*ft==f[1]){a[0]=aa;a[2]=a[1];f[0]=*ft;f[2]=f[1];a[1]=(a[0]+a[2])/2;f[1]=func(xk,a[1],s);}}}if(*ft>f[1]) {*ft=f[1];aa=a[1];}return aa;}double *gradient(double *xk){double *g,f1,f2,q;int i;g=(double*)malloc(n*sizeof(double));f1=fny(xk);for(i=0;i<n;i++){q=ff;xk[i]=xk[i]+q; f2=fny(xk);g[i]=(f2-f1)/q; xk[i]=xk[i]-q;}return g;}double * bfgs(double *xk){double u[n],v[n],h[n][n],dx[n],dg[n],s[n]; double aa,ib;double *ft,*xk1,*g1,*g2,*xx,*x0=xk; double fi;int i,j,k;ft=(double *)malloc(sizeof(double));xk1=(double *)malloc(n*sizeof(double));for(i=0;i<n;i++){s[i]=0;for(j=0;j<n;j++){h[i][j]=0;if(j==i) h[i][j]=1;}}g1=gradient(xk);fi=fny(xk);x0=xk;for(k=0;k<n;k++){ib=0;if(ia==1) { xx=xk; break; }for(i=0;i<n;i++) s[i]=0;for(i=0;i<n;i++)for(j=0;j<n;j++)s[i]+= -h[i][j]*g1[j];aa=lagrange(xk,ft,s);xk1=iterate(xk,aa,s);g2=gradient(xk1);for(i=0;i<n;i++)if((fabs(g2[i])>=ac)&&(fabs(g2[i]-g1[i])>=ac)) {ib=ib+1;}if(ib==0) { xx=xk1; break; }fi=*ft;if(k==n-1){ int j;xk=xk1;for(i=0;i<n;i++)for(j=0;j<n;j++){h[i][j]=0;if(j==i) h[i][j]=1;}g1=g2; k=-1;}else{int j;double a1=0,a2=0;for(i=0;i<n;i++){dg[i]=g2[i]-g1[i];dx[i]=xk1[i]-xk[i];}for(i=0;i<n;i++){int j;u[i]=0;v[i]=0;for(j=0;j<n;j++){u[i]=u[i]+dg[j]*h[j][i];v[i]=v[i]+dg[j]*h[i][j];}for(j=0;j<n;j++){a1+=dx[j]*dg[j];a2+=v[j]*dg[j];}if(fabs(a1)!=0){a2=1+a2/a1;for(i=0;i<n;i++)for(j=0;j<n;j++)h[i][j]+=(a2*dx[i]*dx[j]-v[i]*dx[j]-dx[i]*u[j])/a1;}xk=xk1; g1=g2;}}if(*ft>fi) { *ft=fi; xx=xk;}xk=x0;return xx;}void main (){int k;double *xx,f;double xk[n]={1,1};xx=bfgs(xk);f=fny(xx);printf("\n\nThe Optimal Design Result Is:\n");for(k=0;k<n;k++){printf("\n\tx[%d]*=%f",k+1,xx[k]);}printf("\n\tf*=%f",f);getch();}。

相关文档
最新文档