Как я могу использовать переменную оптимизации для определения математической функции? - PullRequest
0 голосов
/ 19 марта 2019

У меня есть optimvar, открытие, которое определяет три других параметра с помощью базовой арифметики.

opening = optimvar('opening','LowerBound', -30, 'UpperBound', 30);
opening_zero_geo_def = -(e+temp_thickness)/2;
geo_def_des_load = -opening + opening_zero_geo_def;
geo_def_rebound = geo_def_des_load - rebound;
geo_def_jounce = geo_def_des_load + m_2_m_clear;
po_k = (design_load/spring_rate)+geo_def_des_load;
po_kl = po_k/spring_length;

Два параметра, geo_def_jounce и geo_def_rebound, используются для формирования домена.

 h = .1
 travel = geo_def_rebound:h:geo_def_jounce;

Цель состоит в том, чтобы использовать po_kl и еще один параметр для выбора функции, через которую будут обрабатываться вейлы.

Например,

if po_kl is close to .7
     rate = .5*travel^3 
 if po_kl is close to .3 
     rate = .1*travel^3 + .4*travel^2
(pseudo code)

Затем к скорости применяется полиномиальное соответствие, и рассчитывается среднеквадратичная ошибка соответствия, а RMSE является целью минимизации.

Мой вопрос: как это сделать?Я попытался использовать целочисленный optimvar в качестве индекса, как это было предложено Аланом Вейссом (https://www.mathworks.com/matlabcentral/answers/374059-how-can-i-set-an-optimization-variable-to-be-an-element-of-a-set-categorical), но это не работает, поскольку MATLAB выдает ошибку, что optimvars нельзя использовать в качестве индексов.

I 'Мы также пытались просто передать все, не считая, что это - Optimvar, и это тоже не работает, потому что Optimvar не может использоваться как условный оператор.

Я думаю, что это может быть нелинейным, и тогда я 'Придется подход, основанный на решателе, но я не уверен.

...