Re: [Scilab-users] Variable user equation input (2, 3 or more)

2022-05-02 Thread Dang Ngoc Chan, Christophe
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)

2022-05-01 Thread Lester Anderson
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)

2022-05-01 Thread Lester Anderson
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)

2022-04-30 Thread Lester Anderson
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)

2022-04-30 Thread Lester Anderson
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)

2022-04-29 Thread Lester Anderson
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