0
|
4188 Views
|
7 Replies
|
0 Total Likes
View groups...
Share
GROUPS:

# Listing objects under conditions

Posted 9 years ago
 Hello, I cannot find how I could list all the 3-uples of integers {a,b,c} such that 0 < a ? b ? c < a+b and for instance c ? 10. I tried the condition command (/;) , Select, Cases,and other commands given in the Wolfram Documentation without any result. My goal is to let a discrete function act on those 3-uples that match the given condition. Could You please see the attached notebook and help me to find the correct coding to obtain ONLY the solutions and get rid of the useless "Null" . That you very much for help. Attachments:
7 Replies
Sort By:
Posted 9 years ago
 I think this may be what you are trying to do. where the n can be any number. f[n_] := Cases[ Tuples[Range[n], {3}], {a_, b_, c_} /; a <= b <= c && c <= a + b && IntegerQ[Sqrt[2 a^2 + 2 b^2 - c^2]/2]] f {{1, 1, 2}, {1, 3, 4}, {1, 5, 6}, {1, 7, 8}, {1, 9, 10}, {2, 2, 4}, {2, 4, 6}, {2, 6, 8}, {2, 8, 10}, {3, 3, 6}, {3, 5, 8}, {3, 7, 10}, {4, 4, 8}, {4, 6, 10}, {5, 5, 6}, {5, 5, 8}, {5, 5, 10}, {6, 8, 10}} Paul.I noticed that some of those results were zero, so if we want to test for the Integer part to be greater than zero we can add another test like so f[n_] := Cases[ Tuples[Range[n], {3}], {a_, b_, c_} /; a <= b <= c && c <= a + b && c > 0 && IntegerQ[p = Sqrt[2 a^2 + 2 b^2 - c^2]/2] && p > 0] Notice I set the sqrt part to equal p and then tested the p to be greater than zero afterwards.P
Posted 9 years ago
 Thank you for your answer. Indeed,I am only concerned by non zero values. But this is easily obtained by changing in your code c ? a+b into c < a+b. (in this problem which origin is geometrical a, b, c are sides of a real non flat triangle, thus the stict inequality ). Now, I would modify the code to add the value of the expression Sqrt[2 a^2 + 2 b^2 - c^2]/2] associated to each solution {a,b,c} .My idea was: (case n=12) in the attached notebook :f1[aInteger, bInteger, c_Integer] := If[0 < a <= b <= c < a + b, 1/2 Sqrt[2 a^2 + 2 b^2 - c^2]]Table[If[IntegerQ[f1[a, b, c]], Print[{a, b, c, f1[a, b, c]}]], {a, 1, 12}, {b, 1, 12}, {c, 1, 12}]This gives the asked values but not only these !!!! And for increasing values of n, time used is growing tremendously. Since the problem is now to count the solutions, I tried this : k[{aInteger, bInteger, cInteger, nInteger}] := If[(0 < a <= b <= c < a + b && c <= n && EvenQ[c]), 1/2 Sqrt[2 a^2 + 2 b^2 - c^2]];ll[n_Integer] := Cases[Flatten[ Table[k[{a, b, c, n}], {a, 1, n}, {b, 1, n}, {c, 1, n}]], _Integer];and then use CountThis code is not very "economical" : it is overwhelmed by great values of n.
Posted 9 years ago
 Thank you . I do not master properly the language. In your code ,I tried to change # + #2 into #1 +#2 and that changes nothing, (??) The initial condition a ? b ? c < a+b is not fullfilled by the function LessEqual but if this one is replaced by Less, we loose all cases where a = b or b = c. What I absolutely do not see is the way your code gives a ? b ? c, because the function which operates seems to give only that every composant is less than the sum of the two others. (# ? #1 + #2) In my diophantine problem,I have in fact c necessarily even. I cannot add this condition because the third composant c is not identified with the symbol #. Do not waste your patience if my questions are childish. Thank you for your help if you take time to teach. Best regards
Posted 9 years ago
 Sorry, I missed that the last condition is indeed <. Moreover, # is the same as #1 that is why there was no differenc after your change. Is this ok now? Don't hesitate to ask if something is still not clear.
Posted 9 years ago
 The only question that puzzles me is that I may read the code erroneously because the condition a ? b ? c is not visible ( I understand that the code gives a ? b+c, b ? c+a , c ? a+b ). This reading must be wrong.
Posted 9 years ago
 Select applies function in second argument to each triple {a,b,c}. When we have # < #3 & @@ #& it means we check if a<c in that triple. You can write it #[] < #[] & to skip function composition. Ok, now in our code we are doing a<=b<=c
Posted 9 years ago
 Semi automatic, brute force approach, but works for less memory consuming examples: Select[Tuples[Range, {3}], # <= #2 <= #3 < # + #2 & @@ # & ] `