RT,《最优化方法》的题目

涉及进退法、0.618法、Powell法、罚函数法的程序设计

可用Matlab或C程序语言编程,需包含这四类算法。

实例已给出如下,编一例类似程序。实在不行,可在此实例上适当修改。

有感兴趣的,完成后可发到本人邮箱:aleiho@163.com

见回复确认后,立即加分结贴。

p.s.:谢谢,急需。19日16时之前。

一、进退法、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)

for j=1:t

if abs(h(j))

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)

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

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

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

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.

最优化进退法c语言编程,进退法、0.618法、Powell法、罚函数法的程序设计,急!!...相关推荐

  1. 鲍威尔方法c语言程序,鲍威尔法编程-powell法编程-c语言编程-c++6.0.doc

    鲍威尔法编程-powell法编程-c语言编程-c++6.0.doc include stdio.hdefine N 2float gsfloat zNfloat f;f10*z0z1-5*z0z1-5 ...

  2. c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...

    C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...

  3. 0.618法C语言编程,c语言编程题--0.618法求最小值

    c语言编程题--0.618法求最小值0 题目: 1.函数f(x)=x+10/x,初始量a=2,b=10,c=0.3 2.步骤:(1)取a1=a+0.382*(b-a),b1=b+0.618*(b-a) ...

  4. C语言中怎么用循环统计买法,C语言入门谭浩强版简单选择法冒泡法用数组和for循环进行学生成绩简单统计处理...

    C语言入门谭浩强版 简单选择法排序 冒泡法排序 用数组和for循环进行学生成绩简单统计处理 例如:求个人平均分 学科平均分 单科最高分等 简单选择法 #include #define N 10 voi ...

  5. c语言编程计算原子态密度,准静态C_V法测量硅表面态密度分布及数据处理.pdf

    准静态 C V 法测量硅表面态密度分布及数据处理 钱敏1 刘蓓1 辛煜2 11 苏州大学 电子信息学院 微电子系 江苏 苏州 215021 21 苏州大学 物理科学与技术学院 江苏 苏州 215006 ...

  6. 弦截法c语言求方程XeX-1=0的解,编程用弦截法求方程 f(x)=3x^3-5x^2+16x-60=0的根

    满意答案 w6297281 2013.08.26 采纳率:52%    等级:12 已帮助:8785人 希望下面的资料对你有帮助: 弦截法求方程的根是一种解方程得基本方法,在计算机编程中常用.他的思路 ...

  7. 数值分析c语言编程辛普森公式,数值计算方法:矩形法、梯形法与辛普森公式...

    在数值分析中,数值积分是计算定积分数值的方法和理论.在数学分析中,给定函数的定积分的计算不总是可行的.许多定积分不能用已知的积分公式得到精确值.数值积分是利用黎曼积分和积分中值等数学定义和定理,用数值 ...

  8. 鲍威尔c 语言程序,鲍威尔法编程-powell法编程 c语言编程 c++6.0

    fafu js 优化 #include #define N 2 float gs(float z[N]) { float f; //f=10*(z[0]+z[1]-5)*(z[0]+z[1]-5)+( ...

  9. 弦截法c语言程序,高数介质定理——弦截法求根代码实践(C语言)

    在高等数学中,我们一开始接触概念时就接受了ε-δ(epsilon-delta)语言的洗礼,但即使到课程的结束,许多人依然会对各种抽象的数学符号.定理证明感到无所适从,我也不例外,尽管在写这篇博客以前已 ...

  10. c语言编程加密和解密,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 加解密处理 1.系统的基本功能 编写一个对文件(由数字或字母组成)进行加密解密的程序.可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的 ...

最新文章

  1. 上传代码到码云(第一次)
  2. curl模拟多线程抓取网页(优化)
  3. 223. Rectangle Area
  4. PPT 下载 | 神策数据孙文亮:客户全生命周期管理从方法到实践全解析
  5. python交互模式什么意思_Python中的交互模式是什么
  6. 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】
  7. FD.io VPP用户文档:会话层架构与VPP应用
  8. [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
  9. sql 视图不排序_算法工程师SQL进阶:神奇的自连接与子查询
  10. mysql auto_inc_MySQL innodb_autoinc_lock_mode 详解
  11. 学生信息表 -通过选择年级和班级得到详细的学生信息名单
  12. TOM邮箱容量满了收发不了邮件?你应该快速做到这些事
  13. OBS 卡顿原因 及 优化策略
  14. matlab 使用fprintf打印度数符号
  15. Linux初学者如何安装jdk,tomcat,mysql和svn
  16. 360极速浏览器显示密码
  17. 键盘输入不正确不对应原来是这么回事
  18. [经济管理]《余世维-有效沟通II》VOB AVI双版本下载及我的笔记
  19. 2022近视矫正展,护眼产品展,中国爱眼教育大会,验光设备展
  20. s7epaapi.dll 64位下载 附找不到文件的修复教程

热门文章

  1. 入驻shopee平台后,选择哪一个站点作为首站?
  2. cocos creator后台切入切出
  3. Google IPV6 地址
  4. 李铁被传下课之际,梅西却要七拿金球奖了?这波预测没毛病
  5. 专利文件公开显示谷歌或正开发实时翻译新型虚拟键盘
  6. MySQL的系统信息函数和加密解密函数(十四)
  7. Velocity的使用
  8. js函数传参——参数与arguments对象
  9. npm connect ETIMEDOUT 报错
  10. linux chrome 缓存,Linux设置chrome缓存至内存,及开关机同步