我有一个开放变量,可以通过基本算术确定其他三个参数。
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是最小化目标。
我的问题是如何做到这一点。我已经尝试按照Alan Weiss(https://www.mathworks.com/matlabcentral/answers/374059-how-can-i-set-an-optimization-variable-to-be-an-element-of-a-set-categorical)的建议使用整数优化变量作为索引,但这无法正常工作,因为MATLAB给出了一个错误,即优化变量不能用作索引。
我还尝试过仅传递所有内容,而不考虑它是一个optimvar,这也不起作用,因为optimvar不能用作条件语句。
我认为这可能是非线性的,然后我将不得不采用基于求解器的方法,但我不确定。