Programmieren eine algebraische Gleichung

stimmen
2

in einem anderen Beitrag, gab MSN mir eine gute Führung auf mein Algebra Problem zu lösen ( Geldkurs von Gesamtkosten Berechnung ). Nun, auch wenn ich es von Hand berechnen kann, bin ich ganz fest, wie dies in Pseudo - Code oder Code zu schreiben. Jeder kann mir einen kurzen Hinweis geben? By the way, ich will die endgültig Kosten das Angebot gegeben berechnen.

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
Veröffentlicht am 13/03/2009 um 02:08
quelle vom benutzer
In anderen Sprachen...                            


2 antworten

stimmen
2

Durch die Verwendung von PINund ceilingsehe ich nicht eine einfache Möglichkeit , die Berechnung zu invertieren. Unter der Annahme , dass bideine feste Genauigkeit (I zwei Dezimalstellen hinter dem Punkt erraten würde) , können Sie immer eine binäre Suche verwenden (wie die Funktionen monoton sind).

Edit: Nach etwas mehr darüber nachzudenken, ich beobachtet , dass unter x = bid*1.02 + 100, haben wir , dass die endgültigen Kosten sind zwischen x + 15 (exklusiv) und x + 70 (einschließlich) (dh x+15 < final cost < x+70). Angesichts der Größe dieses Bereichs ( 70-15=55) und der Tatsache , dass die speziellen Werte (siehe Hinweis unten) für bidalle außer mehr sind als diese, die Sie ergreifen können x+15 = final costund x+70 = final costerhalten die richtigen Fälle / Werte der Nutzung und zusätzlichen Kosten und einfach diese Gleichung lösen ( die nicht mehr entweder PINoder ceilingdarin).

Zur Veranschaulichung läßt die endgültig Kosten sein 222. Aus x+15 = 222folgt daraus , dass bid = 107/1.02 = 104.90. Dann haben wir , dass die Nutzungskosten sind gegeben durch bid*0.1und dass die zusätzlichen Kosten sind 5. Mit anderen Worten, wir erhalten final cost = bid*0.1 + bid*0.02 + 5 + 100 + bid = bid*1.12 + 105und deshalb bid = (222-105)/1.12 = 104.46. Da dieser Wert bidMittel die richtigen Werte für die Nutzung und zusätzliche Kosten genommen wurden, wissen wir , dass dies die Lösung ist.

Wenn wir zum ersten Mal betrachtet hätte aber x+70 = 222, würden wir die folgende bekommen. Zuerst haben wir , dass das für diese Annahme erhalten bid = 52/1.02 = 50.98. Dies bedeutet , dass Nutzungskosten sind 10und die zusätzlichen Kosten sind 5. So bekommen wir final costs = 10 + bid*0.02 + 5 + 100 + bid = bid*1.02 + 115und deshalb bid = (222-115)/1.02 = 104.90. Aber wenn bidist 104.90dann die Nutzungskosten sind nicht 10aber bid*0.1, so ist dies nicht die richtige Lösung.

Ich hoffe, ich erklärte es deutlich genug. Wenn nicht, lassen Sie mich bitte wissen.

NB: Mit speziellen Werten meine ich diejenigen , für die die Funktion ändern Sie die Werte der Nutzung und zusätzliche Kosten definieren. Zum Beispiel für die Nutzung Kosten sind diese Werte 100und 500: below 100Sie verwenden 10, über die 500Sie verwenden 50und in zwischen Ihnen verwenden bid*0.1.

Beantwortet am 13/03/2009 um 02:47
quelle vom benutzer

stimmen
3

Die Funktion vereinfacht sich zu:

                  / 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

Wenn Sie jedes Stück als separate Funktion betrachten, können sie umgekehrt werden:

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

Wenn Sie Ihre Kosten in jeder Funktion Plug erhalten Sie einen geschätzten Gebot für diesen Bereich. Sie müssen überprüfen, dass dieser Wert in der Tat ist innerhalb des gültigen Bereich funktioniert.

Beispiel:

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!

Da die ursprüngliche Funktion streng nimmt zu, höchstens einer dieser Funktionen wird einen akzeptablen Wert. Aber für einige Eingänge keiner von ihnen einen guten Wert. Dies liegt daran, die ursprüngliche Funktion über diesen Werten springt.

final cost(1000) = 1.02 * 1000 + 160 = 1180
final cost(1001) = 1.02 * 1001 + 165 = 1186

So wird keine Funktion einen akzeptablen Wert für gibt cost = 1182zum Beispiel.

Beantwortet am 13/03/2009 um 03:32
quelle vom benutzer

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