script for a Function
显示 更早的评论
Hello,
I have a function
y = 5 + 2*a - 3*b + 8*c + a*b
where a,b,c are variables such that: the values of
a = 4,6,8
b = 12,16,18
c = 1,3,9
How to write a script defining this function to used by an optimizing algorithm
1 个评论
Walter Roberson
2017-4-24
Is the question which combination of values of the variables gives the lowest result?
回答(1 个)
Walter Roberson
2017-4-24
0 个投票
Vectorize the expression of the equation.
Create grids of the permitted values using ndgrid or meshgrid .
Use the grid of values in the expression.
min() or max() to find the optimal result.
2 个评论
Ahmed Elsadek
2017-4-24
Walter Roberson
2017-4-25
Supposing that y is a function handle that is not necessarily vectorized:
function [fval, best_a, best_b, best_c] = discrete_nonlin_optimize(y, a, b, c)
[A, B, C] = ndgrid(a, b, c);
values = arrayfun(y, A, B, C);
[fval, idx] = min(values);
best_a = A(idx);
best_b = B(idx);
best_c = C(idx);
In the special case that y is known to be vectorized,
function [fval, best_a, best_b, best_c] = discrete_optimize(y, a, b, c)
[A, B, C] = ndgrid(a, b, c);
values = y(A, B, C);
[fval, idx] = min(values);
best_a = A(idx);
best_b = B(idx);
best_c = C(idx);
This would be more efficient than the arrayfun version.
If your a, b, and c are quite large, you could run out of memory forming A, B, C. In that case you would have to change strategies, such as using ga() with integer constraints.
类别
在 帮助中心 和 File Exchange 中查找有关 Solver Outputs and Iterative Display 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!