%
%初始化程式
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問題歸約表示 對問題歸納和簡化,轉化成為簡單問題 要素 目標 算子集 基元問題集 ...