Items tagged with integers



I am designing a power transformer using Maple, and I am trying to solve for the minimum number of turns around my core for the desired effect. The equations to solve include numbers of turns (must be positive integers) and other constraints (positive floats).

To validate my worksheet, I am beta-testing it on an existing transformer, so I know of at least one solution that works. But when I submit the equations to Maple, it can't find the solution I know with integer solutions.


The equation is :

SOL := `assuming`([solve({N__2/N__1 = m__t, k__c*L__L(g__ap*Unit('m'), N__1)*I__M__pk = (1/2)*V__sec*T__res/m__t, g__ap <= 2*10^(-3), B__max(g__ap*Unit('m'), N__1, I__M__pk) <= B__max__core}, {N__1, N__2, g__ap, I__M__pk}, UseAssumptions)], [N__1::posint, N__2::posint, g__ap::positive])


And Maple's answer : 

{N__1 = 7.701193685, N__2 = 12.50000000*N__1, I__M__pk = (-1.855203719*10^9*g__ap^2+1.523613883*10^11*g__ap+5.590656409*10^6)*Unit('A')/(5.000000*10^6+2.43902439*10^8*g__ap), I__M__pk = (-1.100291349*10^11*g__ap^2+9.036307746*10^12*g__ap+3.315727980*10^8)*Unit('A')/(N__1^2*(5.000000*10^6+2.43902439*10^8*g__ap)), g__ap <= 0.2000000000e-2, 0. < g__ap}


Except I know there is a solution with N__1 = 6 and N_82 = 75. If I force n__1:=75 and solve again for the other variables, the solution is OK : 

X := `assuming`([solve({N__2/N__1 = m__t, k__c*L__L(g__ap*Unit('m'), N__1)*I__M__pk = (1/2)*V__sec*T__res/m__t, g__ap <= 2*10^(-3), B__max(g__ap*Unit('m'), N__1, I__M__pk) <= B__max__core}, {N__2, g__ap, I__M__pk}, UseAssumptions)], [N__2::posint, g__ap::positive])

And the answer :

X := {N__2 = 75., I__M__pk = -0.3759328777e-1*Unit('Wb')*(8.130081300*10^10*g__ap^2-6.676951220*10^12*g__ap-2.45000000*10^8)/(Unit('H')*(5.000000*10^6+2.43902439*10^8*g__ap)), g__ap <= 0.2000000000e-2, 0. < g__ap}


I am a bit puzzled about why Maple doesn't find this solution...


Thank you very much for your help.


I have the system:



{-1/2 < 2*f*(1/53)+7*g*(1/53), 3/106 < 7*f*(1/53)-2*g*(1/53), 2*f*(1/53)+7*g*(1/53) < -37/106, 7*f*(1/53)-2*g*(1/53) < 1/2}


which I wish to solve over integers but isolve() gives me "Warning, solutions may have been lost and no solutions". The solutions exist and are {[f =0, g = -3] || [f = 1, g = -4], [f = 1, g = -3] || [f = 2, g = -4]}, but I cannot obtain them with Maple. Could you tell me what is wrong and how I should treat this kind of problems in the future, please.

Mathematica 10.0

Reduce[{-1/2 < 2*f*(1/53) + 7*g*(1/53), 3/106 < 7*f*(1/53) - 2*g*(1/53), 2*f*(1/53) + 7*g*(1/53) < -37/106, 7*f*(1/53) - 2*g*(1/53) < 1/2}, {f, g}, Integers]

(f == 0 && g == -3) || (f == 1 && g == -4) || (f == 1 &&
   g == -3) || (f == 2 && g == -4)



isolve({-1/2 < 2*f*(1/53)+7*g*(1/53), 3/106 < 7*f*(1/53)-2*g*(1/53), 2*f*(1/53)+7*g*(1/53) < -37/106, 7*f*(1/53)-2*g*(1/53) < 1/2});
Warning, solutions may have been lost


At here, I posted my question and I got the answer. Now I have a new question, is there a program that can be solved for many equation with integers solutions. For example, the equation has the form sqrt(a x + b) = c x + d, sqrt(a x + b) - sqrt(c x + d) = k,...

With Mathematica, my code that solve the equation a x + b == Sqrt[c x + d]

