Gradient of a cell array with optimizer

조회 수: 1 (최근 30일)
Spyros Polychronopoulos
Spyros Polychronopoulos 2017년 12월 15일
편집: Spyros Polychronopoulos 2017년 12월 15일
Hi everyone, I have a function with various variables z, as can be seen in the example below. I would like to take the gradient in x,y (coordinates) and then use an optimizer to get 1000 z values to minimize the function. The problem is that gradient function does not work with cell arrays. If I try storing the function in symbolic matrix then simulated annealing doesn't work cause only there is only one z.
Cells approach example:
A=rand(10^3,1);
for k2=1:10^3
a{k2}=@(z) z*A(k2);
end
%preparing the array for the gradient
l=1;
for k3=1:10
for k4=1:10
for k5=1:10
q2(k3).p{k4,k5}=@(z) a{l}(z);
l=l+1;
end
end
end
clear k1 k2 k3 k4 k5 l
% now I want to do what I have done with the matrix above but I have functions this returns 1 value so doesn't work
for k1=1:10
[part_x2{k1}.p,part_y2{k1}.p]=@(z) (cellfun(@gradient,q2(k1)));
end
%this doesn't work either
for k1=1:10^3
[part_x2{k1}.p,part_y2{k1}.p]=arrayfun(@(z) gradient(q2(k1)));
end
Symbolic matrix approach example, this does work but then the optimizer doesn't work:
A=rand(2,2);
syms x
f = sin(x) * A;
for k1=1:2
for k2=1:2
F(k1,k2)=gradient(f(k1,k2),x);
end
end
% now the optimizer doesn't work
fun=F(1,:);
z0 = zeros(length(A(1,:)),1);
LB(1:length(A(1,:)),1) = -2; % LB - lower bound vector or array, must be the same size as z0
UB(1:length(A(1,:)),1)= 2; % UB - upper bound vector or array, must be the same size as z0
[z_ref,P_T]=simulannealbnd(fun,z0,LB,UB); %simulated annealing

답변 (0개)

카테고리

Help CenterFile Exchange에서 Simulated Annealing에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by