script for a Function

3 次查看(过去 30 天)
Ahmed Elsadek
Ahmed Elsadek 2017-4-24
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
Walter Roberson 2017-4-24
Is the question which combination of values of the variables gives the lowest result?

请先登录,再进行评论。

回答(1 个)

Walter Roberson
Walter Roberson 2017-4-24
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
Ahmed Elsadek 2017-4-24
Thank you for feedback I just want to define the function to be used by another code. I want Matlab to know that I have a function of one dependent variable (y) and three independent ones (a,b,c) and each of a,b and c have certain values only (the ones that I mentioned in my original question) this script will be saved to be used by another code.
Walter Roberson
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.

请先登录,再进行评论。

类别

Help CenterFile 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!

Translated by