Cuando lo resuelves simbólicamente, obtienes:
[matemática] \ left [\ frac {1} {2 a ^ {2}} \ left (- 2 ac + b ^ {2} – b \ sqrt {- 4 ac + b ^ {2}} \ right), \ quad \ frac {1} {2 a ^ {2}} \ left (- 2 ac + b ^ {2} + b \ sqrt {- 4 ac + b ^ {2}} \ right) \ right] [/ matemáticas]
El pseudocódigo es:
def resolver (a, b, c):
retorno [(-2 * a * c + b ** 2 – b * sqrt (-4 * a * c + b ** 2)) / (2 * a ** 2), (-2 * a * c + b ** 2 + b * sqrt (-4 * a * c + b ** 2)) / (2 * a ** 2)]
- Si el inicio se trata de resolver un problema, ¿qué problema están resolviendo las nuevas empresas de bebidas o cafés?
- ¿Cuál es la expresión regular para una fecha en el formato ’17 de marzo de 2016′?
- ¿Me puede mostrar cómo resolver este problema?
- ¿Qué es más eficiente para encontrar una solución para el problema del vendedor ambulante, una búsqueda puramente aleatoria o un algoritmo genético? ¿Hay un papel?
- Cómo asignar el antiguo objeto vectorial al objeto vectorial en C ++
Probablemente desee comprobar si [math] b ^ 2 – 4ac [/ math] es positivo, si su idioma no admite números complejos. Además, vuelva a colocar las soluciones en la ecuación original y verifique si son correctas.
Si desea resolverlo numéricamente, puede usar el método de bisección. Citando Wikipedia:
La entrada para el método es una función continua [matemática] f [/ matemática], un intervalo [matemática] [a, b] [/ matemática] y los valores de función [matemática] f (a) [/ matemática] y [ matemáticas] f (b) [/ matemáticas]. Los valores de la función son de signo opuesto (hay al menos un cruce por cero dentro del intervalo). Cada iteración realiza estos pasos:
- Calcule [math] c [/ math], el punto medio del intervalo, [math] c = 0.5 \ cdot (a + b) [/ math].
- Calcule el valor de la función en el punto medio, [matemática] f (c) [/ matemática].
- Si la convergencia es satisfactoria (es decir, [matemática] a – c [/ matemática] es suficientemente pequeña, o [matemática] f (c) [/ matemática] es suficientemente pequeña), devuelva [matemática] c [/ matemática] y pare iterando
- Examine el signo de [matemáticas] f (c) [/ matemáticas] y reemplace [matemáticas] (a, f (a)) [/ matemáticas] o [matemáticas] (b, f (b)) [/ matemáticas] con [matemática] (c, f (c)) [/ matemática] para que haya un cruce por cero dentro del nuevo intervalo .
¿Tiene sentido?
…
El pseudocódigo (está bien, es Python):
de matemáticas import sqrt
def same_sign (a, b):
devuelve a * b> 0
def bisect (func, bajo, alto):
tolerancia = 0.001
afirmar no same_sign (func (bajo), func (alto))
mientras que (alto – bajo) / 2.0> tolerancia:
punto medio = (bajo + alto) / 2.0
if same_sign (func (bajo), func (punto medio)):
bajo = punto medio
más:
alto = punto medio
punto medio de retorno
def f (a, b, c):
devuelve lambda x: a * x + b * sqrt (x) + c
impresión bisecta (f (1.4, -2.5, -0.5), 0, 10) # 3.87084960938
Como [math] x [/ math] representa el tiempo (como has dicho en los comentarios), el nivel bajo puede ser [math] 0 [/ math]. Alto puede comenzar en [matemáticas] 100 [/ matemáticas]. Mientras same_sign(low, high)
, make low = high
y high += 100
. Luego comience bisect(f(a, b, c), low, high)
.
También podrías usar el Newton – Raphson. Aquí usará la derivada de la función (que es [matemática] a + \ frac {b} {2 \ sqrt {x}} [/ matemática]). El algoritmo no es difícil de entender, eche un vistazo a la página de Wikipedia.
Fuente:
http://www.sosmath.com/calculus/…
Método de bisección