變度量法演算法(DFP)求解無約束問題

2021-10-02 21:25:54 字數 3217 閱讀 1317

%

%初始化程式

function searchdfp()

clear

clcsyms x1 x2

format rat

eps=0.001; %精度要求

k=1;

n=10;%設定最大迭代次數、

x=zeros(n,2);

% x(1,:)=[1 1];

%設定初始迭代點

x(1,:)=input('please input initial point matrix:');

d=zeros(n,2);

dfx1=zeros(n,2);%一階導數值fx

a=zeros(2,2,n);%二階導數矩陣a

% beta=zeros(n,1);

alpha=zeros(n,1);%搜尋步長

v=ndfx(x1,x2);%一階導數

z1=ndfx2(x1,x2);%二階導數

h=zeros(2,2,n);%置初始矩陣

h(:,:,1)=eye(2,2);%初始化為單位矩陣

s=zeros(n,2);

y=zeros(n,2);

for i=1:n

f=subs(v,x1,x(i,1));

dfx1(i,:)=subs(f,x2,x(i,2));%此處計算一階導數的值

%此處精度設定要慎重

% m=sqrt( dfx1(i,1)^2+dfx1(i,2)^2); %取向量長度

m=vectorlength(dfx1(i,:));

if( mbreak;%程式終止

endz2=subs(z1,x1,x(i,1));

% a=subs(z2,x2,x(i,2));

a(:,:,i)=subs(z2,x2,x(i,2));

%dfp 核心演算法

%------------------------------------

g=dfx1(i,:);%

g=a(:,:,i);

if(i==1)

d(i,:)=-h(:,:,i)*dfx1(i,:)';

else

%第二輪迴圈

k=i-1;

s(k,:)=x(i,:)-x(i-1,:);

y(k,:)=dfx1(i,:)-dfx1(i-1,:);

t1=y(k,:)*h(:,:,k)*y(k,:)';

t2=s(k,:)*y(k,:)';

m1=h(:,:,k)*y(k,:)'*y(k,:)*h(:,:,k);

m2=s(k,:)'*s(k,:);

h(:,:,i)=h(:,:,i-1)-m1/t1+m2/t2;

m3=-h(:,:,i)*dfx1(i,:)'; %小心奇異矩陣

d(i,:)=m3';

endalpha(i)=-d(i,:)*g'/(d(i,:)*g*d(i,:)');

x(i+1,:)=x(i,:)+alpha(i)*d(i,:) ; %第一輪迴圈

%bfgs 核心演算法

%------------------------------------

%第一輪迴圈

%%------------------------------------

%fr 核心演算法

%------------------------------------

%%------------------------------------

%end

disp('the result is:')

% d,x,fx,a

d=d(1:i,:)

x=x(1:i,:)

dfx1=dfx1(1:i,:)

a=a(:,:,1:i)

alpha=alpha(1:i,:)

h=h(:,:,1:i)

% beta=beta(1:i,:)

fprintf('程式嘗試迭代次數:%d\n',i)

fprintf('最優解:%f ,%f\n',x(i,:))

fprintf('最優目標函式值:y=%.3f\n',nfx(x(i,1),x(i,2)))

endfunction y= nfx( x1,x2 )

%untitled8 此處顯示有關此函式的摘要

% 此處顯示詳細說明

%目標函式

y=2*x1^2-2*x1*x2+x2^2+2*x1-2*x2;

%% y=3*x1*x1/2+x2*x2/2-x1*x2-2*x1;

% y=(x1^2)/3+ exp(x2);%目標函式,要避免導函式分母除0的情況出現。

endfunction y=ndfx(x1,x2)

y(1)=diff(nfx(x1,x2),x1);

y(2)=diff(nfx(x1,x2),x2); %對目標函式取一階偏微分

end

function y=ndfx2(x1,x2)

%z=diff(nfx(x1,x2),x1)+diff(nfx(x1,x2),x2); %對目標函式取二階偏微分

syms y

% y=zeros(2,2);

% sym(y)

% z=diff((nfx(x1,x2)),x1);

% y2=diff((nfx(x1,x2)),x2);

z=ndfx(x1,x2);

y(1,1)=diff(z(1),x1);%二階

y(1,2)=diff(z(1),x2);%二階

y(2,1)=diff(z(2),x1);%二階

y(2,2)=diff(z(2),x2);%二階

% y=[diff(nfx(x1,x2),x1,2),diff(y1,x2);diff(y2,x1),diff(nfx(x1,x2),x2,2)];

% y=[diff(z(1),x1),diff(z(1),x2);diff(z(2),x1), diff(z(2),x2)];%構造二階導數矩陣

y=[y(1,1),y(1,2);y(2,1),y(2,2)];

end

%function y=vectorlength(x)

n=length(x);

sum=0;

for i=1:n

sum=sum+x(i)*x(i);

endy=sqrt(sum);

end

割線法求解過程 幾種求解變力做功的方式

你好,我是方山。功的計算,在高中物理中經常涉及 功的計算公式 只適用於恒力做功的情況。而對於變力做功,則沒有乙個固定公式可用,但可以通過多種方法來求變力做功,如平均力法 圖象法 微元法 等效法,本篇文章就來詳細講解一下關於變力做功的方法。01 平均力 求解 在求解變力做功時,若物體受到的力方向不變,...

一維無約束優化演算法 進退法

function minx,maxx minjt f,x0,h0 進退法求極值區間 2011 5 14 目標函式 f 初始點x0 初始步長h0 format long x1 x0 k 0 h h0 while 1 x4 x1 h k k 1 f4 subs f,findsym f x4 f1 sub...

割線法求解過程 問題求解與演算法

一 問題與問題求解 1.人類問題求解的思維過程 一般思維過程 問題分析 推出假設 檢驗假設 2.領域問題及形式化描述 2.1問題形式化表示 要素 現實 目標 問題 現實,目標 題解 目標 現實 a1,a2,an 2.2問題歸約表示 對問題歸納和簡化,轉化成為簡單問題 要素 目標 算子集 基元問題集 ...