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); |
---|