Programando una ecuación de álgebra

votos
2

en otra publicación, MSN me dio una buena guía para resolver mi problema de álgebra ( Calcular el precio de oferta del costo total ). Ahora, aunque puedo calcularlo a mano, estoy completamente atascado en cómo escribir esto en pseudocódigo o código. ¿Alguien podría darme una pista rápida? Por cierto, quiero calcular la oferta dado el costo final.

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
Publicado el 13/03/2009 a las 02:08
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

Debido al uso de PINy ceiling, no veo una manera fácil de invertir el cálculo. Suponiendo que bidtenga una precisión fija (supongo que dos decimales detrás del punto) siempre puede usar una búsqueda binaria (ya que las funciones son monótonas).

Editar: Después de pensarlo un poco más, observé que, tomando x = bid*1.02 + 100, tenemos que los costos finales están entre x + 15 (exclusivo) y x + 70 (inclusive) (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 la nota a continuación) para bidtodos están más separados que esto, puede tomar x+15 = final costy x+70 = final costobtener los casos / valores correctos de uso y costos agregados y simplemente resolver esa ecuación ( que ya no tiene ninguno PINni ceilingen él).

Para ilustrar, deje que el costo final sea 222. De x+15 = 222esto se sigue eso bid = 107/1.02 = 104.90. Entonces tenemos que los costos de uso están dados por bid*0.1y que los costos adicionales son 5. En otras palabras, obtenemos final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105y por lo tanto bid = (222-105)/1.12 = 104.46. Como este valor de bidsignifica que se tomaron los valores correctos para el uso y los costos adicionales, sabemos que esta es la solución.

Sin embargo, si hubiéramos analizado primero x+70 = 222, obtendríamos lo siguiente. Primero lo tenemos para esta suposición de que bid = 52/1.02 = 50.98. Esto significa que los costos de uso son 10y los costos adicionales son 5. Entonces nos damos final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115y por lo tanto bid = (222-115)/1.02 = 104.90. Pero si bides 104.90así, los costos de uso no son , 10pero bid*0.1esta no es la solución correcta.

Espero haberlo explicado con suficiente claridad. Si no es así, por favor hágamelo saber.

NB: Con valores especiales me refiero a aquellos para los cuales cambia la función que define los valores de uso y los costos agregados. Por ejemplo, para el costo de uso, estos valores son 100y 500: a continuación 100usa 10, arriba 500usa 50y entre uso bid*0.1.

Respondida el 13/03/2009 a las 02:47
fuente por usuario

votos
3

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, puede 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 suma su costo en cada función, obtendrá un valor de oferta estimado para ese rango. Debe verificar que este valor efectivamente se encuentre dentro de ese rango válido de 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 es estrictamente creciente, a lo sumo una de esas funciones dará un valor aceptable. Pero para algunos insumos, ninguno de ellos 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, cost = 1182por ejemplo.

Respondida el 13/03/2009 a las 03:32
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more