算法原理
待办事项
矩阵代码
clc; 清除
f=@(x ) x(1).^2) x )1) x )2)3) x )2).^2; %求函数,x1,x2,x3 .
%f=@(x ) x(1).^2) x ).^2;
paraNum=2; %函数参数的个数、x1、x2、x3 .的个数
x0=[ 3,3 ]; %初始值
tol=1e-5; %反复容许度
flag=inf; %结束条件
error=[]; %函数的变化
while flag tol
p=g(f,x0,paraNum ); %列向量
f2=@(a ) f ) f(x0-a*p );
Buchang=argmin(F2; 求%步,line search:argmin function
x1=x0-buChang*p ';
flag=norm(x1-x0 );
error=[error,flag];
x0=x1;
结束
plot(0:length(error )-1,error ) ) ) ) )。
function[f_grad]=g(f,x0,paraNum ) ) ) ) ) ) )。
temp=sym('x ',[1,paraNum] );
f1=f(temp );
z=gradient(F1;
f_grad=double(subs(z,temp,x0 );
结束
function [x]=argmin(f
求%步
t=0;
options=optimset('display ',' off ' );
[x,~~]=FMInunc(f,t,options );
结束
代码问题
Matlab码运算,很费时间
最速下降法的步骤使用线性搜索,很费时间
代码改进
clc; 清除
f=@(x ) x(1).^2) x )1) x )2)3) x )2).^2; %求函数,x1,x2,x3 .
%f=@(x ) x(1).^2) x ).^2;
paraNum=2; %函数参数的个数、x1、x2、x3 .的个数
x0=[ 3,3 ]; %初始值
tol=1e-3; %反复容许度
flag=inf; %结束条件
error=[]; %函数的变化
while flag tol
% for i=1:1
p=g(f,x0,paraNum ); %列向量
ifnorm(p ) tol
buChang=0;
else
Buchang=argmin(f,x0,p,paraNum ); 求%步,line search:argmin function
结束
x1=x0-buChang.*p ';
flag=norm(x1-x0 );
error=[error,flag];
x0=x1;
结束
plot(0:length(error )-1,error ) ) ) ) )。
function[f_grad]=g(f,x0,paraNum ) ) ) ) ) ) )。
temp=sym('x ',[1,paraNum] );
f1=f(temp );
z=gradient(F1;
f_grad=double(subs(z,temp,x0 );
结束
%function[x]=argmin(f,paraNum ) ) )。
求% %步
%t=Zeros(1,paraNum );
%options=optimset('display ',' off ' );
% [x,~~]=FMInunc(f,t,options );
% end
function[x]=argmin(f,x0,p,num ) )。
求%步
% for i=1:paraNum
%syms(['x ',num2str(I ) ] );
% end
temp=sym('x ',[1,num] );
f1=f(x0-temp.*p ';
for i=1:num
TEMP(I )=diff ) F1,TEMP ) I );
结束
jeguo=solve(temp );
jieguo=struct2cell(jieguo );
x=Zeros(1,num );
for i=1:num
x(I )=double(jieguo{I} );
结束
结束