Commit b13506cf authored by Dr.李's avatar Dr.李

added mean variance builder

parent 5fa76dd3
# -*- coding: utf-8 -*-
"""
Created on 2017-6-27
@author: cheng.li
"""
import numpy as np
from typing import Union
from typing import Tuple
from cvxopt import matrix
from cvxopt import solvers
solvers.options['show_progress'] = False
def mean_variance_builder(er: np.ndarray,
cov: np.ndarray,
bm: np.ndarray,
lbound: Union[np.ndarray, float],
ubound: Union[np.ndarray, float],
risk_exposure: np.ndarray,
risk_target: Tuple[np.ndarray, np.ndarray]):
lbound = lbound - bm
ubound = ubound - bm
transposed_risk_exposure = risk_exposure.T
risk_target = risk_target - transposed_risk_exposure @ bm
# set up problem for net position
n = len(er)
P = matrix(cov)
q = -matrix(er)
G1 = np.zeros((2*n, n))
h1 = np.zeros(2*n)
for i in range(n):
G1[i, i] = 1.
h1[i] = ubound[i]
G1[i+n, i] = -1.
h1[i+n] = -lbound[i]
m = len(transposed_risk_exposure)
G2 = np.concatenate([transposed_risk_exposure, -transposed_risk_exposure])
h2 = np.zeros(2*m)
for i in range(m):
h2[i] = risk_target[1][i]
h2[i+m] = -risk_target[0][i]
G = matrix(np.concatenate([G1, G2]))
h = matrix(np.concatenate([h1, h2]))
sol = solvers.qp(P, q, G, h)
return sol['status'], sol['dual objective'], np.array(sol['x']).flatten() + bm
# -*- coding: utf-8 -*-
"""
Created on 2017-6-27
@author: cheng.li
"""
import unittest
import numpy as np
from alphamind.portfolio.meanvariancebuilder import mean_variance_builder
class TestMeanVarianceBuild(unittest.TestCase):
def test_mean_variance_builder(self):
er = np.random.randint(0, 10, size=3) / 10.
cov = np.array([[0.04, 0.01, 0.02],
[0.01, 0.05, 0.03],
[0.02, 0.03, 0.06]])
ids_var = np.diag(np.random.randint(2, 5, size=3) / 100.)
cov += ids_var
bm = np.array([0.3, 0.3, 0.4])
lbound = np.array([0., 0., 0.])
ubound = np.array([0.4, 0.4, 0.5])
risk_exposure = np.array([[1., 1., 1.],
[1., 0., 1.]]).T
risk_target = (np.array([bm.sum(), 0.3]), np.array([bm.sum(), 0.7]))
status, value, x = mean_variance_builder(er, cov, bm, lbound, ubound, risk_exposure, risk_target)
self.assertTrue(status == 'optimal')
self.assertAlmostEqual(x.sum(), bm.sum())
self.assertTrue(np.all(x <= ubound + 1.e-6))
self.assertTrue(np.all(x >= lbound) - 1.e-6)
self.assertTrue(np.all(x @ risk_exposure <= risk_target[1] + 1.e-6))
self.assertTrue(np.all(x @ risk_exposure >= risk_target[0] - 1.e-6))
...@@ -62,7 +62,7 @@ ...@@ -62,7 +62,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Wall time: 948 ms\n" "Wall time: 1.18 s\n"
] ]
} }
], ],
...@@ -125,7 +125,7 @@ ...@@ -125,7 +125,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Wall time: 453 ms\n" "Wall time: 95.1 ms\n"
] ]
} }
], ],
...@@ -164,7 +164,7 @@ ...@@ -164,7 +164,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Wall time: 110 ms\n" "Wall time: 96.6 ms\n"
] ]
} }
], ],
...@@ -205,7 +205,7 @@ ...@@ -205,7 +205,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"Wall time: 68.6 ms\n" "Wall time: 40.5 ms\n"
] ]
} }
], ],
...@@ -261,9 +261,9 @@ ...@@ -261,9 +261,9 @@
"21 -8.611e+00 -8.611e+00 +2e-08 9e-10 8e-19 2e-11 2e-11 0.9360 9e-03 3 3 3 | 0 0\n", "21 -8.611e+00 -8.611e+00 +2e-08 9e-10 8e-19 2e-11 2e-11 0.9360 9e-03 3 3 3 | 0 0\n",
"\n", "\n",
"OPTIMAL (within feastol=8.6e-10, reltol=2.8e-09, abstol=2.4e-08).\n", "OPTIMAL (within feastol=8.6e-10, reltol=2.8e-09, abstol=2.4e-08).\n",
"Runtime: 1.956442 seconds.\n", "Runtime: 1.907916 seconds.\n",
"\n", "\n",
"Wall time: 2.2 s\n" "Wall time: 2.08 s\n"
] ]
}, },
{ {
...@@ -328,16 +328,16 @@ ...@@ -328,16 +328,16 @@
"13: -8.6970e+00 -8.7087e+00 1e-01 1e-04 1e-08 2e-04\n", "13: -8.6970e+00 -8.7087e+00 1e-01 1e-04 1e-08 2e-04\n",
"14: -8.6316e+00 -8.6344e+00 4e-02 3e-05 3e-09 4e-05\n", "14: -8.6316e+00 -8.6344e+00 4e-02 3e-05 3e-09 4e-05\n",
"15: -8.6130e+00 -8.6133e+00 3e-03 3e-06 3e-10 3e-06\n", "15: -8.6130e+00 -8.6133e+00 3e-03 3e-06 3e-10 3e-06\n",
"16: -8.6114e+00 -8.6114e+00 8e-05 7e-08 9e-12 9e-08\n", "16: -8.6114e+00 -8.6114e+00 8e-05 7e-08 7e-12 9e-08\n",
"17: -8.6114e+00 -8.6114e+00 8e-06 6e-09 3e-11 8e-09\n", "17: -8.6114e+00 -8.6114e+00 8e-06 6e-09 1e-11 8e-09\n",
"Optimal solution found.\n", "Optimal solution found.\n",
"Wall time: 2.28 s\n" "Wall time: 2.16 s\n"
] ]
}, },
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"-8.611395800866157" "-8.611395800843123"
] ]
}, },
"execution_count": 14, "execution_count": 14,
...@@ -358,7 +358,7 @@ ...@@ -358,7 +358,7 @@
{ {
"data": { "data": {
"text/plain": [ "text/plain": [
"('optimal', -8.611395800866157)" "('optimal', -8.611395800843123)"
] ]
}, },
"execution_count": 15, "execution_count": 15,
...@@ -382,21 +382,21 @@ ...@@ -382,21 +382,21 @@
" pcost dcost gap pres dres\n", " pcost dcost gap pres dres\n",
" 0: -3.5750e+02 -4.1776e+02 2e+04 1e+02 5e-14\n", " 0: -3.5750e+02 -4.1776e+02 2e+04 1e+02 5e-14\n",
" 1: -3.1011e+02 -2.5923e+02 1e+04 8e+01 4e-14\n", " 1: -3.1011e+02 -2.5923e+02 1e+04 8e+01 4e-14\n",
" 2: -6.7480e+01 -1.4607e+02 2e+03 1e+01 4e-14\n", " 2: -6.7480e+01 -1.4607e+02 2e+03 1e+01 5e-14\n",
" 3: -1.5291e+01 -1.3022e+02 4e+02 1e+00 1e-14\n", " 3: -1.5291e+01 -1.3022e+02 4e+02 1e+00 1e-14\n",
" 4: -8.9120e+00 -5.0845e+01 6e+01 1e-01 2e-15\n", " 4: -8.9120e+00 -5.0845e+01 6e+01 1e-01 3e-15\n",
" 5: -8.1091e+00 -1.9295e+01 1e+01 2e-02 2e-15\n", " 5: -8.1091e+00 -1.9295e+01 1e+01 2e-02 2e-15\n",
" 6: -8.1870e+00 -1.1578e+01 4e+00 5e-03 2e-15\n", " 6: -8.1870e+00 -1.1578e+01 4e+00 5e-03 2e-15\n",
" 7: -8.2484e+00 -9.7661e+00 2e+00 9e-04 1e-15\n", " 7: -8.2484e+00 -9.7661e+00 2e+00 9e-04 1e-15\n",
" 8: -8.4016e+00 -9.1567e+00 8e-01 7e-16 2e-15\n", " 8: -8.4016e+00 -9.1567e+00 8e-01 2e-16 2e-15\n",
" 9: -8.5308e+00 -8.7593e+00 2e-01 4e-16 1e-15\n", " 9: -8.5308e+00 -8.7593e+00 2e-01 2e-16 1e-15\n",
"10: -8.5717e+00 -8.6888e+00 1e-01 1e-16 2e-15\n", "10: -8.5717e+00 -8.6888e+00 1e-01 2e-16 2e-15\n",
"11: -8.6012e+00 -8.6299e+00 3e-02 6e-16 2e-15\n", "11: -8.6012e+00 -8.6299e+00 3e-02 2e-16 2e-15\n",
"12: -8.6086e+00 -8.6152e+00 7e-03 2e-15 2e-15\n", "12: -8.6086e+00 -8.6152e+00 7e-03 9e-16 1e-15\n",
"13: -8.6114e+00 -8.6114e+00 9e-05 2e-15 2e-15\n", "13: -8.6114e+00 -8.6114e+00 9e-05 1e-15 2e-15\n",
"14: -8.6114e+00 -8.6114e+00 1e-06 7e-16 2e-15\n", "14: -8.6114e+00 -8.6114e+00 1e-06 4e-16 1e-15\n",
"Optimal solution found.\n", "Optimal solution found.\n",
"Wall time: 898 ms\n" "Wall time: 789 ms\n"
] ]
} }
], ],
...@@ -523,7 +523,7 @@ ...@@ -523,7 +523,7 @@
"name": "stdout", "name": "stdout",
"output_type": "stream", "output_type": "stream",
"text": [ "text": [
"0.735152\n" "0.712124\n"
] ]
} }
], ],
...@@ -643,62 +643,62 @@ ...@@ -643,62 +643,62 @@
" <tbody>\n", " <tbody>\n",
" <tr>\n", " <tr>\n",
" <th>200</th>\n", " <th>200</th>\n",
" <td>50.551</td>\n", " <td>49.534</td>\n",
" <td>271.014</td>\n", " <td>201.142</td>\n",
" <td>63.4241</td>\n", " <td>63.4241</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>400</th>\n", " <th>400</th>\n",
" <td>398.852</td>\n", " <td>426.353</td>\n",
" <td>1213.275</td>\n", " <td>1254.889</td>\n",
" <td>157.5680</td>\n", " <td>157.5680</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>600</th>\n", " <th>600</th>\n",
" <td>1377.988</td>\n", " <td>1427.580</td>\n",
" <td>3749.239</td>\n", " <td>3833.469</td>\n",
" <td>208.7740</td>\n", " <td>208.7740</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>800</th>\n", " <th>800</th>\n",
" <td>3437.146</td>\n", " <td>3404.400</td>\n",
" <td>9118.570</td>\n", " <td>9154.496</td>\n",
" <td>436.1050</td>\n", " <td>436.1050</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1000</th>\n", " <th>1000</th>\n",
" <td>6459.141</td>\n", " <td>6363.836</td>\n",
" <td>17635.912</td>\n", " <td>17391.481</td>\n",
" <td>522.8100</td>\n", " <td>522.8100</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1200</th>\n", " <th>1200</th>\n",
" <td>12870.037</td>\n", " <td>12835.927</td>\n",
" <td>30207.671</td>\n", " <td>29585.606</td>\n",
" <td>744.1180</td>\n", " <td>744.1180</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1400</th>\n", " <th>1400</th>\n",
" <td>21711.707</td>\n", " <td>20837.407</td>\n",
" <td>48569.790</td>\n", " <td>47275.402</td>\n",
" <td>1133.8700</td>\n", " <td>1133.8700</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1600</th>\n", " <th>1600</th>\n",
" <td>26667.136</td>\n", " <td>26858.257</td>\n",
" <td>66676.783</td>\n", " <td>66219.215</td>\n",
" <td>1685.5900</td>\n", " <td>1685.5900</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>1800</th>\n", " <th>1800</th>\n",
" <td>38267.565</td>\n", " <td>37523.647</td>\n",
" <td>108751.792</td>\n", " <td>104994.916</td>\n",
" <td>1409.3600</td>\n", " <td>1409.3600</td>\n",
" </tr>\n", " </tr>\n",
" <tr>\n", " <tr>\n",
" <th>2000</th>\n", " <th>2000</th>\n",
" <td>58030.362</td>\n", " <td>57507.285</td>\n",
" <td>114277.842</td>\n", " <td>111186.259</td>\n",
" <td>3364.3300</td>\n", " <td>3364.3300</td>\n",
" </tr>\n", " </tr>\n",
" </tbody>\n", " </tbody>\n",
...@@ -708,16 +708,16 @@ ...@@ -708,16 +708,16 @@
"text/plain": [ "text/plain": [
" cvxopt cvxpy ipopt\n", " cvxopt cvxpy ipopt\n",
"Problem Scale (n) \n", "Problem Scale (n) \n",
"200 50.551 271.014 63.4241\n", "200 49.534 201.142 63.4241\n",
"400 398.852 1213.275 157.5680\n", "400 426.353 1254.889 157.5680\n",
"600 1377.988 3749.239 208.7740\n", "600 1427.580 3833.469 208.7740\n",
"800 3437.146 9118.570 436.1050\n", "800 3404.400 9154.496 436.1050\n",
"1000 6459.141 17635.912 522.8100\n", "1000 6363.836 17391.481 522.8100\n",
"1200 12870.037 30207.671 744.1180\n", "1200 12835.927 29585.606 744.1180\n",
"1400 21711.707 48569.790 1133.8700\n", "1400 20837.407 47275.402 1133.8700\n",
"1600 26667.136 66676.783 1685.5900\n", "1600 26858.257 66219.215 1685.5900\n",
"1800 38267.565 108751.792 1409.3600\n", "1800 37523.647 104994.916 1409.3600\n",
"2000 58030.362 114277.842 3364.3300" "2000 57507.285 111186.259 3364.3300"
] ]
}, },
"execution_count": 26, "execution_count": 26,
...@@ -729,6 +729,225 @@ ...@@ -729,6 +729,225 @@
"df" "df"
] ]
}, },
{
"cell_type": "code",
"execution_count": 27,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"{'dual infeasibility': 1.458726131447995e-15,\n",
" 'dual objective': -8.611392389649453,\n",
" 'dual slack': 2.1901323532949252e-08,\n",
" 'gap': 1.1402692474473834e-06,\n",
" 'iterations': 14,\n",
" 'primal infeasibility': 4.440892098500626e-16,\n",
" 'primal objective': -8.611391249380205,\n",
" 'primal slack': 5.626639017385082e-12,\n",
" 'relative gap': 1.3241405650096933e-07,\n",
" 's': <1000x1 matrix, tc='d'>,\n",
" 'status': 'optimal',\n",
" 'x': <500x1 matrix, tc='d'>,\n",
" 'y': <1x1 matrix, tc='d'>,\n",
" 'z': <1000x1 matrix, tc='d'>}"
]
},
"execution_count": 27,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"sol"
]
},
{
"cell_type": "code",
"execution_count": 30,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"array([ 3.99999999e-02, 1.52782206e-02, 2.84044580e-10,\n",
" 3.07558142e-10, 7.78993110e-10, 3.35930031e-03,\n",
" 1.84550927e-09, 6.61073273e-10, 1.03430679e-02,\n",
" 1.34263821e-09, 5.69064297e-10, 3.05219658e-10,\n",
" 2.60845020e-10, 2.85509339e-10, 2.39306928e-09,\n",
" 2.98985475e-10, 2.33668730e-10, 3.47879281e-10,\n",
" 1.07586264e-06, 2.75856470e-10, 3.74775516e-10,\n",
" 3.38483745e-10, 3.68146995e-10, 8.52512820e-10,\n",
" 5.44855174e-10, 3.81254595e-10, 4.78878576e-10,\n",
" 5.69867403e-10, 3.06132868e-03, 3.77214754e-10,\n",
" 2.77278553e-10, 4.99240016e-10, 8.93210563e-10,\n",
" 4.34630996e-10, 5.91226248e-10, 9.55333837e-10,\n",
" 1.73775760e-10, 2.37724800e-10, 4.02462022e-10,\n",
" 2.09311560e-08, 2.94670815e-10, 8.30709967e-10,\n",
" 8.57422068e-10, 9.60387593e-10, 2.86417375e-10,\n",
" 1.94831139e-10, 2.59797059e-09, 1.25078637e-09,\n",
" 1.87196022e-10, 2.67694440e-10, 2.49804831e-02,\n",
" 1.02914259e-08, 2.86354629e-10, 3.51133854e-10,\n",
" 1.32508438e-09, 3.06881729e-10, 4.75562140e-10,\n",
" 5.95537564e-03, 3.64720100e-02, 3.44563375e-10,\n",
" 6.01326913e-10, 6.13169542e-10, 3.54813091e-10,\n",
" 2.40069893e-10, 2.75389796e-10, 3.08538284e-10,\n",
" 6.91465656e-03, 2.83503307e-10, 8.74846275e-10,\n",
" 7.65771738e-10, 4.56615636e-03, 3.47863841e-02,\n",
" 2.92575956e-10, 1.18387152e-09, 1.50144091e-08,\n",
" 1.76787398e-09, 3.87377323e-10, 8.14788939e-10,\n",
" 3.46230159e-10, 2.44240866e-10, 6.69485256e-10,\n",
" 5.17130830e-10, 7.96599256e-10, 3.99999999e-02,\n",
" 4.94998417e-10, 9.72509195e-10, 6.07492064e-10,\n",
" 2.67176175e-10, 3.15198817e-10, 4.53926076e-10,\n",
" 2.93766589e-10, 1.18003900e-09, 4.38567777e-10,\n",
" 9.06949745e-10, 3.78857702e-02, 2.48726790e-03,\n",
" 4.44820075e-10, 2.96561353e-10, 1.92713608e-09,\n",
" 8.77874115e-10, 3.87507851e-10, 2.76350871e-09,\n",
" 3.00640517e-10, 2.26342030e-10, 2.76316948e-10,\n",
" 4.00000000e-02, 6.59856706e-03, 7.86853880e-10,\n",
" 5.11873730e-10, 3.58240168e-10, 5.14954662e-10,\n",
" 3.61635892e-10, 4.46058611e-09, 2.81567065e-10,\n",
" 4.05940157e-10, 2.89242449e-10, 2.72513238e-10,\n",
" 1.51074280e-02, 4.28549870e-10, 2.68265123e-10,\n",
" 4.50221662e-10, 3.07973437e-10, 6.99783169e-10,\n",
" 3.99999999e-02, 5.32622908e-10, 6.11228497e-10,\n",
" 1.50915232e-09, 3.38116839e-10, 2.75728345e-10,\n",
" 2.39851328e-10, 4.17953908e-10, 3.29750895e-09,\n",
" 2.92206553e-10, 1.75582319e-02, 4.69712358e-10,\n",
" 3.79903062e-10, 1.77790656e-09, 3.44658233e-10,\n",
" 8.06697379e-05, 9.37194023e-10, 3.87665692e-10,\n",
" 5.48697424e-10, 1.71258942e-09, 4.80379421e-10,\n",
" 4.95673576e-10, 3.78256539e-02, 2.99091863e-10,\n",
" 2.88085206e-09, 3.23625662e-10, 2.47503528e-10,\n",
" 2.25750985e-10, 3.88717216e-10, 3.01416977e-10,\n",
" 2.72122355e-10, 5.62723291e-10, 7.92172432e-10,\n",
" 3.99431880e-10, 6.07081882e-10, 2.40422726e-10,\n",
" 5.52270922e-03, 5.98145453e-10, 1.27306297e-09,\n",
" 5.48260894e-10, 3.36809564e-10, 3.34424650e-10,\n",
" 2.96076228e-08, 1.76038473e-03, 1.03800673e-09,\n",
" 2.37067319e-10, 2.69621890e-10, 1.98072151e-10,\n",
" 3.89917271e-10, 2.26385315e-10, 2.36141894e-10,\n",
" 3.78402900e-10, 1.26992435e-09, 3.30696674e-10,\n",
" 4.02871184e-10, 1.63023090e-10, 8.94202901e-10,\n",
" 3.37533602e-10, 7.21421243e-10, 3.00712880e-10,\n",
" 1.42746739e-09, 6.90657341e-10, 4.83134323e-10,\n",
" 4.85545869e-10, 1.78566936e-10, 5.80314243e-10,\n",
" 7.86431976e-10, 2.92305854e-10, 7.65542509e-10,\n",
" 6.56450591e-10, 1.89619574e-09, 1.73804329e-10,\n",
" 3.99999984e-02, 6.42022127e-10, 2.62054710e-10,\n",
" 3.40358996e-10, 3.75278305e-02, 2.68884283e-02,\n",
" 2.11310670e-10, 9.54374751e-10, 5.32195682e-10,\n",
" 1.61592397e-03, 8.52312748e-03, 2.85815714e-10,\n",
" 2.36565902e-10, 2.37562803e-10, 4.26814374e-03,\n",
" 6.55804515e-10, 7.00905949e-10, 2.85611939e-10,\n",
" 2.49921651e-10, 4.13285630e-10, 1.36641147e-02,\n",
" 6.97544939e-10, 1.98099809e-09, 9.12481603e-10,\n",
" 6.67085137e-10, 2.07848620e-10, 1.75711670e-09,\n",
" 1.15210076e-09, 3.02580047e-10, 2.92106639e-10,\n",
" 3.15385762e-10, 2.28906082e-10, 1.49884957e-10,\n",
" 2.40967432e-10, 3.25252939e-10, 1.14927776e-09,\n",
" 4.00878373e-10, 2.36676373e-10, 4.98809103e-10,\n",
" 4.28493417e-10, 2.30458575e-10, 2.37370250e-10,\n",
" 5.40373057e-10, 2.13856083e-10, 1.11963535e-09,\n",
" 8.85662563e-03, 3.57270318e-02, 8.90077719e-10,\n",
" 3.17374248e-10, 4.39800988e-10, 3.04612964e-10,\n",
" 2.42589842e-10, 4.01844974e-10, 3.23905290e-10,\n",
" 2.43905460e-10, 3.43675563e-10, 5.13613505e-10,\n",
" 3.74611553e-10, 4.68298672e-10, 4.26075972e-10,\n",
" 2.75814946e-09, 3.79198165e-10, 6.63990037e-10,\n",
" 3.89294325e-10, 7.74683887e-10, 2.81002783e-10,\n",
" 2.67442507e-09, 2.03936612e-10, 4.99771152e-10,\n",
" 2.12806037e-10, 2.04972827e-10, 2.05058550e-02,\n",
" 3.70741331e-10, 2.48772126e-10, 1.70808944e-10,\n",
" 9.52046528e-10, 1.42795621e-09, 3.25593569e-02,\n",
" 3.73463405e-04, 5.52095041e-03, 2.75900720e-10,\n",
" 1.78025500e-09, 4.41509671e-10, 5.32367576e-10,\n",
" 4.19461165e-10, 3.48155060e-10, 3.96689482e-10,\n",
" 5.18741371e-10, 2.20201621e-03, 1.61746868e-09,\n",
" 3.23270913e-10, 7.42363957e-10, 5.89608973e-10,\n",
" 2.61714702e-10, 3.36496326e-10, 8.31038102e-10,\n",
" 3.58997676e-10, 2.63556541e-10, 7.97130662e-10,\n",
" 2.19103735e-10, 3.33853371e-10, 2.39362492e-10,\n",
" 1.60735856e-09, 4.88196702e-10, 4.06626177e-10,\n",
" 5.25811581e-03, 3.99999969e-02, 6.25495534e-10,\n",
" 1.87181179e-09, 3.12839550e-10, 1.74343212e-09,\n",
" 4.38295221e-10, 1.31864196e-09, 2.13593800e-10,\n",
" 6.88995567e-03, 2.50885620e-10, 3.39621513e-10,\n",
" 2.92559932e-10, 2.31567474e-10, 8.35872332e-10,\n",
" 5.23707275e-10, 1.38507684e-09, 7.27652171e-10,\n",
" 2.07920648e-10, 2.97169815e-10, 4.94814597e-10,\n",
" 4.97787089e-10, 1.68166627e-10, 2.46521474e-10,\n",
" 5.67132580e-10, 3.27936772e-03, 6.72131064e-10,\n",
" 8.56955701e-11, 3.73205858e-10, 5.37322211e-10,\n",
" 2.95855269e-10, 2.24002677e-09, 2.10352883e-10,\n",
" 1.72886018e-09, 9.37536042e-10, 3.32900253e-10,\n",
" 1.46131104e-09, 4.79478628e-10, 6.93480009e-10,\n",
" 1.88242915e-09, 2.70472591e-10, 1.00591618e-09,\n",
" 1.10101316e-09, 2.17604688e-10, 4.86098844e-10,\n",
" 5.23443217e-03, 2.91877340e-10, 3.34803117e-10,\n",
" 5.50527474e-10, 3.79913346e-10, 1.85193941e-10,\n",
" 2.93878860e-03, 2.77281871e-10, 4.52618892e-10,\n",
" 3.26266372e-10, 3.61367986e-10, 3.03754379e-03,\n",
" 2.57897603e-02, 7.43949956e-10, 2.11515289e-10,\n",
" 1.33557641e-10, 3.13187219e-10, 2.46362986e-10,\n",
" 2.88635033e-10, 3.57526589e-10, 4.29776154e-10,\n",
" 1.44393545e-02, 1.10936316e-09, 1.13995023e-09,\n",
" 6.09914742e-10, 7.73858755e-09, 2.20948146e-10,\n",
" 8.59197569e-03, 2.60929643e-10, 8.76978973e-10,\n",
" 5.57883437e-10, 1.13325836e-09, 3.39593411e-10,\n",
" 2.39511673e-10, 6.68584655e-10, 1.14491200e-09,\n",
" 9.23434159e-10, 3.46590302e-10, 8.51580988e-10,\n",
" 5.03454758e-10, 3.21181523e-10, 3.95273791e-10,\n",
" 8.19250641e-10, 3.83512479e-10, 4.08700338e-10,\n",
" 2.43173594e-10, 1.99020265e-10, 2.10813650e-10,\n",
" 4.23374048e-10, 1.92755421e-10, 3.99999999e-02,\n",
" 5.07885007e-10, 5.97508451e-10, 9.74969104e-03,\n",
" 2.13074976e-10, 4.05644867e-10, 3.67294697e-10,\n",
" 3.40095260e-10, 3.19857414e-10, 4.84094361e-10,\n",
" 8.83113456e-10, 4.02785427e-10, 7.69995355e-10,\n",
" 2.75839993e-10, 7.90942640e-03, 2.35347157e-10,\n",
" 3.59524109e-10, 3.31143166e-10, 3.31547342e-10,\n",
" 4.47930536e-10, 7.05046082e-10, 3.22886470e-10,\n",
" 1.93432598e-09, 2.29960757e-03, 3.07870191e-10,\n",
" 2.87934367e-10, 4.40769375e-10, 2.75485973e-10,\n",
" 4.31162354e-10, 3.12280557e-10, 1.24029867e-10,\n",
" 3.32281829e-10, 2.62743845e-10, 4.64367160e-10,\n",
" 6.29502695e-10, 5.92090057e-10, 7.83481706e-10,\n",
" 8.98232819e-10, 4.24756611e-09, 4.47175015e-10,\n",
" 3.03333934e-10, 1.09941506e-09, 7.05433000e-03,\n",
" 5.07493811e-10, 1.92444847e-03, 5.47108021e-10,\n",
" 2.44846668e-10, 3.72595829e-10, 1.99755991e-09,\n",
" 1.06136504e-09, 3.51314608e-10, 5.46012542e-10,\n",
" 3.21813201e-10, 3.02771776e-10, 3.88423155e-10,\n",
" 2.65136713e-10, 7.96177869e-10, 3.95339100e-10,\n",
" 2.20704940e-10, 6.68909256e-10, 4.76989894e-10,\n",
" 5.50652700e-09, 3.05732962e-10, 2.06929911e-10,\n",
" 3.57421753e-10, 5.98405195e-10, 5.42748761e-03,\n",
" 1.02375894e-09, 4.31296153e-10, 2.38410182e-10,\n",
" 1.75062181e-02, 7.50440280e-10, 5.13550144e-10,\n",
" 1.04557111e-09, 9.09235537e-10, 4.32680652e-10,\n",
" 5.12945130e-10, 7.48263434e-03, 1.28484049e-02,\n",
" 5.35157051e-10, 2.62473038e-02, 2.67230539e-10,\n",
" 3.21651739e-10, 5.45512347e-03, 2.98484843e-10,\n",
" 5.08132389e-10, 2.94145614e-10, 2.90235145e-10,\n",
" 4.23583265e-10, 6.27217842e-10, 4.75078208e-10,\n",
" 3.95909614e-10, 4.32008742e-10, 4.16133042e-10,\n",
" 3.87299556e-02, 9.43658042e-10, 1.16478522e-09,\n",
" 1.65489455e-02, 1.65791553e-02, 1.34821203e-09,\n",
" 3.31736699e-10, 3.78954127e-10, 4.09699106e-10,\n",
" 2.27903500e-08, 6.18015443e-10])"
]
},
"execution_count": 30,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"np.array(sol['x']).flatten()"
]
},
{ {
"cell_type": "code", "cell_type": "code",
"execution_count": null, "execution_count": null,
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment