• We've upgraded our forums. Please post any issues/requests in this thread.

Equation solving in c++

Joined
Sep 15, 2004
Messages
1,561 (0.32/day)
Likes
207
Location
Poland,Slask
System Name HAL
Processor Core i5 2500K
Motherboard Asus P8P67 Pro Rev3.1
Cooling stock
Memory 2x4GB Kingston 1600Mhz Blu
Video Card(s) Asus 560Ti DirectCuII TOP
Storage Kingston 120 3K SSD,WD Black WD1502FAEX
Display(s) LG 1440x900
Case Chieftec Mesh Midi
Audio Device(s) onboard
Power Supply Corsair TX750V2
Software w8
#1
Hello!

The business problem is calculating certain Task time's of workers. I have only their total time per day and the amount task's they did in that time those task are split into types (Its that 18 variable's I already mentioned). An example:
8x+4y+0z+...+5n=4300[seconds]
8x+0y+0z+....+0n=1000[seconds]

Yes some workers have only 1 task done and other don't but that's not a problem as I can zero-fill those spot's or easily ignore unsolvable equations.

I'm trying to solve 2000 equations (2000workers/day) with 15 variables (15 diffrent tasks) . I found an algorithm that solves an equation (Gauss elimination) so that part I have behind now I'm puzzled how to calculate all combination's of those equations. I need to match each equation with all solvable combination's of others. I want have a all the possible variable values as output then I can run some statistical program to find my sweet spot for the task time but that's another story.
Any nice c++ trick you could suggest ?
 

Fourstaff

Moderator
Staff member
Joined
Nov 29, 2009
Messages
9,376 (3.19/day)
Likes
2,100
Location
Home
System Name Asus K50-X5DAB \\ Orange!
Processor Athlon QL-65 2.2Ghz \\ 3570K
Motherboard Laptop \\ ASRock z77 Extreme4
Cooling Laptop \\ H100i
Memory 1x1GB + 1X2GB \\ 2x4Gb 1600Mhz CL9 Corsair XMS3
Video Card(s) Mobility Radeon HD4570 512mb \\ Zotac 660Ti OC 2Gb
Storage 250Gb \\ Samsung 840 250Gb + Toshiba DT01ACA300 3Tb
Display(s) 15.6" 1366x768 \\ LG 22EA53VQ
Case Laptop Chassis \\ NZXT Phantom 410 Black/Orange
Power Supply Power Brick \\ Corsair CXM500w
#2
If you have 15 unknowns, you will need at most 15 equations to solve the "system".

With that in mind, it means that you will have to readjust the order of your 2000 equations so that you run your Gaussian elimination for every combination of 15 equations, and its 2000C15 so you will need to test for 23773578694372656339690207516593086800 number of different combinations, but that will get all of your answers, with plenty of repeats.

You might possibly eliminate the 2000 equations by repeats (ie 1 of them is x times another), leaving you with a much more manageable number of equations to solve. Out of ideas for now, will come back if I have any more.

Edit:
If you have learned "basis" sets in linear algebra, then you might be able to use the concept, find all the basis sets in the 2000 equations, and then run the Gaussian elimination on each of the basis set to get your answers. Problem is that there are just about as many iterations you will need to do :eek:
 
Joined
Sep 1, 2010
Messages
5,899 (2.22/day)
Likes
6,562
#3
To solve that you'd need 2d array. There are several methods. The best is Gauss–Seidel method
http://en.wikipedia.org/wiki/Gauss–Seidel_method
It uses iterations. That process is time consuming tho. You won't need to know any "nice c++ trick" it's pure maths. if you got the maths part the realization this method on pc won't be hard.