Dudas simples de matemáticas

Aviso desde la moderación a navegantes

Este es el hilo de dudas simples de matemáticas. Lo que se logra preguntando dudas complejas aquí es que otra gente con dudas más sencillas no las transmitan por pensar que pueden quedar en "evidencia" dada la "sencillez" de su pregunta; y nada más lejos de la realidad.

Para algo concreto más allá de lo simple, recomendamos crear un nuevo hilo. Intentemos fomentar que la gente que tenga dudas simples de matemáticas vengan a este hilo. Quienes tengan dudas simples de física a este otro. Y quienres deseen una explicación sencilla de algún fenómeno a este otro. Intentemos hacer de Ciencia un subforo accesible y donde todos sientan que pueden aportar.
B

#330 sí, maple es simbólico lo que lo hace más lento (aunque tiene sus cosas buenas como precisión infinita), matlab no.

1 respuesta
B

#331 todavia me acuerdo del maldito electron que no habia manera de sacar la posicion y velocidad en maple y luego en C lo resolvio en 15s :S

1
hda

#327 si no me confundo, para los cálculos simbólicos matlab usa maple.

Zerokkk

#326 A nivel funcional veo una diferencia clara: en ML los nodos varían su peso en base a cómo afectan al resultado final, mientras que en la algoritmia genética tiene pinta de ser algo mucho más aleatorio y loco xD. Tiene pinta de que por ahí van los tiros; como si el ML fuera algoritmia genética mejorada, que cambia la solución de manera más precisa. Aún así, a ver si alguien arroja más luz sobre el tema.

#328 Hombre, ¿y qué te crees? C# es un lenguaje moderno y altamente tipado, pauta completamente todo lo que haces (como Java), por lo que se vuelve muy fácil compartir código entre desarrolladores distintos. Pero eso no tiene por qué tener efecto alguno sobre la velocidad del programa.

Por ejemplo, JavaScript puede tener fama de poco pautado, lioso y lento (al ser interpretado), pero cuando se programa bien y se usa su queridísimo event loop parseando el código a assembly (como hace Node.js) la velocidad es una puta pasada. Al final, todo depende de cómo se interprete -> compile el lenguaje inicial y de cómo el programador haga las cosas.

#326 Cabe decir, como curiosidad, que Python no sigue el paradigma de la OOP a la perfección, pues permite herencia múltiple. La idea de la herencia es que sea única y exclusiva, de modo que su camino hacia la genericidad sea una línea de clases, y no haya bifurcaciones. Si te fijas esto tiene sentido, ya que si quieres añadir características aparte que pueda compartir con otras clases no relacionadas, usas interfaces, y pista xD.

Yo tras mucho pelearme y dar clase sobre POO, me da un poco de tirria Python más allá que para scripts de investigación, porque me parece un poco hereje al cargarse este punto.

3 respuestas
n3krO

#334 No me hables de javascript, estuve mirandolo por el screeps y me dió ganas de suicidarme con lo desorganizado que es.

1 respuesta
hda

#328 piénsalo de este modo: c# es un lenguaje de cuarto nivel, c de segundo nivel. Cada línea de c# pueden ser varias centenas de líneas de c. Cuando instancias cualquiera cosa en c# vas a tener un 90% de propiedades que no vas a usar, al contrario que cuando lo haces en c.

Tal como te dicen arriba, c# es un lenguaje interpretado, necesitas una máquina virtual para correrlo y un recolector de basura. Con esto se consigue que un software en c# corra en cualquier arquitectura que tenga el framework instalado. En el caso de c es código compilado, y solo correrá para la arquitectura que se compile.

En términos de simplicidad c# le da mil vueltas a c, por ejemplo para abrir una conexión es una línea. En c te puedes echar un rato para hacer lo mismo. Por otra banda, al correr c# tanto código "espurio" (me refiero a todo el código sobre el que se construye una instancia, por ejemplo) junto con ser interpretado, resulta en una ejecución mucho más lenta que un lenguaje de segundo nivel.

