⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 onedimensionalsearch.asv

📁 对二杆桁架静力分析
💻 ASV
字号:
function [x_star,f_star]=OneDimensionalSearch(alpha,method,eps)
%一维搜索计算程序
%x_star,f_star--------- 最优解
%alpha----------------- 对于牛顿-芮弗逊法为初始点,对于弦位法和0.618法
%                       为区间的上下界(一个只有2个元素的数组)
%method-----------------求解方法:=1,牛顿-芮弗逊法;=2,弦位法;=3,0.618法。
%eps--------------------解的收敛精度

%该函数可以直接引用以下函数:
%f=fun(x) --------------目标函数
%g1=grad1(x)------------一阶导数
%g2=grad2(x)------------二阶导数
if nargin<3 
    eps=1.0e-6;
end
%以下为求解部分
switch method
    case 1
        for i=1:200
            g1=grad1(alpha);
            g2=grad2(alpha);
            x_star=alpha-g1/g2;
            if abs(x_star-alpha)<=eps
                break;
            else
                alpha=x_star;
            end
        end
 
        f_star=fun(x_star);
    case 2
            g(1)=grad1(alpha(1));
            g(2)=grad1(alpha(2));

        for i=1:100
            rho=g(2)/(g2-g1);
            alpha(3)=alpha(2)-rho*(alpha(2)-alpha(1));
            g3=grad1(alpha(3));
            if g3<0
                alpha(1)=alpha(3);
            else
                alpha(2)=alpha(3);
            end
            
            if (alpha(2)-alpha(1))<eps
                break
            end                
        end
    x_star=(alpha(2)+alpha(1))/2;
    f_star=fun(x_star);
%  %for k=1:100
%     % alpha(k+2)=alpha(k+1)-grad1(alpha(k+1))./(grad1(alpha(k+1))-g1(k)).*(alpha(k+1)-alpha(k));
%      %if abs(alpha(k+2))<eps
%          break
%      end
%  end
    case 3
        a=alpha(1);
        b=alpha(2);
        x=a+0.382*(b-a);
        y=a+0.618*(b-a);
        q1=fun(x);
        q2=fun(y);
        while  abs(x-a)>eps
            if q1<q2
                b=y;
            else
                a=x;
            end
            x=a+0.382*(b-a);
            y=a+0.618*(b-a);
            q1=fun(x);
            q2=fun(y);
        end
        x_star=x
        f_star=q1
end
 
        

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -