{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "![](img/logocurso.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "nbpresent": {
     "id": "d9e822f9-0a52-43f2-90ef-e8fd6860aacc"
    }
   },
   "source": [
    "![](img/sesionx.png)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Generación de números pseudoaleatorios\n",
    "\n",
    "La generación de números que simulen un proceso aleatorio es un problema matemático con importantes aplicaciones prácticas. Existen sistemas de generación de números aleatorios basados en dispositivos físicos o en algoritmos matemáticos. Los algoritmos matemáticos pueden proporcionar secuencias de números que aunque no son realmente aleatorias tienen un comportamiento suficientemente próximo a la aleatoriedad y que por ello se denominan generadores pseudoaleatorios. Todos los lenguajes de programación incorporan instrucciones, módulos o paquetes para la generación de números aleatorios.\n",
    "\n",
    "Python proporciona el módulo random."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sympy import *\n",
    "from random import *"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": true
   },
   "source": [
    "<div class=\"alert alert-info\"> Algunas de las instrucciones de random son:\n",
    "<ul>\n",
    "    <li><b>random()</b>: genera un número float aleatorio entre 0 y 1.</li>\n",
    "    <li><b>uniform(a,b)</b>: genera un núero aleatorio float entre a y b.</li>\n",
    "    <li><b>randint(a,b)</b>: genera un núero aleatorio int entre a y b..</li>\n",
    "    <li><b>choice(lista)</b>: escoge aleatoriamente un elemento de la lista proporcionada.</li>\n",
    "    <li><b>sample(lista,k)</b>: escoge una muestra de la lista con k elementos.</li>\n",
    "    <li><b>seed(n)</b>: restablece la semilla de generación de números al entero n</li>\n",
    "</ul>\n",
    "</div>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "random()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "uniform(120,200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "seed(10)\n",
    "randint(120,200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "randint(120,200)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "choice([\"Fernando\",\"Antonio\",\"Jacinto\",\"Paco\",\"Eduardo\",\"Fermín\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "sample([\"Fernando\",\"Antonio\",\"Jacinto\",\"Paco\",\"Eduardo\",\"Fermín\"],3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ejercicio 1\n",
    "Definir una función a la que se le indica el grado y un rango y proporciona un polinomio con coeficientes enteros aleatorios dentro del rango especificado y del grado indicado."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ejercicio 2\n",
    "Definir una función a la que se le proporciona un grado y un rango y retorna un polinomio cuyas raíces son números enteros dentro del rango especificado y en número igual al grado indicado."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Ejercicio 3\n",
    "Definir una función que recibidas unas dimensiones y un rango proporcione una matriz de las dimensiones señaladas y cuyos elementos son números enteros dentro del rango indicado."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Proyectos propuestos\n",
    "\n",
    "Trabajos propuestos:\n",
    "<div class=\"alert alert-info\"> Ejercicios propuestos:\n",
    "<ol>\n",
    "<li>Programar un algoritmo que genere matrices diagonalizables mediante cálculos abordables a mano. Las matrices deben generarse aleatoriamente en base a un número que se recibe como argumento.</li>\n",
    "<li>Programar un algoritmo que plantee un problema de cálculo de máximos y mínimos para funciones polinómicas. Las funciones prouestas deberán permitir los cálculos a mano.</li>\n",
    "<li>Programar un algoritmo que plantee un problema de cálculo de puntos de inflexión para funciones polinómicas. Las funciones\n",
    "prouestas deberán permitir los cálculos a mano.</li>\n",
    "<li>Programar un algoritmo que proponga una matriz para calcular su inversa de modo que el resultado final es una matriz de números enteros.</li>\n",
    "<li>Programar un algoritmo que genere un ejercicio de cálculo del polinomio de interpolación en base a una lista de datos. La solución del ejercicio debe ser un polinomio con coeficientes enteros.</li>\n",
    "<li>Programar un algoritmo que proponga un ejercicio sobre el cálculo del área encerrada por una función polinómica en un intervalo teniendo en cuenta los cambios de signo que pudieran acontecer.</li>\n",
    "<li>Programar un ejercicio que proponga la resolución de un sistema lineal de ecuaciones de forma que sea posible expresar la solución mediante números enteros.</li>\n",
    "<li>Programar un algoritmo que proponga un ejercicio de integración de una función racional mediante separación en fracciones simples. El ejercicio debe ser abordable mediante cálculos a mano.</li>\n",
    "</ol>\n",
    "En todos los casos el ejercicio resultante se generará a partir de un argumento que será un número que servirá como base de la generación de números aleatorios. El ejercicio debe ser tipo test y dar las posibles respuestas entre las cuales debe estar la correcta.\n",
    "</div>"
   ]
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.13"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
