Optimize cost function to obtain optimal value of the optimization variable.
15 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Yokuna
am 3 Okt. 2022
Kommentiert: Torsten
am 3 Okt. 2022
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 Kommentare
Akzeptierte Antwort
Walter Roberson
am 3 Okt. 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 Kommentare
Walter Roberson
am 3 Okt. 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
am 3 Okt. 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
Weitere Antworten (0)
Siehe auch
Kategorien
Mehr zu Get Started with Optimization Toolbox finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!