title: Get an X(std) value of efficient frontier from a given Y(mean) value with cvxopt?
body: <p>I'm trying to do portfolio optimization with cvxopt (Python), I'm able to get the efficient frontier with the following code, however, I'm not able to specify a Y value (mean or return) and get a corresponding X value (std or risk), if anyone has knowledge about this, I would be more than grateful if you can share it:</p>
  <pre><code>def optimal_portfolio(returns_vec, cov_matrix):
      n = len(returns_vec)
  
      N = 1000
      mus = [10 ** (5 * t / N - 1.0) for t in range(N)]
  
      # Convert to cvxopt matrices
      S = opt.matrix(cov_matrix)
  
      pbar = opt.matrix(returns_vec)
  
      # Create constraint matrices
      G = -opt.matrix(np.eye(n))  # negative n x n identity matrix
      h = opt.matrix(0.0, (n, 1))
      A = opt.matrix(1.0, (1, n))
      b = opt.matrix(1.0)
  
      #solvers.options[&quot;feastol&quot;] =1e-9
      # Calculate efficient frontier weights using quadratic programming
      portfolios = [solvers.qp(mu * S, -pbar, G, h, A, b)['x']
                    for mu in mus]
      ## CALCULATE RISKS AND RETURNS FOR FRONTIER
      returns = [blas.dot(pbar, x) for x in portfolios]
      risks = [np.sqrt(blas.dot(x, S * x)) for x in portfolios]
      ## CALCULATE THE 2ND DEGREE POLYNOMIAL OF THE FRONTIER CURVE
      m1 = np.polyfit(returns, risks, 2)
      x1 = np.sqrt(m1[2] / m1[0])
      # CALCULATE THE OPTIMAL PORTFOLIO
      wt = solvers.qp(opt.matrix(x1 * S), -pbar, G, h, A, b)['x']
      return np.asarray(wt), returns, risks
     
  return_vec = [0.055355,
      0.010748,
      0.041505,
      0.074884,
      0.039795,
      0.065079
  ]
  
  cov_matrix =[[ 0.005329, -0.000572, 0.003320, 0.006792, 0.001580, 0.005316],
  [-0.000572, 0.000625, 0.000606, -0.000266, -0.000107, 0.000531],
  [0.003320, 0.000606, 0.006610, 0.005421, 0.000990, 0.006852],
  [0.006792, -0.000266, 0.005421, 0.011385, 0.002617, 0.009786],
  [0.001580, -0.000107, 0.000990, 0.002617, 0.002226, 0.002360],
  [0.005316, 0.000531, 0.006852, 0.009786, 0.002360, 0.011215]]
  
  weights, returns, risks = optimal_portfolio(return_vec, cov_matrix)
  
  
  fig = plt.figure()
  plt.ylabel('Return')
  plt.xlabel('Risk')
  plt.plot(risks, returns, 'y-o')
  print(weights)
  plt.show()
  </code></pre>
  <p>I would like to find the corresponding risk value for a given return value.</p>
  <p>Thank you very much!</p>