Optimize cost function to obtain optimal value of the optimization variable.
20 views (last 30 days)
Show older comments
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 Comments
Accepted Answer
Walter Roberson
on 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 Comments
Walter Roberson
on 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
on 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
More Answers (0)
See Also
Categories
Find more on Get Started with Optimization Toolbox 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!