Re: [Scilab-users] Variable user equation input (2, 3 or more)
Hello, > De : De la part de Lester Anderson > Envoyé : samedi 30 avril 2022 07:15 > > My query, is it possible to make this more generalised and vary the > number of input equations and give the user an option to specify the number > of equations? I don't know this problem and its solution but as a first idea, I'd use matrices for the remainders and moduli, one line per equation (so n lines for n equations). So 1. Ask the number of equations n 2. Loop to ask the moduli and remainders, and fill in the lines of the matrices. Regards -- Christophe Dang Ngoc Chan Mechanical calculation engineer General This e-mail may contain confidential and/or privileged information. If you are not the intended recipient (or have received this e-mail in error), please notify the sender immediately and destroy this e-mail. Any unauthorized copying, disclosure or distribution of the material in this e-mail is strictly forbidden. ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
Re: [Scilab-users] Variable user equation input (2, 3 or more)
As a test, I increased the value n (iterations) and that forced it to converge on the value 150999. Sounds like I need a test of convergence. On Sun, 1 May 2022 at 08:37, Lester Anderson wrote: > Having an issue with the code: > > Tried: x ≡ 2 mod 11; 3 mod 12; 4 mod 13; 5 mod 17; 6 mod 19 (result should > be 150999 but get 442719) > Also checked x ≡ 4 mod 11; 3 mod 17 (result should be 37 but get 136) > However, 3 equations work fine! > > I have pinned down the problem to M_inv, where it is not looping through > all elements (m) but doing one less (eg 4 instead of 5). > > for i=1:length(m) > for j=1:n > if modulo(((M_ratio(i)*j)-1),m(i)) == 0 > M_inv(i)=j; > xn(i)=(a(i)*M_ratio(i)*M_inv(i)); > end > endend > > With the code snippet above, it should iterate 5 times for 5 input values of > a and m, it is not generating M_inv(5), or M_inv(2) (2 equations). > > I have verified what the results should be in Maxima CAS, > > [image: image.png] > > Any ideas what is going wrong? > > Thanks > > On Sun, 1 May 2022 at 05:32, Lester Anderson > wrote: > >> Many thanks Samuel >> >> On Sat, 30 Apr 2022 at 17:28, Samuel Gougeon wrote: >> >>> Le 30/04/2022 à 18:26, Samuel Gougeon a écrit : >>> >>> Le 30/04/2022 à 18:14, Lester Anderson a écrit : >>> >>> Sorted the code with multiple equations. Not too sure how to deal with >>> the messagebox list of equations. >>> Still have to do that manually - unless there is a way to automatically >>> build this? >>> >>> Can this multiple text string be done via a for loop to build a list ? >>> >>> Thanks >>> >>> >>> Please \n as trailer for the 2nd msprintf as well: >>> >>> [ msprintf("x ≡ %d mod %d\n", a(:), m(:)) >>>msprintf("The solution for (x): %d mod %d\n", x(:), M(:)) >>> 'Solution of 3 congruence equations'] >>> >>> >>> ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
Re: [Scilab-users] Variable user equation input (2, 3 or more)
Having an issue with the code: Tried: x ≡ 2 mod 11; 3 mod 12; 4 mod 13; 5 mod 17; 6 mod 19 (result should be 150999 but get 442719) Also checked x ≡ 4 mod 11; 3 mod 17 (result should be 37 but get 136) However, 3 equations work fine! I have pinned down the problem to M_inv, where it is not looping through all elements (m) but doing one less (eg 4 instead of 5). for i=1:length(m) for j=1:n if modulo(((M_ratio(i)*j)-1),m(i)) == 0 M_inv(i)=j; xn(i)=(a(i)*M_ratio(i)*M_inv(i)); end endend With the code snippet above, it should iterate 5 times for 5 input values of a and m, it is not generating M_inv(5), or M_inv(2) (2 equations). I have verified what the results should be in Maxima CAS, [image: image.png] Any ideas what is going wrong? Thanks On Sun, 1 May 2022 at 05:32, Lester Anderson wrote: > Many thanks Samuel > > On Sat, 30 Apr 2022 at 17:28, Samuel Gougeon wrote: > >> Le 30/04/2022 à 18:26, Samuel Gougeon a écrit : >> >> Le 30/04/2022 à 18:14, Lester Anderson a écrit : >> >> Sorted the code with multiple equations. Not too sure how to deal with >> the messagebox list of equations. >> Still have to do that manually - unless there is a way to automatically >> build this? >> >> Can this multiple text string be done via a for loop to build a list ? >> >> Thanks >> >> >> Please \n as trailer for the 2nd msprintf as well: >> >> [ msprintf("x ≡ %d mod %d\n", a(:), m(:)) >>msprintf("The solution for (x): %d mod %d\n", x(:), M(:)) >> 'Solution of 3 congruence equations'] >> >> >> ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
Re: [Scilab-users] Variable user equation input (2, 3 or more)
Sorted the code with multiple equations. Not too sure how to deal with the messagebox list of equations. Still have to do that manually - unless there is a way to automatically build this? Can this multiple text string be done via a for loop to build a list ? Thanks ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
Re: [Scilab-users] Variable user equation input (2, 3 or more)
Cleaned up the code using Loops clear // Chinese Remainder Theorem (CRT) for 3 congruence equations// e.g. x ≡ 3 mod 5; x ≡ 1 mod 7; x ≡ 6 mod 8// result ≡ 78 mod 280 m=evstr(x_dialog(['Moduli values: '],'1'));a=evstr(x_dialog(['Remainder values: '],'1'));m1=m(1); m2=m(2); m3=m(3);a1=a(1); a2=a(2); a3=a(3);n=evstr(x_dialog(['Number of iterations: '],'1')); M=prod(m); for i=1:length(m) M_ratio(i) = M/m(i)end for i=1:length(m) for j=1:n if modulo(((M_ratio(i)*j)-1),m(i)) == 0 M_inv(i)=j; xn(i)=(a(i)*M_ratio(i)*M_inv(i)); end endend x = modulo(sum(xn),M) // Console output://mprintf('\nThe solution for (x): %d mod %d',x, M) messagebox(['x ≡ '+string(a1)'+' mod '+string(m1)' ... 'x ≡ '+string(a2)'+' mod '+string(m2)' ... 'x ≡ '+string(a3)'+' mod '+string(m3)' ... 'The solution for (x): '+string(x)+' mod '+string(M)'], ... 'Solution of 3 congruence equations') On Sat, 30 Apr 2022 at 06:14, Lester Anderson wrote: > Hello all, > > I have a simple code which computes applies the Chinese Remainder theorem > (for a single variable) given three input congruence equations to solve for > x; not very elegant but it works: > > My query, is it possible to make this more generalised and vary the number > of input equations and give the user an option to specify the number of > equations? > For example, one may have 2, 4 or more equations. > > Any pointers would be helpful. > > Thanks > Lester > > clear > // Chinese Remainder Theorem (CRT) for 3 congruence equations// e.g. x ≡ 3 > mod 5; x ≡ 1 mod 7; x ≡ 6 mod 8// result ≡ 78 mod 280 > m=evstr(x_dialog(['Moduli values: '],'1'));r=evstr(x_dialog(['Remainder > values: '],'1'));m1=m(1); m2=m(2); m3=m(3);r1=r(1); r2=r(2); > r3=r(3);n=evstr(x_dialog(['Number of iterations: '],'1')); > M=m1*m2*m3;M1=M/m1; M2=M/m2; M3=M/m3; > for i=1:n > if modulo(((M1*i)-1),m1) == 0 then > M1_inv=i; > end > > if modulo(((M2*i)-1),m2) == 0 then > M2_inv=i; > end > > if modulo(((M3*i)-1),m3) == 0 then > M3_inv=i; > endend > x1=(r1*M1*M1_inv);x2=(r2*M2*M2_inv);x3=(r3*M3*M3_inv); > x = modulo((x1 + x2 + x3), M); > messagebox(['x ≡ '+string(r1)'+' mod '+string(m1)' ... > 'x ≡ '+string(r2)'+' mod '+string(m2)' ... > 'x ≡ '+string(r3)'+' mod '+string(m3)' ... > 'The solution for (x): '+string(x)+' mod '+string(M)'], > ... > 'Solution of 3 congruence equations') > > > > > > ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users
[Scilab-users] Variable user equation input (2, 3 or more)
Hello all, I have a simple code which computes applies the Chinese Remainder theorem (for a single variable) given three input congruence equations to solve for x; not very elegant but it works: My query, is it possible to make this more generalised and vary the number of input equations and give the user an option to specify the number of equations? For example, one may have 2, 4 or more equations. Any pointers would be helpful. Thanks Lester clear // Chinese Remainder Theorem (CRT) for 3 congruence equations// e.g. x ≡ 3 mod 5; x ≡ 1 mod 7; x ≡ 6 mod 8// result ≡ 78 mod 280 m=evstr(x_dialog(['Moduli values: '],'1'));r=evstr(x_dialog(['Remainder values: '],'1'));m1=m(1); m2=m(2); m3=m(3);r1=r(1); r2=r(2); r3=r(3);n=evstr(x_dialog(['Number of iterations: '],'1')); M=m1*m2*m3;M1=M/m1; M2=M/m2; M3=M/m3; for i=1:n if modulo(((M1*i)-1),m1) == 0 then M1_inv=i; end if modulo(((M2*i)-1),m2) == 0 then M2_inv=i; end if modulo(((M3*i)-1),m3) == 0 then M3_inv=i; endend x1=(r1*M1*M1_inv);x2=(r2*M2*M2_inv);x3=(r3*M3*M3_inv); x = modulo((x1 + x2 + x3), M); messagebox(['x ≡ '+string(r1)'+' mod '+string(m1)' ... 'x ≡ '+string(r2)'+' mod '+string(m2)' ... 'x ≡ '+string(r3)'+' mod '+string(m3)' ... 'The solution for (x): '+string(x)+' mod '+string(M)'], ... 'Solution of 3 congruence equations') ___ users mailing list users@lists.scilab.org http://lists.scilab.org/mailman/listinfo/users