我有一个约束函数,它调用另一个函数(inverse_kinematics)来计算一些约束,如果不满足c(1)和c(2),inverse_kinematics()会给出错误,我怎样才能确保c(1) )在调用inverse_kinematics()函数之前,是否满足c和(2)?我可以通过在约束函数中使用if条件来解决它吗?下面是我的优化函数的代码,
function [c, ceq] = simple_constraint(l1,l2,l3)
c(1) = l3^2 + 200*l3*cos(30) + 10000 - (l1 + l2)^2;
c(2) = (100- l3*cos(30))^2 + (100*sin(30))^2 - (l1-l2)^2;
thetas = inverse_kinematics(l1,l2,l3); % Gives error when c(1) and c(2) are not satisfied
c(3) = thetas(4,1) - 160;
c(4) = thetas(4,2) - 160;
c(5) = thetas(4,3) - 160;
c(6) = 20 - thetas(4,1);
c(7) = 20 - thetas(4,2);
c(8) = 20 - thetas(4,3);
c(9) = thetas(5,1) - 340;
c(10) = thetas(5,2) - 340;
c(11) = thetas(5,3) - 340;
c(12) = 200 - thetas(5,1);
c(13) = 200 - thetas(5,2);
c(14) = 200 - thetas(5,3);
c(15) = thetas(6,1) - 340;
c(16) = thetas(6,2) - 340;
c(17) = thetas(6,3) - 340;
c(18) = 200 - thetas(6,1);
c(19) = 200 - thetas(6,2);
c(20) = 200 - thetas(6,3);
ceq = [];
end
提前致谢!
答案 0 :(得分:0)
您可以使用try
和catch
例如
c(1) = l3^2 + 200*l3*cos(30) + 10000 - (l1 + l2)^2;
c(2) = (100- l3*cos(30))^2 + (100*sin(30))^2 - (l1-l2)^2;
try
thetas = inverse_kinematics(l1,l2,l3);
catch
warning('C1 and C2 is wrong'); % Or you can change any parameter here
end