[37] | 1 | function test_gp_gpposybeam |
---|
| 2 | |
---|
| 3 | N = 8; |
---|
| 4 | w = sdpvar(N,1); |
---|
| 5 | h = sdpvar(N,1); |
---|
| 6 | |
---|
| 7 | % constants |
---|
| 8 | wmin = .1; wmax = 100; |
---|
| 9 | hmin = .1; hmax = 6; |
---|
| 10 | Smin = 1/5; Smax = 5; |
---|
| 11 | sigma_max = 1; |
---|
| 12 | ymax = 10; |
---|
| 13 | E = 1; F = 1; |
---|
| 14 | |
---|
| 15 | % objective is the total volume of the beam |
---|
| 16 | % obj = sum of (widths*heights*lengths) over each section |
---|
| 17 | % (recall that the length of each segment is set to be 1) |
---|
| 18 | obj = w'*h; |
---|
| 19 | |
---|
| 20 | % recursive formulation |
---|
| 21 | v = sdpvar(N+1,1); y = sdpvar(N+1,1); |
---|
| 22 | v(N+1,1) = 0; y(N+1,1) = 0; |
---|
| 23 | for i = N:-1:1 |
---|
| 24 | disp(['Processing recursion number: ' num2str(i)]) |
---|
| 25 | v(i) = 12*(i-1/2)*F/(E*w(i)*h(i)^3) + v(i+1); |
---|
| 26 | y(i) = 6*(i-1/3)*F/(E*w(i)*h(i)^3) + v(i+1) + y(i+1); |
---|
| 27 | end |
---|
| 28 | |
---|
| 29 | % constraint set |
---|
| 30 | constr = [ ... |
---|
| 31 | wmin*ones(N,1) <= w; w <= wmax*ones(N,1); |
---|
| 32 | hmin*ones(N,1) <= h; h <= hmax*ones(N,1); |
---|
| 33 | Smin*ones(N,1) <= h./w; h./w <= Smax*ones(N,1); |
---|
| 34 | 6*F*[1:N]'./(w.*(h.^2)) <= sigma_max*ones(N,1); |
---|
| 35 | y(1) <= ymax; |
---|
| 36 | ]; |
---|
| 37 | |
---|
| 38 | % solve GP and compute the optimal volume |
---|
| 39 | sol = solvesdp(constr,obj) |
---|
| 40 | |
---|
| 41 | mbg_asserttolequal(sol.problem,0); |
---|
| 42 | |
---|
| 43 | mbg_asserttolequal(double(obj),42.39654132455499,1e-5); |
---|