¿Cómo resuelven las computadoras fórmulas y ecuaciones matemáticas?

Ok, hay algunas maneras de responder esto.

Para algo relativamente simple, como y = x ^ 2 + 3, la respuesta es igualmente simple. Esta ecuación se traduciría a los siguientes pasos:

  1. Obtenga la dirección de memoria de la variable x y almacene ese valor en uno de los registros del procesador.
  2. Obtenga el contenido de la dirección de memoria señalada por esa dirección y colóquela en el acumulador.
  3. Multiplica ese valor por sí mismo.
  4. Añadir 3.
  5. Obtenga la dirección de memoria de la variable y y almacene ese valor en uno de los registros del procesador.
  6. Tome los contenidos del acumulador y colóquelos en la ubicación de memoria señalada.

Cada variable tiene, asociada con ella, una ubicación en la memoria y la computadora puede extraer el valor desde allí o introducir un nuevo valor allí. Esa ubicación en la memoria también se almacena en la memoria. A veces, un compilador creará una tabla de búsqueda que hace esta asociación, y simplemente sustituirá esa dirección en todas partes donde aparezca la variable en el programa. Otras veces, se adjunta una tabla de búsqueda a ese segmento de código y la variable se sustituirá por el lugar de la tabla donde debe buscar la dirección. La dirección se crea en el momento en que se ejecuta ese segmento de código.

Para aclarar esto un poco, imaginemos que hay una función llamada add, que simplemente suma dos números, colocando el resultado en x. En pseudocódigo:

la función add (entero a, entero b) devuelve un entero

empezar

entero x;

x = a + b;

retorno (x);

fin

Ok, entonces cuando se llama a esta función, tendrá una tabla de búsqueda que se parece a:

a: (inicio del espacio de datos para agregar) + 0;

b: (inicio del espacio de datos para agregar) + 2; (Los enteros son dos bytes).

x: (inicio del espacio de datos para agregar) + 4;

El paso 1 se convierte en esto:

1.1: La variable de detección que se utilizará es la tercera variable en la tabla (por lo tanto, se le asigna un valor 0f 2, ya que los valores comienzan en 0).

1.2: Las direcciones tienen una longitud fija, por lo tanto, multiplique 2 por el ancho de la dirección. En las computadoras modernas, eso es ocho bytes. Entonces leemos en ocho bytes, comenzando en la posición 16 desde el comienzo de la tabla.

1.3 Almacenar esos datos en un registro temporal, llamémoslo registro b.

El registro b ahora apunta a la memoria para la variable de interés. Podría entrar en direccionamiento indirecto, etc., pero realmente no vale la pena. Tienes la idea básica.

Entonces, ¿qué pasa con las cosas realmente complicadas, donde realmente ingresas en la ecuación cuando el programa se está ejecutando? ¡No puede hacer esto de la misma manera, seguramente!

Bueno, en cierto modo, lo hace de la misma manera. La cadena se analiza primero, en otras palabras, conviértela en una representación que la computadora pueda usar.

Un método para analizar esto es identificar cada vez que se usa una variable y cómo se usa, pero en el método que voy a mostrar, lo hace de la última a la primera. Entonces, en este caso, tendrías: +, 3, *, x, +, x. Esto se empuja sobre lo que se llama una pila. Con una pila, lo primero que se empuja es lo último que se recupera, por lo que se invierte el orden. Como resultado, lo que sale siempre está en el orden inverso. En este método, comienza con un valor de 0 en su registro de trabajo y siempre extrae dos elementos de la pila. El primero es el número o la variable con la que está trabajando, el segundo es un operador. No hay excepciones La secuencia de operaciones se convierte en:

  1. Establezca el acumulador en 0.
  2. Recupere los dos valores superiores en la pila.
  3. El primero es x, por lo tanto, recupere el valor de x e introdúzcalo en el registro temporal b.
  4. El segundo es agregar. La operación se realiza entre el registro temporal y el acumulador.
  5. El resultado se empuja al acumulador.
  6. Los pasos 2 a 5 se repiten hasta que no queden elementos.

Esto da como resultado el siguiente cálculo: ((0 + x) * x) + 3, que es lo mismo que x ^ 2 + 3. Como el código no cambia, siempre es un operador nuevo y un operando nuevo, Es muy rápido de realizar.

Debido a que este método convierte lo que ha escrito en una operación simple entre dos parámetros, no puede hacer ciertos cálculos. (7 + 3) * (8 + 2) no se pudo hacer porque no hay forma de expandir dos conjuntos de paréntesis. Lo que puede hacer es modificar este enfoque para crear valores intermedios, luego tratar los valores intermedios como variables de las que puede extraer el valor.

Lo que está haciendo aquí es dividir un cálculo en muchos cálculos mucho más simples, cada uno de los cuales es solo una operación simple entre dos valores.

Este enfoque es realmente muy poderoso en las computadoras modernas, porque puedes hacer muchas cosas en paralelo. En lugar de hacer cálculos simples uno tras otro, puede hacerlos todos al mismo tiempo, cada uno realizado en una CPU o GPU diferente. Los resultados intermedios se recopilan y el proceso se repite. Los cálculos se vuelven increíblemente rápidos. La Universidad de Manchester intentó escribir compiladores que hicieron exactamente esto, en la década de 1970, pero las computadoras en ese entonces no estaban a la altura y la velocidad de comunicación era tan grande que no hubo ningún beneficio. Hoy, algunos microprocesadores intentan hacer este tipo de cosas internamente.

Las ecuaciones realmente complicadas, como las gráficas, dan como resultado que el cálculo se realice muchas veces. Dado que ya hemos descrito un método para hacer muchos cálculos diferentes y almacenar sus resultados en diferentes lugares (los resultados intermedios antes de hacer la siguiente ronda de cálculos), lo que he descrito anteriormente es tan bueno para gráficos, vectores y matrices como para valores individuales

Los probadores de teoremas, la siguiente etapa más allá de esto, usan analizadores bastante más sofisticados para reducir los teoremas a una forma más manejable. Existen muchos métodos posibles, pero dos de ellos son la simplificación y la resolución. La simplificación simplemente sustituye valores y se cancela. Si esto da como resultado que el teorema declare que algo es igual a sí mismo (lo cual es cierto), entonces el teorema es obviamente cierto. Nunca puede no igualarse a sí mismo. Resolver es similar a la simplificación, ya que está tratando de mostrar que los dos lados son iguales, pero lo hace numéricamente en lugar de algebraicamente. Eso está bien cuando trabajas con un número finito (en realidad, pequeño) de valores discretos para cada variable, de modo que se puedan probar las posibilidades. Es bueno para números discretos porque los estados indefinidos no son necesariamente estados iguales. Un teorema puede ser verdadero en todos los casos sobre los que se define, pero nominalmente falso en algún caso indefinido. Si intenta usar métodos algebraicos solos cuando usa lógica discreta, es probable que obtenga resultados muy extraños.

Si busca una respuesta simplista a una pregunta compleja, profunda, ambigua y multifacética, aquí va:

Las ecuaciones matemáticas son una especie de acertijos lógicos, vinculados por reglas, matemáticas o reglas lógicas.

El hecho es que algunas reglas, aplicadas en el orden correcto, resuelven ecuaciones o no; Hay algunas ecuaciones que no se pueden resolver literalmente, solo numéricamente.

Esto significa que, a pesar de los ceros binarios y los que usted piensa, si cree que una computadora básicamente puede seguir una serie de órdenes (llamadas programas), puede realizar cualquier método escrito con ellas para resolver la ecuación.

Pero, desafortunadamente, su pregunta es ambigua, porque para resolver algo en matemáticas es muy amplio en concepto, puede expresar una ecuación con muchas variables e intentar obtener el valor de alguna variable, arreglando las otras; o incluso si algunas de las otras variables tienen un valor establecido, obtenga el resto del subconjunto de ellas (en valor o expresión). Esto se llama resolución numérica y se realiza con algunos métodos inteligentes como Regula-Falsi, Newton-Raphson, entre otros.

Por otro lado, una ecuación literal, como álgebra o integrales de análisis, y derivados, o incluso ecuaciones cuadráticas simples, se resuelven utilizando los métodos conocidos, en su mayoría tabulados. Elegir los pasos correctos para resolver una ecuación “solucionable” también es complejo, pero no es más que un método, y si es solucionable, el método existe, ¡simplemente haga un método para aplicar el método, y listo!

Los cálculos más complejos se realizan de la misma manera, utilizando métodos para llegar a una solución.

