Optimize cost function to obtain optimal value of the optimization variable.
15 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
The problem is to find a and b such that the cost function
is minimized. The cost function
is defined as,
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143125/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143125/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143185/image.png)
The dynamical equations are:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143190/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143195/image.png)
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/1143210/image.png)
I tried to use the ode45 to solve the the dynamical equations but was unable to solve using the ode45 as it has a and b also as variables, which are needed to optimize the cost function. Can someone help to solve the equations by ode45 and minimize the cost function at the same time? I am trying to use fminsearch but how to use it?
0 commentaires
Réponse acceptée
Walter Roberson
le 3 Oct 2022
Create a function that accepts a and b and uses ode45() to run the system to tspan 10. Return the values of y1(end) and y2(end) for those particular a and b
Now write a caller to that function that accepts a vector of two values, a and b, runs the function mentioned above, calculates C and returns the value.
Now use fminunc() or fmincon() on that second function. The vector of coordinates that minimizes the function will be the a and b values you are looking for.
3 commentaires
Walter Roberson
le 3 Oct 2022
init_ab = [0 1];
best_ab = fminunc(@cost_ab, init_ab);
a = best_ab(1); b = best_ab(2);
function cost = cost_ab(ab)
[t,y]=ode45(@(t,y) ques1(t,y,ab(1),ab(2)), [0 10], [1,2]');
cost = (y(end,1) - 1500).^2 + (y(end,2) - pi/2).^2;
end
Torsten
le 3 Oct 2022
init_ab = [0 1];
[best_ab,cost] = fminunc(@cost_ab, init_ab)
a = best_ab(1); b = best_ab(2);
function cost = cost_ab(ab)
ques1 = @(t,y)[cos(ab(1)+ab(2)*t)-sin(y(2));(sin(ab(1)+ab(2)*t)-cos(y(2)))/y(1)];
[t,y]=ode45(ques1, [0 10], [1,2]');
cost = (y(end,1) - 1500).^2 + (y(end,2) - pi/2).^2;
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Get Started with Optimization Toolbox dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!