Items tagged with integers

Feed

Hi,

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:

 

Update:

{-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)

 

Maple

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 http://www.mapleprimes.com/questions/146604-How-To-Choose-The-Parameters-To-The, 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];
ClearAll[f];
(f[{a_, b_, c_, d_}] :=
Quiet@Check[And @@ (IntegerQ /@ #), False]) &[sol]
poss = Select[
Tuples[Range[1,
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.

fib:=
proc(n::posint)
description "Calculate fib(n), the n'th Fibonacci number.";
option remember; # important for efficiency!
---MORE STUFF HERE---
end proc; # fib

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

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:

restart;

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;

   NumericEventHandler(division_by_zero=MyHandler); 

if Parentheses=yes then 

It:=proc(L1,L2)

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; 

P:=proc(L::list)

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

n:=nops(L);

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;

K:=convert(K,list);

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; 

else 

if NumbersOrder="strict order" then

K:=[convert(Numbers[1],string)];

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 

S:=permute(Numbers);

for s in S do

L:=[convert(s[1],string)];

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;  

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;

od; 

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"):

nops(M);

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):

nops(M);

for i to 10 do

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

Game.mws

 

 

 

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