How can I solve an Optimization problem?
Afficher commentaires plus anciens
Hello. I have not used the optimization toolbox and I need your help. I have 3 functions that depends on λ, and an function μ that depends on the 3 previous functions (so μ also depends on λ). I need to find the minimum value of μ changing λ: how can I make it? what function should I consider? Thanks in advance.
syms lambda;
c= sqrt((-(d^2)*(cosd(psi)-1))/(1+cosd(fi-psi)+(lambda^2)*(1-cosd(fi-psi))));
a= lambda*c;
b= sqrt(((d^2)*(lambda^2)*(cosd(fi)-1)-1-cosd(fi))/((lambda^2)*(cosd(fi-psi)-1)-1-cosd(fi-psi)));
Mu_1= acosd(abs(((c^2)+(b^2)-((d-a)^2))/(2*b*c)));
2 commentaires
Abolfazl Chaman Motlagh
le 13 Déc 2021
Modifié(e) : Abolfazl Chaman Motlagh
le 13 Déc 2021
does lambda has any bound ? like an interval? because acosd hence Mu_1 become imaginary in larg numbers.
can you provide simple value for d ?
Juan Barrientos
le 13 Déc 2021
Réponses (2)
you can use fmincon, this function minimize function in a constraint problem. but only constraint here is bounds of lambda. so other fields of function are empty ([]).
i use some sample number for needed variables.
d = 1;
psi = rand * 360;
fi = rand * 360;
c=@(lambda) (sqrt((-(d^2)*(cosd(psi)-1))/(1+cosd(fi-psi)+(lambda^2)*(1-cosd(fi-psi)))));
a=@(lambda) (lambda*c(lambda));
b=@(lambda) (sqrt(((d^2)*(lambda^2)*(cosd(fi)-1)-1-cosd(fi))/((lambda^2)*(cosd(fi-psi)-1)-1-cosd(fi-psi))));
Mu_1=@(lambda) (acosd(abs(((c(lambda)^2)+(b(lambda)^2)-((d-a(lambda))^2))/(2*b(lambda)*c(lambda)))));
[Lambda_star,fval,exitflag,output]=fmincon(@(x) Mu_1(x),1,[],[],[],[],0,1);
disp(Lambda_star)
use fmincon documentation if you need more options for better convergence.it seems it reach best answer in my case : (in my code the answer changes everytime because psi and fi are random)
x = 0:1e-3:1;
for i=1:numel(x)
y(i) = Mu_1(x(i));
end
plot(x,y)
3 commentaires
Juan Barrientos
le 13 Déc 2021
Yes it is. but are you sure you wrote the equations right? because it seems it is not what you're saying. lets plot the function over lambda:
d = 100;
psi = 30;
fi = 170;
c=@(lambda) (sqrt((-(d^2)*(cosd(psi)-1))/(1+cosd(fi-psi)+(lambda^2)*(1-cosd(fi-psi)))));
a=@(lambda) (lambda*c(lambda));
b=@(lambda) (sqrt(((d^2)*(lambda^2)*(cosd(fi)-1)-1-cosd(fi))/((lambda^2)*(cosd(fi-psi)-1)-1-cosd(fi-psi))));
Mu_1=@(lambda) (acosd(abs(((c(lambda)^2)+(b(lambda)^2)-((d-a(lambda))^2))/(2*b(lambda)*c(lambda)))));
x = 0:1e-5:1;
for i=1:numel(x)
y(i) = Mu_1(x(i));
end
plot(x,y)
Juan Barrientos
le 13 Déc 2021
Juan Barrientos
le 13 Déc 2021
0 votes
3 commentaires
Torsten
le 13 Déc 2021
For lambda = 1, I get mu = 8.4711 which is smaller than your mu = 77.17.
Or do you try to maximize mu instead of minimizing as you wrote ?
Juan Barrientos
le 13 Déc 2021
Torsten
le 14 Déc 2021
Be careful with the objective function if the expression inside acosd becomes greater than 1. fminsearch will most probably stop if complex numbers are encountered during the optimization.
Catégories
En savoir plus sur Linear Least Squares dans Centre d'aide et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!


