<jupyter_start><jupyter_text>**Revisión de funciones de gradiente y hessiana para sistema agrandado** **Responsable:** <NAME>**Infraestructura utilizada:** La implementación de la revisión se llevó a cabo en google colab.**Objetivo** : Implementar el código ya desarollado en *numpy* a *cupy* para poder utilizarlo en paralelo y resolver el portafolio de **Marcowitz** con el método de Netwton.<jupyter_code>!pip3 install --user cupy-cuda102
#Librerías utilizadas
import cupy as cp
import numpy as np
import pandas as pd
import fix_yahoo_finance as yf
import datetime
import matplotlib.pyplot as plt
import seaborn as sns
import time
import funciones_auxiliares<jupyter_output>/usr/local/lib/python3.6/dist-packages/statsmodels/tools/_testing.py:19: FutureWarning: pandas.util.testing is deprecated. Use the functions in the public API at pandas.testing instead.
  import pandas.util.testing as tm<jupyter_text>Test 1 : matriz de maxímo 10**2<jupyter_code>np.random.seed(141394) #Implementamos una semilla
n=10**2
#Generamos un vector con entradas aleatorias para simlular el precio de las acciones
#X_test=np.random.uniform(1,n,size=(55,55))
X_test=cp.random.rand(n, n)
#Calcularmos la varianza de los datos simulados
Sigma=funciones_auxiliares.calcular_varianza(X_test)
mu=funciones_auxiliares.calcular_rendimiento(X_test)

#Definimos el retorno máximo
r=max(mu)
Sigma.shape
mu.shape<jupyter_output><empty_output><jupyter_text>Calculamos el gradiente simbólico<jupyter_code>#Se define la función para el calculo del gradiente
def gfo_cp_mark(x):
    v = x[0:(x.size-2)]
    value1 = x[x.size-2]
    value2 = x[x.size-1]
    #m,n=Sigma.shape
    first_block = Sigma@v -1/2*value1*mu -1/2*value2*unos
    second_block = -1/2*(v.dot(mu)-r)
    third_block = -1/2*(v.dot(unos)-1)
    first_block_np = cp.asnumpy(first_block)
    second_block_np = cp.asnumpy(second_block)
    third_block_np = cp.asnumpy(third_block)
    #es necesario pasar los bloques a numpy para poder hacerles concatenate 
    return cp.asarray(np.concatenate((first_block_np,np.array([second_block_np]),np.array([third_block_np]))))
#Generamos los vectores auxiliares y verificamos tenga la dimensión correcta
unos = cp.ones(n)
unos.shape
x = cp.ones(n+2)
x.shape
gradiente=gfo_cp_mark(x)
gradiente<jupyter_output><empty_output><jupyter_text>Calculamos el hessiana simbólica<jupyter_code>def Hfo_cp_mark(x):
    v = x[0:(x.size-2)]
    value1 = x[x.size-2]
    value2 = x[x.size-1]
    m,n=Sigma.shape
    first_block = Sigma 
    second_block = -1/2*mu
    third_block = -1/2*unos
    fs_block = cp.column_stack((first_block, second_block, third_block))
    fourth_block = -1/2*mu
    fifth_block = -1/2*unos
    sixth_block = cp.zeros((2,2))
    #es necesario pasar los bloques a numpy para poder hacerles concatenate y row_stack
    tf_block = np.column_stack(( np.row_stack((cp.asnumpy(fourth_block),cp.asnumpy(fifth_block))),cp.asnumpy(sixth_block)))
    return cp.asarray(np.row_stack((cp.asnumpy(fs_block), tf_block)))
hessiana=Hfo_cp_mark(x)
hessiana<jupyter_output><empty_output><jupyter_text>Test 2 : matriz de maxímo 10**3<jupyter_code>np.random.seed(141394) #Implementamos una semilla
n=10**3
#Generamos un vector con entradas aleatorias para simlular el precio de las acciones
#X_test=np.random.uniform(1,n,size=(55,55))
X_test=cp.random.rand(n, n)
#Calcularmos la varianza de los datos simulados
Sigma=funciones_auxiliares.calcular_varianza(X_test)
mu=funciones_auxiliares.calcular_rendimiento(X_test)

#Definimos el retorno máximo
r=max(mu)

#Vectores auxiliares
unos = cp.ones(n)
x = cp.ones(n+2)
gradiente=gfo_cp_mark(x)
gradiente
hessiana=Hfo_cp_mark(x)
hessiana<jupyter_output><empty_output><jupyter_text>Test 3 : matriz de maxímo 10**4<jupyter_code>np.random.seed(141394) #Implementamos una semilla
n=10**4
#Generamos un vector con entradas aleatorias para simlular el precio de las acciones
#X_test=np.random.uniform(1,n,size=(55,55))
X_test=cp.random.rand(n, n)
#Calcularmos la varianza de los datos simulados
Sigma=funciones_auxiliares.calcular_varianza(X_test)
mu=funciones_auxiliares.calcular_rendimiento(X_test)

#Definimos el retorno máximo
r=max(mu)

#Vectores auxiliares
unos = cp.ones(n)
x = cp.ones(n+2)
gradiente=gfo_cp_mark(x)
gradiente
hessiana=Hfo_cp_mark(x)
hessiana<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10855416085541608, 'fraction_numerical': 0.02278010227801023, 'mean_word_length': 6.088962108731466, 'pattern_counts': {'":': 0, '<': 25, '<?xml version=': 0, '>': 25, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '587641', 'license': 'RSA-MD', 'n_tokens_mistral': 1737, 'n_tokens_neox': 1694, 'n_words': 355, 'path': 'notebooks/Revision/2Revision_Symbolic_GH.ipynb', 'repo_name': 'izmfc/MNO_finalproject', 'size': '4315'}