2.1: Números
- Page ID
- 113306
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\( \newcommand{\id}{\mathrm{id}}\) \( \newcommand{\Span}{\mathrm{span}}\)
( \newcommand{\kernel}{\mathrm{null}\,}\) \( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\) \( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\) \( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\id}{\mathrm{id}}\)
\( \newcommand{\Span}{\mathrm{span}}\)
\( \newcommand{\kernel}{\mathrm{null}\,}\)
\( \newcommand{\range}{\mathrm{range}\,}\)
\( \newcommand{\RealPart}{\mathrm{Re}}\)
\( \newcommand{\ImaginaryPart}{\mathrm{Im}}\)
\( \newcommand{\Argument}{\mathrm{Arg}}\)
\( \newcommand{\norm}[1]{\| #1 \|}\)
\( \newcommand{\inner}[2]{\langle #1, #2 \rangle}\)
\( \newcommand{\Span}{\mathrm{span}}\) \( \newcommand{\AA}{\unicode[.8,0]{x212B}}\)
\( \newcommand{\vectorA}[1]{\vec{#1}} % arrow\)
\( \newcommand{\vectorAt}[1]{\vec{\text{#1}}} % arrow\)
\( \newcommand{\vectorB}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vectorC}[1]{\textbf{#1}} \)
\( \newcommand{\vectorD}[1]{\overrightarrow{#1}} \)
\( \newcommand{\vectorDt}[1]{\overrightarrow{\text{#1}}} \)
\( \newcommand{\vectE}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash{\mathbf {#1}}}} \)
\( \newcommand{\vecs}[1]{\overset { \scriptstyle \rightharpoonup} {\mathbf{#1}} } \)
\( \newcommand{\vecd}[1]{\overset{-\!-\!\rightharpoonup}{\vphantom{a}\smash {#1}}} \)
\(\newcommand{\avec}{\mathbf a}\) \(\newcommand{\bvec}{\mathbf b}\) \(\newcommand{\cvec}{\mathbf c}\) \(\newcommand{\dvec}{\mathbf d}\) \(\newcommand{\dtil}{\widetilde{\mathbf d}}\) \(\newcommand{\evec}{\mathbf e}\) \(\newcommand{\fvec}{\mathbf f}\) \(\newcommand{\nvec}{\mathbf n}\) \(\newcommand{\pvec}{\mathbf p}\) \(\newcommand{\qvec}{\mathbf q}\) \(\newcommand{\svec}{\mathbf s}\) \(\newcommand{\tvec}{\mathbf t}\) \(\newcommand{\uvec}{\mathbf u}\) \(\newcommand{\vvec}{\mathbf v}\) \(\newcommand{\wvec}{\mathbf w}\) \(\newcommand{\xvec}{\mathbf x}\) \(\newcommand{\yvec}{\mathbf y}\) \(\newcommand{\zvec}{\mathbf z}\) \(\newcommand{\rvec}{\mathbf r}\) \(\newcommand{\mvec}{\mathbf m}\) \(\newcommand{\zerovec}{\mathbf 0}\) \(\newcommand{\onevec}{\mathbf 1}\) \(\newcommand{\real}{\mathbb R}\) \(\newcommand{\twovec}[2]{\left[\begin{array}{r}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\ctwovec}[2]{\left[\begin{array}{c}#1 \\ #2 \end{array}\right]}\) \(\newcommand{\threevec}[3]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\cthreevec}[3]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \end{array}\right]}\) \(\newcommand{\fourvec}[4]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\cfourvec}[4]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \end{array}\right]}\) \(\newcommand{\fivevec}[5]{\left[\begin{array}{r}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\cfivevec}[5]{\left[\begin{array}{c}#1 \\ #2 \\ #3 \\ #4 \\ #5 \\ \end{array}\right]}\) \(\newcommand{\mattwo}[4]{\left[\begin{array}{rr}#1 \amp #2 \\ #3 \amp #4 \\ \end{array}\right]}\) \(\newcommand{\laspan}[1]{\text{Span}\{#1\}}\) \(\newcommand{\bcal}{\cal B}\) \(\newcommand{\ccal}{\cal C}\) \(\newcommand{\scal}{\cal S}\) \(\newcommand{\wcal}{\cal W}\) \(\newcommand{\ecal}{\cal E}\) \(\newcommand{\coords}[2]{\left\{#1\right\}_{#2}}\) \(\newcommand{\gray}[1]{\color{gray}{#1}}\) \(\newcommand{\lgray}[1]{\color{lightgray}{#1}}\) \(\newcommand{\rank}{\operatorname{rank}}\) \(\newcommand{\row}{\text{Row}}\) \(\newcommand{\col}{\text{Col}}\) \(\renewcommand{\row}{\text{Row}}\) \(\newcommand{\nul}{\text{Nul}}\) \(\newcommand{\var}{\text{Var}}\) \(\newcommand{\corr}{\text{corr}}\) \(\newcommand{\len}[1]{\left|#1\right|}\) \(\newcommand{\bbar}{\overline{\bvec}}\) \(\newcommand{\bhat}{\widehat{\bvec}}\) \(\newcommand{\bperp}{\bvec^\perp}\) \(\newcommand{\xhat}{\widehat{\xvec}}\) \(\newcommand{\vhat}{\widehat{\vvec}}\) \(\newcommand{\uhat}{\widehat{\uvec}}\) \(\newcommand{\what}{\widehat{\wvec}}\) \(\newcommand{\Sighat}{\widehat{\Sigma}}\) \(\newcommand{\lt}{<}\) \(\newcommand{\gt}{>}\) \(\newcommand{\amp}{&}\) \(\definecolor{fillinmathshade}{gray}{0.9}\)Resolver problemas de Computación Científica en última instancia se reduce a manipular datos y en lo más básico es el de cadenas y números. Comenzamos por comprender estos tipos de datos y cómo almacenar valores en ellos.
También mostramos algo de sintaxis julia, que se parece a otros lenguajes (como python). Ojalá tengas algunos conocimientos básicos de computación, pero no es necesaria la suposición de ningún idioma en particular.
Números
No es sorprendente que el tipo de datos más importante en la computación científica, al menos en el nivel más atómico sean los números. Los números en cómputos imitan a los de las matemáticas con algunas diferencias importantes. Julia como la mayoría de los lenguajes de computación tienen dos tipos de números principales, enteros y puntos flotantes. Los enteros de Julia y muy parecidos a los enteros matemáticos en que almacenan números como\(0, 10, -400\). Los números de punto flotante generalmente son aproximaciones a números reales o decimales y se tratarán más detalles en el Capítulo??.
Julia también tiene un tipo de datos racional para números comúnmente aunque como fracciones como\(-\frac{2}{3}\) o\(\frac{22}{7}\). Recordemos que típicamente\(i\) representa\(\sqrt{-1}\), el número imaginario base. Los números complejos como también\(2+3i\) son nativos de julia. Exploraremos en mayor profundidad tanto los números racionales como los complejos en el Capítulo??.
Declaraciones de asignación y variables
Cualquier cosa se puede almacenar como una variable usando el único signo igual como
Se trata de un operador de asignación, que crea el número 6 y lo almacena bajo el nombre x
.
Y ahora que se almacena la variable, podemos utilizarla en los cálculos. Por ejemplo
Las variables en julia, al igual que otros idiomas son principalmente secuencias de caracteres alfanuméricos así como un guión bajo. Principalmente, una variable necesita comenzar con un carácter alfabético o y después del primer carácter puede contener números.
Julia también permite muchos símbolos unicode en nombres de variables, sin embargo no todo. Por ejemplo, todas las letras griegas están permitidas, por lo que\(\alpha=45\) es válido.
Para obtener una letra griega en Jupyter o el REPL, escribe\ alpha
, pulsa la tecla TAB y se convierte en una\(\alpha\).
Almacenamiento de variables en una pizarra virtual
Los detalles de almacenar variables en hardware informático no son necesarios, sin embargo, pensar en almacenar como escribir variables y valores en una pizarra es un paradigma útil. Imagina una pizarra con una columna de nombres de variables y una columna de valores. Por ejemplo, si tenemos
entonces puedes pensar en la pizarra luciendo así:
variable | valor |
x | 6 |
y | -1 |
z | 8.5 |
Si evaluamos alguna expresión que contenga alguna de estas variables, entonces el valor buscado sustituyó en la expresión. Por ejemplo,
busca el valor de y (que es -1) y sustituye ese valor en y multiplica el resultado por 2. Como puedes ver el resultado es -2.
Si cambiamos uno de los valores, como
esto significa que el lado derecho se evalúa buscando el valor de y y
y el resultado es 4. Después el 4 se coloca en la pizarra blanca, que ahora se verá así:
variable | valor |
x | 6 |
y | 4 |
z | 8.5 |
Si estás pensando en cómo funciona una pieza de código, a menudo necesitarás llegar al punto de escribir una versión de la pizarra.
Cuerdas
En muchos campos de la Computación Científica, como la Ciencia de Datos, las cadenas surgen a menudo y es importante entender algunos de los conceptos básicos de las mismas. En Julia, una cadena es una secuencia de caracteres rodeada de “”
(comillas dobles). Por ejemplo:
y si ingresas
lo que demuestra que es una String
. La Sección 1.2 entrará en más detalles sobre los tipos de datos en Julia. Las partes individuales de la cadena se llaman caracteres, que son de tipo Char
y son por defecto Caracteres Unicode (que veremos son súper útiles). Algunas otras cosas útiles sobre las cadenas son
-
La longitud de una cadena se encuentra usando el comando length.
length (str)
devuelve 16. -
Para acceder al primer elemento de la cadena, escriba
first (str)
, el último se encuentra porlast (str)
y el 3er carácter por ejemplo esstr [3].
En julia, la indexación de cadenas comienza en 1 -
Para convertir otros tipos de datos en cadena, utilice la función
string
. Por ejemplo
y nuevamente tenga en cuenta que las comillas dobles indican que se trata de una cadena.
Operaciones de cadena
Una operación de cadena común es la concatenación, o la fusión de dos cadenas. Considerar
Podemos concatenar de dos maneras, con el símbolo del operador *
o la función string
. Ambos
devuelve la misma concatenación de cadenas. Encuentro la segunda opción más clara en que *
es una opción extraña para la concatenación de cadenas. Muchos lenguajes incluyendo java y ecmascript (javascript) usan +
en su lugar para la concatenación de cadenas, lo que creo intuitivamente tiene más sentido.
Otra operación linda para cuerdas es la operación de intercalación. Esto podría ser útil, sin embargo, un ejemplo no tan útil es
concatena la cadena tres veces. Otras funciones importantes relacionadas con las cadenas se pueden encontrar en JULIA DOCUMENTACIÓN SOBRE
Interpolación de cadena
A menudo es necesario mezclar cadenas y otras variables juntas y podemos usar los métodos de concatenación como los anteriores. No obstante, hay una mejor manera. Usemos el valor de x
que almacenamos arriba e insértelo al final de “El valor de x es"
. Lo siguiente hará
En realidad, hay otra manera de hacer la concatenación de cadenas si usa este método. Usando las variables almacenadas en str1
y str2
, entonces
también concatenar las cadenas.
También podemos ir más allá de solo buscar cadenas en que también podemos ejecutar código. Digamos que tenemos la variable
Si queremos una cadena con su cuadrado, podemos ingresar:
donde debes notar que el código n^2
se ejecuta ya que ese código está dentro del $ ().
Ejercicio
Usa el volumen de una esfera\(\frac{4}{3}\pi r^3\), para calcular el volumen y producir una cadena. Por ejemplo, almacene r=3 y luego devuelva el resultado
“El volumen de una esfera de radio 3 es 113.0973355292"
donde 3 y el volumen se genera con interpolación de cadena.
Expresiones
Una expresión es una combinación de variables, elementos de datos (como números y cadenas), operaciones (como + o *) y funciones (como). Hemos visto una serie de expresiones a lo largo de este capítulo hasta ahora como
En definitiva, escribir cosas en julia consistirá en escribir expresiones (y estructuras un poco más complicadas).
Precedencia del operador
Cuando escribimos una expresión como 11+2* (4+3) ^3
, es importante entender el orden en que se realizan los operadores. Para las matemáticas, el pnemónico PEMDAS es útil para recordar en que el orden es:
-
Paréntesis: La expresión dentro de la () se realiza primero. Para el ejemplo anterior, el
4+3
es la primera operación realizada. -
Exponenciales: El ^ se hace a continuación. Elevar el 7 desde arriba a la potencia de 3 resultando en
343
. -
Multiplicación y División: En este ejemplo, el
2* (343)
se realiza a continuación -
Suma y resta: Por último, suma 11 al resultado y el resultado es
697
.
En cualquier lenguaje de cómputos, también hay otros operadores y hay orden a esa precedencia, así veremos que hay otras cosas en las que pensar. Por ejemplo, el operador de asignación, tiene la prioridad más baja. Es decir, al asignar algo a una variable, todos los cálculos se realizan en el lado derecho del = antes de la asignación.
Los detalles de todo esto se pueden encontrar en la DOCUMENTACIÓN DE JULIA SOBRE PRED
Comentarios
Un comentario en el código de computadora son secuencias de caracteres que se ignoran. El propósito de un comentario es alertar a un humano sobre lo que está pasando. Es posible que te hayan dicho que escribas comentarios para que alguien más que lea tu código entienda lo que estás haciendo. No obstante, he descubierto que a la persona que más le gusta leer tu código eres tú en una fecha posterior. Deberías agregar comentarios por ti mismo.
En julia, un comentario es cualquier cosa a la derecha de un, signo de libra o etiqueta hash. Por ejemplo:
Ambas líneas 1 y 3 tienen comentarios. En la línea 1, se ignora toda la línea ya que la línea comienza con #
. En la línea 3, todo después del 2 (el poder) es ignorado. Además, observe que hay dos etiquetas hash en la línea 1 y 1 en la línea 3. Esto es simplemente un estilo diferente. Ya que cualquier cosa después de un sencillo es un comentario, todo después del primero se ignora.