Optimize cost function to obtain optimal value of the optimization variable.
20 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Walter Roberson
2022-10-3
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 个评论
Walter Roberson
2022-10-3
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
2022-10-3
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Get Started with Optimization Toolbox 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!