ClearAll[a, b, c, d];
sol = x /. Solve[{a x + b == Sqrt[c x + d]} , x, Reals];
(f[{a_, b_, c_, d_}] :=
Quiet@Check[And @@ (IntegerQ /@ #), False]) &[sol]
poss = Select[
20], {4}], #[[1]] =!= 0 && #[[2]]^2 - #[[4]] =!= 0 &&
GCD[#[[1]], #[[3]], #[[2]], #[[4]]] == 1 && f[#] &];
Take[poss, Length[poss]];
With[{s = sol},
getSolution[poss_] := Block[{a, b, c, d}, {a, b, c, d} = poss;
Join[poss, s]]]
getSolution /@ poss


When I repair  a x + b == Sqrt[c x + d] into Sqrt[a x + b] + Sqrt[c x + d] == k, then I have a new propram, or if I replace into Sqrt[a x + b] - Sqrt[c x + d] == k, I  have also a new program. How can I do like that with Maple?


Need to create a fibonacci defintiion using this form..Any help appreciated..thanks in advance

The Fibonacci numbers Fn are defined for all positive integers n as follows:

Fn = ( 1,                 n =1, 2 , )    

      (Fn−1 + Fn−2 , otherwise.)

 Complete the definition of fib so that fib(n) returns Fn for all positive integers n. You must compute Fn using the below definition! A recursive proc is most natural.

description "Calculate fib(n), the n'th Fibonacci number.";
option remember; # important for efficiency!
end proc; # fib

solve 30a+75b+110c+85d+255e+160f+15g+12h+120i=8000 over the positive integers

The well-known  combinat[composition]  command computes and returns a list containing all distinct ordered  k-tuples of positive integers whose elements sum to  . These are known as the compositions of  n .  For some applications, additional constraints are required for the elements of these k-tuples, for example, that they are within a certain range.

The  Composition  procedure solves this problem. Required parameters:  n - a nonnegative integer, - a positive integer. The parameter  res  is the optional parameter (by default  res is  ). If  res  is a number, all elements of  k-tuples must be greater than or equal  res .  If  res  is a range  a .. b ,   all elements of  k-tuples must be greater than or equal  a  and  less than or equal  b .  Composition(n,k,1)  is equivalent to  combinat[composition](n,k) .


The code of the procedure:

Composition := proc (n::nonnegint, k::posint, res::{range, nonnegint} := 0)

local a, b, It, L0; 

if res::nonnegint then a := res; b := n-(k-1)*a  else a := lhs(res); b := rhs(res) fi;

if b < a or b*k < n then return `No solutions` fi; 

It := proc (L)

local m, j, P, R, i, N;

m := nops(L[1]); j := k-m; N := 0;

for i to nops(L) do

R := n-`+`(op(L[i]));

if R <= b*j and a*j <= R then N := N+1;

P[N] := [seq([op(L[i]), s], s = max(a, R-b*(j-1)) .. min(R, b))] fi;


[seq(op(P[s]), s = 1 .. N)];

end proc;

L0 := [[]];


end proc:


Three simple examples:

Composition(10,3); ``;   # All terms greater than or equal 0

Composition(10,3, 2);   # All terms greater than or equal 2

Composition(10,3, 2..4);   # All terms greater than or equal 2 and less than or equal to 4 



A more complex example. The problem - to find all the numbers in the range  1 .. 99999999  whose digits sum is equal to 21 .

Each number is represented by a list of digits from left to right, replacing missing digits at the left with zeros.

M:=Composition(21,8, 0..9):  

nops(M);  # The number of solutions

[seq(M[1+100000*i], i=0..9)]; # 10 solutions from the list M starting the first one

seq(add(%[i,k]*10^(8-k), k=1..8),i=1..nops(%));  # Conversion into numbers



The procedure  NumbersGame  generalizes the well-known 24 game  (implementation in Maple see here), as well as related issues (see here and here).


Required parameters of the procedure:

Result is an integer or a fraction of any sign.

Numbers is a list of positive integers.


Optional parameters:

Operators is a list of permitted arithmetic operations. By default  Operators is  ["+","-","*","/"]

NumbersOrder is a string. It is equal to "strict order" or "arbitrary order" . By default  NumbersOrder is "strict order"

Parentheses is a symbol  no  or  yes . By default  Parentheses is  no 


The procedure puts the signs of operations from the list  Operators  between the numbers from  Numbers  so that the result is equal to Result. The procedure finds all possible solutions. The global  M  saves the list of the all solutions.


Code the procedure:


NumbersGame:=proc(Result::{integer,fraction}, Numbers::list(posint), Operators::list:=["+","-","*","/"], NumbersOrder::string:="strict order", Parentheses::symbol:=no)

local MyHandler, It, K, i, P, S, n, s, L, c;

global M;

uses StringTools, ListTools, combinat; 

 MyHandler := proc(operator,operands,default_value)

      NumericStatus( division_by_zero = false );

      return infinity;

   end proc;


if Parentheses=yes then 


local i, j, L;

for i in L1 do

for j in L2 do

L[i,j]:=seq(Substitute(Substitute(Substitute("( i Op j )","i",convert(i,string)),"j",convert(j,string)),"Op",Operators[k]), k=1..nops(Operators));

od; od;

L:=convert(L, list);

end proc; 


local n, K, i, M1, M2, S;


if n=1 then return L else

for i to n-1 do

M1:=P(L[1..i]); M2:=P(L[i+1..n]);

K[i]:=seq(seq(It(M1[j], M2[k]), k=1..nops(M2)), j=1..nops(M1))

od; fi;


end proc;

if NumbersOrder="arbitrary order" then S:=permute(Numbers); K:=[seq(op(Flatten([op(P(s))])), s=S)] else  K:=[op(Flatten([op(P(Numbers))]))] fi; 


if NumbersOrder="strict order" then


for i in Numbers[2..-1] do

K:=[seq(seq(cat(k, Substitute(Substitute(" j i","j",convert(j,string)),"i",convert(i,string))), k in K), j in Operators)]

od;   else 


for s in S do


for i in s[2..-1] do

L:=[seq(seq(cat(k, Substitute(Substitute(" j i","j",convert(j,string)),"i",convert(i,string))), k in L), j in Operators)]

od; K[s]:=op(L) od; K:=convert(K,list) fi;  


M:='M'; c:=0;

for i in K do

if parse(i)=Result then c:=c+1; if Parentheses=yes then M[i]:= convert(SubString(i,2..length(i)-1),symbol)=convert(Result,symbol) else M[i]:=convert(i,symbol)=convert(Result,symbol) fi; fi;


if c=0 then M:=[]; return `No solutions` else M:=convert(M,list);  op(M) fi; 

end proc:


Examples of use.


Example 1:

NumbersGame(1/20, [$ 1..9]);

     1 * 2 - 3 + 4 / 5 / 6 * 7 / 8 * 9 = 1/20


Example 2. Numbers in the list  Numbers  may be repeated and permitted operations can be reduced:

NumbersGame(15, [3,3,5,5,5], ["+","-"]);

         3 - 3 + 5 + 5 + 5 = 15


Example 3. 

NumbersGame(10, [1,2,3,4,5]);

         1 + 2 + 3 * 4 - 5 = 10

If the order of the number in Numbers is arbitrary, then the number of solutions is greatly increased (10 solutions displayed):

NumbersGame(10, [1,2,3,4,5], "arbitrary order"):


for i to 10 do

M[1+50*(i-1)] od;

If you use the parentheses, the number of solutions will increase significantly more (10 solutions displayed):

NumbersGame(10, [1,2,3,4,5], "arbitrary order", yes):


for i to 10 do

M[1+600*(i-1)] od;





I have noticed that Maple's command isolve doesn't always seem to work for me. An example would be solving

x^2 + y^2 +z^2 =3 over the integers. Maple does not return any solutions.

I have found that isolve work for two variables, so I have just been iterating the third variable and applying isolve. However what if I want to solve  something with negative coefficients like : x^2 +y^2 +2*z^2 +x*y -y*z, then I have to be careful about which variable I iterate and the bounds are not always obvious.

Is there an easy fix to solve a homogeneous degree 2 polynomial in three variables over the integers ? Thanks!

Recursive algorithm for finding the sum of the first n odd positive integers.

 procedure   odd_sum n: positive integer )

    if   n = 1   then   return   1

    else   return   

I have found very little help about the Generate command of the RandomTools package.

I also have minor gripes about the syntax. And what better way to deal with these than to voice them?

This is how I was able to generate random lists and random Matrices.

A list of 10 random integers between 1 and 100:

L := RandomTools:-Generate(list(integer(range=1..100),10));

      L := [47, 8, 46, 44, 9, 77, 59, 16, 1, 70]


Page 1 of 1