¿Cómo aplican estos programas (también conocidos como solucionadores) esos métodos y en qué orden? – esto es estudiado por muchos programadores algorítmicos, entre ellos existe un método de optimización llamado Sendero de Euler, que es un conocido sistema de razonamiento FOL (lógica de primer orden), utilizado realmente en OWL (semántica web).

La gama de soluciones y metodologías es muy amplia; Para comprender completamente cómo se hace, debe estudiar cálculo, luego algoritmos, luego compiladores y teoría del lenguaje, luego análisis y finalmente heurística para la solución lógica. Al menos 3 años de formación intensa, para llegar a una comprensión superficial de los métodos más profundos.

Uno de los primeros sistemas que utilizaron esta aproximación lógica fueron Lisp y Prolog, pero el tiempo para resolver un problema lógico nunca fue predecible ni limitado. En realidad, hay cientos de mejores métodos, que permiten formular y resolver ecuaciones complejas, relaciones lógicas y razonamiento, con miles de variables, utilizadas en la búsqueda intensiva de aproximaciones numéricas en “Análisis de elementos finitos”.

¡Hay un mundo entero debajo de esta capucha!

¡Buena suerte!

Hay dos formas principales en que las computadoras pueden resolver ecuaciones matemáticas.

La primera forma es numéricamente . Los números reales se aproximan mediante números de coma flotante, y generalmente tiene un algoritmo iterativo. Comienza con una suposición de una solución y con cada iteración, mejora su suposición. Por lo general, muy pronto converges en una solución. Las formas de hacerlo son otro hijo de Isaac Newton.

La segunda forma es simbólicamente . Programas como Mathematica, Maple y sus descendientes hacen un trabajo increíble en segundos para lo que lleva a las personas días o semanas, incluso después de años de entrenamiento. Como aludiste, en sus computadoras centrales hay un conjunto muy simple de instrucciones tales como suma, multiplicación y comparaciones. Las personas increíblemente talentosas como Stephen Wolfram, que han dominado las matemáticas y la programación de computadoras, pueden usar esas simples instrucciones para aplicar automáticamente el conocimiento que los matemáticos han acumulado a lo largo de los siglos.

En realidad, es el software el que hace todos los cálculos y lo muestra. Escribimos ciertos comandos o un conjunto de códigos en un lenguaje de programación particular e implementamos cierta lógica matemática.

Cuando hayas terminado de escribir algunos códigos largos. Procedes a verificar si hay algún posible error en el programa o no. Aquí usamos un software llamado Compilador. El compilador lee todo el conjunto de códigos. Si no hay ningún error, el compilador comienza las ejecuciones y realiza todas las operaciones. Sí, está hecho, ahora el resultado se muestra en la pantalla.

Tan simple como eso .. 🙂

No estoy muy seguro de lo que quieres decir con ecuaciones, pero haré lo mejor que pueda.

En primer lugar, las CPU no pueden multiplicarse ni dividirse. Esto se hace mediante sumas o restas repetidas.

En cuanto a, digamos, “Y = 4x ^ 2 -2”, eso lo hace el programa, en lugar del hardware. Muchos sistemas usan programas básicos de “adivinar y verificar”, donde simplemente se conectan y corrompen hasta que se ponen a cero.

Otros sistemas, generalmente sus CAS, formarán lo que se llama un árbol de sintaxis, básicamente lo que hacen es crear un árbol, donde cada nodo es un número. Esto se atraviesa de tal manera que se lee como: “x veces x veces 4 menos 2”, que luego se puede manipular moviendo nodos hasta que obtenga su respuesta. No profundizaré demasiado en esto, ya que es un poco difícil de representar en mi móvil mientras escribo esto

Si menciona ecuaciones que involucran raíces cuadradas, sen, cos, e ^ x, etc., existen varias funciones basadas en cálculos que pueden aproximar estos valores: una simple es una serie de maclaurina. Por ejemplo, e ^ x se puede representar como 1 + x + x / 2! + x / 3! +… X / n !, donde cada dígito conduce a una mayor precisión

¡Todas estas ideas varían según la máquina, pero espero haberle dado al menos una idea general de qué investigar si desea obtener más información!

Fuente: soy el autor de un libro sobre la programación de Z80 Machine Code

Las ecuaciones son resueltas por humanos. El código realmente contiene la solución general, ya que la CPU solo hace operaciones aritméticas y cosas así.

Debería dar ejemplos usted mismo si desea una respuesta más concreta.