最优化进退法c语言编程,进退法、0.618法、Powell法、罚函数法的程序设计,急!!...
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法、罚函数法的程序设计,急!!...相关推荐
- 鲍威尔方法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 ...
- c语言编程:vc++6.0入门教程及习题_百度文库,C语言编程:vc++6.0入门教程及习题.doc...
C语言编程:vc++6.0入门教程及习题.doc 下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览.不比对内容而直接下载带来的问题本站不予受理. 2.下载的文档,不会出现我们的网址 ...
- 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) ...
- C语言中怎么用循环统计买法,C语言入门谭浩强版简单选择法冒泡法用数组和for循环进行学生成绩简单统计处理...
C语言入门谭浩强版 简单选择法排序 冒泡法排序 用数组和for循环进行学生成绩简单统计处理 例如:求个人平均分 学科平均分 单科最高分等 简单选择法 #include #define N 10 voi ...
- c语言编程计算原子态密度,准静态C_V法测量硅表面态密度分布及数据处理.pdf
准静态 C V 法测量硅表面态密度分布及数据处理 钱敏1 刘蓓1 辛煜2 11 苏州大学 电子信息学院 微电子系 江苏 苏州 215021 21 苏州大学 物理科学与技术学院 江苏 苏州 215006 ...
- 弦截法c语言求方程XeX-1=0的解,编程用弦截法求方程 f(x)=3x^3-5x^2+16x-60=0的根
满意答案 w6297281 2013.08.26 采纳率:52% 等级:12 已帮助:8785人 希望下面的资料对你有帮助: 弦截法求方程的根是一种解方程得基本方法,在计算机编程中常用.他的思路 ...
- 数值分析c语言编程辛普森公式,数值计算方法:矩形法、梯形法与辛普森公式...
在数值分析中,数值积分是计算定积分数值的方法和理论.在数学分析中,给定函数的定积分的计算不总是可行的.许多定积分不能用已知的积分公式得到精确值.数值积分是利用黎曼积分和积分中值等数学定义和定理,用数值 ...
- 鲍威尔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)+( ...
- 弦截法c语言程序,高数介质定理——弦截法求根代码实践(C语言)
在高等数学中,我们一开始接触概念时就接受了ε-δ(epsilon-delta)语言的洗礼,但即使到课程的结束,许多人依然会对各种抽象的数学符号.定理证明感到无所适从,我也不例外,尽管在写这篇博客以前已 ...
- c语言编程加密和解密,请问有学长做过这个程序设计的吗?C语言写加密解密问题,跪求代码!...
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 加解密处理 1.系统的基本功能 编写一个对文件(由数字或字母组成)进行加密解密的程序.可以将所需要的内容(整个文件或者输入的一行字符)加密,也可以将存储的 ...
最新文章
- 上传代码到码云(第一次)
- curl模拟多线程抓取网页(优化)
- 223. Rectangle Area
- PPT 下载 | 神策数据孙文亮:客户全生命周期管理从方法到实践全解析
- python交互模式什么意思_Python中的交互模式是什么
- 洛谷 P1352 没有上司的舞会【树形DP/邻接链表+链式前向星】
- FD.io VPP用户文档:会话层架构与VPP应用
- [Math Processing Error] 问题的解决(F5刷新页面与 Ctrl/Shift + F5 刷新页面的区别)
- sql 视图不排序_算法工程师SQL进阶:神奇的自连接与子查询
- mysql auto_inc_MySQL innodb_autoinc_lock_mode 详解
- 学生信息表 -通过选择年级和班级得到详细的学生信息名单
- TOM邮箱容量满了收发不了邮件?你应该快速做到这些事
- OBS 卡顿原因 及 优化策略
- matlab 使用fprintf打印度数符号
- Linux初学者如何安装jdk,tomcat,mysql和svn
- 360极速浏览器显示密码
- 键盘输入不正确不对应原来是这么回事
- [经济管理]《余世维-有效沟通II》VOB AVI双版本下载及我的笔记
- 2022近视矫正展,护眼产品展,中国爱眼教育大会,验光设备展
- s7epaapi.dll 64位下载 附找不到文件的修复教程