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!