Here is one approach. I have not tested it so there might be unforseen hitches. I'll refer to your matrices as matrixA, matrixB1, and matrixB2 respectively.
Define
minEig[mat1:{{_Real..}..},mat2:{{_Real..}..}] := Min[Eigenvalues[mat1-mat2]] newB = Array[b, Dimensions[a]]; obj = Trace[matrixA.newB]; FindMinimum[{obj, minEig[newB,matrixB1]>=0, minEig[newB,matrixB2]>=0}, Flatten[newB]] I'd be curious to find out if this actually works...
--- edit ---
Okay, I finally got back to this one. First thing to note is that, like every other Matheamtica programmer on the planet doing linear algebra, I managed to mix Trace for Tr. Okay, on to the chase.
Here is the basic input for the example provided in a comment to the original post.
matA = {{1, I}, {-I, 2}}; matB1 = {{1/2, 1/2 (I + Sqrt[3])}, {1/2 (-I + Sqrt[3]), -1}}; matB2 = {{1, 1/2 (-I - Sqrt[3])}, {1/2 (I - Sqrt[3]), -1}}; We set up our variables and result matrix.
n = Length[matA]; matX = Array[x, {n, n}]; matY = Array[y, {n, n}]; Do[matX[[i, j]] = matX[[j, i]]; matY[[i, j]] = -matY[[j, i]]; , {i, 2, n}, {j, 1, i - 1}]; Do[matY[[i, i]] = 0, {i, n}]; matB = matX + I*matY; vars = Variables[{matX, matY}]; Now we need an objective function and something to handle the (matrix) nonnegativity constraints.
obj = Expand[Tr[matA.matB]]; minEig[mat1 : {{_?NumberQ ..} ..}, mat2 : {{_?NumberQ ..} ..}] := Min[Eigenvalues[mat1 - mat2]] We're off to the races.
FindMinimum[{obj, minEig[matB, matB1] >= 0, minEig[matB, matB2] >= 0}, vars] (* Out[199]= {0.886000815253, {x[1, 1] -> 2.53487711894, x[1, 2] -> 0.30408162278, x[2, 2] -> -0.0636708567376, y[1, 2] -> -0.760767295104}} *) I do not know how good a result this is, but at least it might provide a start in terms of coding something useful for the task at hand.
--- end edit ---