Con todo esto, para cálculos pesados es siempre ideal irse al nivel más bajo posible. Intentando llegar a un equilibrio entre simplicidad y eficacia de ejecución: aquí tienes el porqué Duronman usa python para codigo casual, pero c para código de cálculo pesado.

Podemos trasladar esto mismo (salvando las distancias) cuando nos vamos a primer nivel, assambler.

1 respuesta
n3krO

#336 Cuando dices C quieres decir C++? Porque Duronman dijó que usa C++ y yo estoy interesado en C++.

No quiero saber nada de la programacion imperativa :P

1 respuesta
Zerokkk

#335 Estás acostumbrado a lenguajes altamente pautados, como lo estaba yo xD. Mi lenguaje madre es Java, imagínate el cambiazo al pasar al caos de JS.

No obstante, le terminas cogiendo MUCHO cariño a JS, porque se programa inusualmente rápido con él. Úsalo con un framework por encima, como Angular, y se convierte en una maravilla. Usado a pelo, se vuelve un lío de tres pares de cojones, nadie lo niega. Y lo peor es que la diferencia visual entre el código de un dev y de otro, es SUSTANCIAL.

Pero es eso, cuando aprendes a aprovechar sus capacidades asíncronas y su brutal dinamismo, hasta te termina gustando y todo. Aunque repito que para mí su gran beneficio es la facilidad para programar algo.

hda

#337 c++ se considera de tercer nivel, pero vamos, es la misma historia.

