Alternate way of defining given function using function handle for fmincon

2 views (last 30 days)
I have an objective function which is of the form J = where C is a matrix of arbitrary constants which I have to determine along with 8 other arbitrary constants in the matrices A and B which appear in constraints and are known scalar matrices. I defined this objective function in MATLAB after evaluating the 4 product terms as follows-
fun =@(x) (x(9)+x(10)+x(11))^2+(x(9)+x(10)-x(11))^2+(x(9)-x(10)+x(12))^2+(x(9)-x(10)-x(12))^2;
where x(9) to x(12) are the 4 arbitrary constants in the matrix C and x(1) to x(8) are the 8 arbitrary constatnts in the matrices A and B. Then after setting
x0 = zeros(1,12);
and writing the constraints in terms of x(1) to x(8), I got all the 12 arbitrary constants x(1) to x(12) using fmincon. Now what I want is to write this objective function without evaluating each term. Is there any way to do the same?
  2 Comments
Saurabh Madankar
Saurabh Madankar on 18 Feb 2022
I further reduced this as
fun =@(x) ([x(9:12)]*h(1))^2 + ([x(9:12)]*h(2))^2 + ([x(9:12)]*h(3))^2 + ([x(9:12)]*h(4))^2;
Now only thing thats remaining is instead of writing these four terms, how can I write this as summation of a single term?

Sign in to comment.

Accepted Answer

Matt J
Matt J on 18 Feb 2022
Edited: Matt J on 18 Feb 2022
Gather the into a 4x4 matrix H and A,B,C into an unknown 4x3 matrix X. Then write the problem as,
%X=[A,B,C]
%H=[h1,h2,h3,h4]
fun=@(X) norm(X(:,3).'*H).^2;
X0=zeros(4,3);
fmincon(fun,X0,Aineq,bineq,Aeq,beq,lb,ub,@nonlcon,opts)
function [c,ceq]=nonlcon(X)
A=X(:,1); B=X(:,2); C=X(:,3); %unpack
c=_____
ceq=_____
end

More Answers (0)

Categories

Find more on Operating on Diagonal Matrices in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!