Programación de una ecuación algebraica
-
22-07-2019 - |
Pregunta
en otro post, MSN me dio una buena guía en la solución de mi problema de álgebra (El cálculo del precio de la oferta de costo total).Ahora, a pesar de que yo puede calcular a mano, estoy completamente atascado en la forma de escribir esto en pseudocódigo o código.Alguien me podría dar una rápida pista?Por cierto, quiero calcular la oferta dado que los gastos finales .
usage cost(bid) = PIN(bid*0.10, 10, 50)
seller cost(bid) = bid*.02
added cost(bid) = PIN(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10)
storing cost(bid) = 100
So the final cost is something like:
final cost(bid) = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 20) + PIN(ceiling((bid - 1000)/2000)*10, 0, 20) + bid*.02 + 100 + bid
Solve for a particular value and you're done.
For example, if you want the total cost to be $2000:
2000 = PIN(bid*.1, 10, 50) + pin(ceiling(bid/500)*5, 5, 10) + PIN(ceiling((bid - 1000)/2000)*5, 0, 10) + bid*.02 + 100 + bid.
Bid must be at least > 1500 and < 2000, which works out nicely since we can make those PIN sections constant:
2000 = 50 + 10 + 5 + 100 + bid*1.02
1835 = bid*1.02
bid = 1799.0196078431372549019607843137
Solución
La función se simplifica a:
/ 1.02 * bid + 115 bid < 100
| 1.12 * bid + 105 bid <= 500
final cost(bid) = | 1.02 * bid + 160 bid <= 1000
| 1.02 * bid + 165 bid <= 3000
\ 1.02 * bid + 170 otherwise
Si considera cada pieza como una función separada, pueden invertirse:
bid_a(cost) = (cost - 115) / 1.02
bid_b(cost) = (cost - 105) / 1.12
bid_c(cost) = (cost - 160) / 1.02
bid_d(cost) = (cost - 165) / 1.02
bid_e(cost) = (cost - 170) / 1.02
Si conecta su costo en cada función, obtiene un valor de oferta estimado para ese rango. Debe verificar que este valor esté dentro del rango válido de las funciones.
Ejemplo:
cost = 2000
bid_a(2000) = (2000 - 115) / 1.02 = 1848 Too big! Need to be < 100
bid_b(2000) = (2000 - 105) / 1.12 = 1692 Too big! Need to be <= 500
bid_c(2000) = (2000 - 160) / 1.02 = 1804 Too big! Need to be <= 1000
bid_d(2000) = (2000 - 165) / 1.02 = 1799 Good. It is <= 3000
bid_e(2000) = (2000 - 170) / 1.02 = 1794 Too small! Need to be > 3000
Just to check:
final cost(1799) = 1.02 * 1799 + 165 = 2000 Good!
Dado que la función original está aumentando estrictamente, a lo sumo una de esas funciones dará un valor aceptable. Pero para algunas entradas, ninguna de ellas dará un buen valor. Esto se debe a que la función original salta sobre esos valores.
final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186
Por lo tanto, ninguna función dará un valor aceptable para cost = 1182
por ejemplo.
Otros consejos
Debido a la utilización de PIN
y ceiling
, No veo una manera fácil de invertir el cálculo.Suponiendo que bid
tiene una precisión fija (supongo dos decimales detrás del punto) siempre se puede utilizar una búsqueda binaria (como las funciones monótonas).
Editar:Después de pensarlo un poco más, he observado que, teniendo x = bid*1.02 + 100
, tenemos que los costos finales son entre x+15 (exclusivo) x+70 (incluido) (es decir, x+15 < final cost < x+70
).Dado el tamaño de este rango (70-15=55
) y el hecho de que los valores especiales (ver nota abajo) para bid
son todos más aparte de esto, usted puede tomar x+15 = final cost
y x+70 = final cost
, de obtener el derecho de casos y/o valores de uso y los costes añadidos y simplemente resolver la ecuación (que ya no tiene PIN
o ceiling
en el mismo).
Para ilustrar, dejar que el coste final se 222
.De x+15 = 222
de ello se sigue que bid = 107/1.02 = 104.90
.Entonces tenemos que el uso de los costos están dados por bid*0.1
y que los costos adicionales son 5
.En otras palabras, obtenemos final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105
y por lo tanto bid = (222-105)/1.12 = 104.46
.Como este valor de bid
significa el derecho de los valores de uso y los costos adicionales fueron tomadas, sabemos que esta es la solución.
Sin embargo, si nos hubiese mirado x+70 = 222
, obtendríamos el siguiente.Primero obtenemos que para este supuesto de que bid = 52/1.02 = 50.98
.Esto significa que los costos de uso son 10
y los gastos adicionales que se 5
.Así, obtenemos final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115
y por lo tanto bid = (222-115)/1.02 = 104.90
.Pero si bid
es 104.90
a continuación, el uso de los costos no son 10
pero bid*0.1
, así que esto no es la solución correcta.
Espero que os he explicado con suficiente claridad.Si no, por favor hágamelo saber.
N. B.:Con valores especiales me refiero a aquellos para los que la función de definir los valores de uso y los costos de cambio.Por ejemplo, para el coste de utilización, estos valores son 100
y 500
:a continuación 100
utiliza 10
, por encima de 500
utiliza 50
y en el medio se utiliza bid*0.1
.