首页 > 编程知识 正文

matlab求二元函数的最小值,matlab数据降维

时间:2023-05-03 16:59:20 阅读:137064 作者:4221

算法原理

待办事项

矩阵代码

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} );

结束

结束

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。