当前位置: > 黄金>正文

黄金分割(0.618)法求解函数极值(附代码)

2023-07-18 19:08:18 互联网 未知 黄金

黄金分割(0.618)法求解函数极值(附代码)

目录

黄金分割法

迭代公式

算法步骤:

例题

C++代码:

黄金分割法也称为中外比,指把一条线段分割为两部分,使其中一部分与全长之比等于另一部分与这部分之比。其比值是一个无理数,取其前三位数字的近似值是0.618,所以也称为0.618法。

黄金分割法

                       

迭代公式

算法步骤:

step1.给定初始搜索区间和允许精度

step2.计算初始值

                               

step3.开始循环k=k+1,转step4,若则退出循环,转step7.

step4 判断,是转step5,否转step6;

step5.令

              

              

              

step6.令

              

              

              

step7.极值点为:                                                                   

                        

例题

求解函数在区间[-1,3]上的极小点,要求求解的区间精度小于0.001倍。

程序求解结果如图:

C++代码: #include #include #include //参数化输入/输出 using namespace std;double fx(double x){double fx;fx = pow(x, 2) - x + 2;return fx;}int main(){double epsilon = 0.001, f_min,tau=0.618;double a_gss= -1.0, b_gss = 3.0, f_lambda = 0, f_mu = 0;double lambda = a_gss+(1.0- tau)*(b_gss-a_gss), mu = a_gss +tau*(b_gss - a_gss);f_lambda= fx(lambda), f_mu = fx(mu);for (int i = 0; fabs(mu- lambda) >epsilon; i++){if (f_lambda < f_mu){a_gss = a_gss, b_gss = mu, mu = lambda, f_mu = f_lambda;lambda = a_gss + (1.0 - tau)*(b_gss - a_gss);f_lambda = fx(lambda);}else{a_gss = lambda, b_gss = b_gss, lambda = mu, f_lambda = f_mu;mu = a_gss + tau * (b_gss - a_gss);f_mu = fx(mu);}cout

版权声明: 本站仅提供信息存储空间服务,旨在传递更多信息,不拥有所有权,不承担相关法律责任,不代表本网赞同其观点和对其真实性负责。如因作品内容、版权和其它问题需要同本网联系的,请发送邮件至 举报,一经查实,本站将立刻删除。