非线性最优化算法(一维搜索Fabonacci、梯度法)

主要解决方法:
(1)试探法(“成功—失败”,斐波那契法, 0.618 法等);
(2)插值法(抛物线插值法,三次插值法等);
(3)微积分中的求根法(切线法,二分法等)。

无约束问题的解法:

  • 解析法
    • 梯度法(最速下降法)
    • Newton法
    • 变尺度法(拟牛顿法)
  • 直接法
    • Powell法

一维搜索——斐波那契法

%% 测试用例
interval = [-1 3];
delta = 0.32;
% f = @(x)x^2 - x + 2; % 直接定义f(x)函数
f = @fx; % fx函数作为参数传递
[xk,xx,xresult] = fabnacci(f,interval,delta)

%% 定义一个函数,另存为fx.m文件
function ff = fx(x)
ff = x^2 - x + 2
end

%% fabonacci.m
function [k,x,result] = fabnacci(f,interval,delta)
a = interval(1);
b = interval(2);
F = [1 1]; % 斐波那契数列的第1和2项
k=1;n=2;
% 生成斐波那契数列
while (b-a)/F(n) > delta
    n = n+1;
    F(n) = F(n-1)+F(n-2);    
end

% 搜索算法
t(1)=a+F(n-1)/F(n)*(b-a);
t(2)=b+F(n-2)/F(n)*(a-b); % t(2)<t(1)
while k < n-1
    f1 = f(t(1)); f2=f(t(2));
    if f1<f2 % a<t(2)<t(1)<b,最小值留在较小f所在的那个子区间,即[t(2),b]
        a=t(2);t(2)=t(1);t(1)=a+F(n-1-k)/F(n-k)*(b-a);
    else
        b=t(1);t(1)=t(2);t(2)=b+F(n-1-k)/F(n-k)*(a-b);
    end
    k = k+1;
end
x = (a+b)/2;
result = f(x);
end

梯度下降算法
在这里插入图片描述

测试函数以及梯度

% detaf.m
function [f,df] = detaf(x)
f = x(1)^2+25*x(2)^2;
df = [2*x(1);50*x(2)];
end

主体函数(梯度下降)

% zuisu.m
clc
x=[2;2];
[f0,g] = detaf(x);
while norm(g) >0.000001 % norm(向量)返回向量元素平方和的平方根,此处指梯度变化量接近0时停止迭代
    p = -g/norm(g); %负梯度方向,单位化
    t = 1.0;
    f = detaf(x+t*p);
    while f>f0
        t = t/2;
        f = detaf(x+t*p);
    end
    x = x+t*p;
    [f0,g] = detaf(x);
end
x,f0
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值