Por ejemplo, para hacer las simulaciones de interacción de partículas en una caja (temas de termodinámica y equilibrio), que era el trabajo final de la asignatura "simulación en física de materiales", el profesor nos metió directamente a programar con fortran, segundo nivel. Y aún así podían ser algunas horas calculando (en un i7). Si llegamos a hacer eso en matlab (o c#) se va a días.

2 respuestas
B

Resumen.
Para calculo puro y duro usad C jovenes

1 1 respuesta
B

#334 pues sera eso. De todos modos ML que es? Porque no se si te refieres a SVM, DNN, CNN, Online CVOPT, random gradient descent, etc. Sobre python tienes razon, estaba simplificando. Igualmente en comunidad cientifica no se miran mucho estas cosas. Que opinas de Julia?

3 respuestas
hda

#341 lenguaje de marcas

Zerokkk

#339 Uh, esa estimación me parece muy exagerada xD.

Los lenguajes que más morralla meten son los que usan VMs para su ejecución o corren sobre runtimes extensos. Java o su hermano Scala son un buen ejemplo (ambos corren en la JVM), y creo que C# también compila un código previo a assembly.

... y aún así, la diferencia computacional entre hacer un código en Java y Assembly, no es tan alta. La hay, pero los compiladores de hoy en día son muy listos y saben optimizar muy bien el código, por lo que al final donde se pierde rendimiento, es en cuatro tonterías nimias y en el camino entre los diferentes niveles (JVM -> Bytecode -> Assembly -> bits).

Lenguajes preparados específicamente para ser rápidos, véase mathlab, C, C++... corren ligeramente más rápido, pero sus principales ventajas es que tienen mayor facilidad para copar los recursos del sistema. C++ se compila directo a assembly, por lo que tú realmente corres cuando le das al .exe, es código máquina, son movimientos de 1's y 0's en memoria, el nivel lógico de más bajo nivel en el que puedes trabajar.

Todo depende del compilador, como se puede suponer aquí. JavaScript es un lenguaje que pasa por muchas capas (pues es interpretado) pero runtimes como Node.js te lo parsean a assembly, por lo que vuelve a ser rápido de cojones. ¿Qué ventaja puede tener C++ sobre JS sobre Node? Que te permite utilizar mejor los recursos en la máquina local, absolutamente nada más. Y eso lo puedes hacer allí también tocando el runtime a una versión customizada.

Por tanto, la diferencia de tiempos de ejecución entre esos scripts que dices en Fortran, a hacerlos en C# (por ejemplo), no creo que sea mayor al 50%.

#340 La diferencia entre C y C++ en tiempos de ejecución es prácticamente nula (cargado de librerías, quizás?) y C++ te trae muchas más comodidades xD.

#341 Pues ni idea, he visto código y parece el típico lenguaje "rápido", de poco código. Eso está guay, pero habría que ver cómo corre, qué librerías tiene, cómo de pautado está, y si sigue bien los principios de la POO. También estaría bien ver si sigue la tendencia actual a meter cositas de programación funcional como han hecho en Java con las funciones Lambda o en JavaScript en ES6 con la función flecha.

2 respuestas
hda

#343 hombre, en c# no lo he probado, pero hice parte del problema en matlab y desistí (por los tiempos de ejecución). Me fui a fortran xD

1 respuesta
B

#339 que teniae que calcular si se puede saber?

1 respuesta
B

#343 pero si es de mas bajo nivel si que se notara la diferencia no??

1 respuesta
Zerokkk

#344 No tengo ni flapa de cómo compila Mathlab, pero tengo entendido que es bastante óptimo. Muchas veces todo esto depende de factores externos, configuraciones sobretodo. ¿Sabías que Java sólo te pilla 1 GB de memoria RAM por defecto a menos que cambies unas cosillas? Es un ejemplo de lo que sucede con los lenguajes según suben de nivel de abstracción, que se vuelven más "fáciles" pero también más dependientes de otros factores externos al código.

Si quieres ejecutar scripts a toda ostia, o haces C++ o tiras de Assembly directamente cual puto loco. Usar lo que está en el medio me parece calentarse la cabeza xD, aunque para gustos colores.

#346 Mínimamente, es lo que digo xD. Un compilador decente hace que tu código se convierta en bajo nivel, piensa que la mayoría de abstracción de un lenguaje sólo se halla en el código, no en el archivito que luego ejecutas. Luego como mucho pasa un par de capas, y en muchos casos ni eso, directamente compila a assembly, como C++.

#341 Por cierto, me refería al típico ML de redes neuronales, donde el peso se asigna a través de aprendizaje reforzado!

3 respuestas
hda

#345 debíamos construir la configuración inicial para un sistema de N partículas interactuantes en un volumen V con energía E. Esas partículas interactúan mediante el potencial de 12-6 de Lennard-Jones y llevarlo al equilibrio. Suena fácil, no lo era xD

Y lleva eso a N partículas. Y claro, muy en función de la energía inicial y de la definición de la partícula, la densidad de las partículas en la caja, etc...

#347 pero no estamos hablando de consumo de memoria (que también), sino de cálculo puro. (Ah, Machine Learning, no sé por qué lo enlacé con lenguaje de marcas, hablando de javascript, pensando en xml, etc. xDD)

3 respuestas
n3krO

#347 Solo una pequeña correcion, se esta hablando de Matlab, el programa de Mathworks, cuyo nombre viene de Matrix Laboratory.

Es que veo que escribes mucho Mathlab y no se si te refieres a otro lenguaje o si te estas liando :psyduck:

#348 Chupado.

No tengo ni puta idea de fisica jijijeje

1 respuesta
Zerokkk

#348 Lo mismo xD, el cálculo son operaciones básicas sobre bits que se hacen en el procesador siempre en assembly, y el conseguir que estas operaciones vayan más rápido depende de cuánto puedas copar el round robin del procesador (por ejemplo, ganas mucha potencia si no ejecutas un sistema operativo pesado por encima, o directamente ni lo usas), las abstracciones del lenguaje para compilarse a código máquina (como la JVM y el Bytecode de Java, que serían dos capas), y luego los entresijos del propio compilador a assembly: hay muchas formas de resolver un problema computacional (infinitas, aunque físicamente serían las que entrasen en la familia de complejidad PSPACE), unas más óptimas que otras... pues los compiladores no siempre son perfectos y a veces están poco optimizados, por lo que su código assembly generado es muy posible que sea algo peor que el que pueda hacer un matemático que se lo haya currado. Estas diferencias son pequeñas, pero claro, ante conjuntos de datos enormes... esta diferencia se va agrandando según crece el problema xD.

edit: Vaya puto lío de post (y ladrillo) me he marcado para explicar esta tontería jajajaja.

#349 Sí sí, siempre lo escribo mal, tengo manía con escribir Matlab en lugar de Mathlab xD.

B

#348 lo apuntare para cuando de molecular :D. Solo tienes la energia de cada particula ? Las posiciones eran aleatorias,

1 respuesta
hda

#351 Sí, aleatorias. De hecho no me acuerdo cómo resolví la semilla para colocarlas aleatorias, pero era una gilipollez graciosa xD

La verdad es que la asignatura podía haber estado chula. El profesor destruyó toda la didáctica posible, la hizo tediosa y cansina. Un tipo engreído cansado de dar clase. Una pena. Por suerte era una optativa.

1 respuesta
B

#352 hiciste tmb el 3D o solo los resultsdos?xd

1 respuesta
hda

#353 jaja, no, no. Los resutlados eran las variables termodinámicas en función del input:

1 respuesta
Zerokkk

#354 Qué guay, ¿qué significa cada variable, por curiosidad?

Ulmo
#334Zerokkk:

A nivel funcional veo una diferencia clara: en ML los nodos varían su peso en base a cómo afectan al resultado final, mientras que en la algoritmia genética tiene pinta de ser algo mucho más aleatorio y loco xD.

Sí, viendo el ejemplo que puso al menos es así, en el de pintar el cuadro las "mutaciones" se generan de forma aleatoria partiendo de la secuencia, no se tiene en cuenta la iteración anterior (t-1) ni nada más, mientras que en ML lo que ha sucedido con anterioridad tiene implicaciones en las decisiones futuras.

Yo uso Perl para parsear texto (es guarrísimo pero te montas un script en cuestión de minutos), R para estadística y C++ para las cosas que requieran mayor coste computacional.

1 respuesta
hda
  • Etotal/N es la energía total por partícula, que se divide en
    • su energía cinética: Ecinet/N
    • su energía potencial: Epoten/N
  • Temper es la temperatura final
  • Cv es capacidad calorífica a volumen constante
  • Cp es capacidad calorífica a presión constante
  • ks es la compresibilidad adiabática
  • kt es la compresibilidad isotérmica
  • Gamma es la gamma de Gruneisen
  • Alfa_p si no me confundo, coeficiente de dilatación térmica a volumen constante
  • dens es la densidad
B

#347 btw el problema de matlab es que lo pasa todo por valor (mejor dicho, hace cosas raras) lo cual significa que matrices grandes y tal las copia enteras en muchos casos.

1 respuesta
Zerokkk

#358 No hace referencias? Entonces menuda shit, normal que infle tanto los tiempos de ejecución como dice hda.

#356 Sí vamos, sonaba parecido. ¿Pero qué es exactamente lo que contiene el DNA String? ¿Es como una lookup table con datos concretos para la app o son sólo números aleatorios?

2 respuestas
Ulmo

#359 Si le llaman DNA string quiero creer que son cadenas de texto con alfabeto de tamaño 4, es decir 2 bits por cada posición y que por lo tanto cada "mutación" altero únicamente 2 bits. Después ya depende de cuantos cambios aleatorios introduzcas en cada iteración.

Habrá codificado la información del cuadro en una cadena de texto de alfabeto 4 y luego partiendo de otra cadena completamente diferente ha ido añadiendo mutaciones y quedándose el resultado sólo si se asemejaba más que la anterior.

1 respuesta