Stop the for loop

2 次查看(过去 30 天)
Adrian
Adrian 2012-5-29
I want to stop a loop when the the modulo 26 of the determinant times a 'number', then use such 'number' to multiply the inverse of a matrix. The code is:
clc, clear;
A=input('Symmetric matrix: ');
format rat;
d=det(A)
Minv=inv(A);
M1=(Minv*d);
for i=1:100
j=mod(d*i, 26);
x=i;
if j==1, break, end
end
x
Z=round(mod((M1*x), 26))
However I can't make the for loop to stop when the value of 'j' becomes 1 and use the value of 'x' to multiply the matrix; every time the value of x is the final value of 'i', in this case 100.
  1 个评论
Oleg Komarov
Oleg Komarov 2012-5-29
Why do you expect the modulus of d*i should ever be 1?

请先登录,再进行评论。

采纳的回答

Geoff
Geoff 2012-5-29
Time for the most basic of debugging practises...
After you calculate j, put in the following line of code:
disp(j);
Now, run your loop.
I'm willing to bet that j is either always even (because d is even), or is a sufficiently fractional non-integer.
When you work out what's happening and fix it, then consider the following. From a 'performance' perspective (well, really it's about not doing unnecessary things), just save the value into x once:
x = [];
for i = 1:100
if mod(d*i,26) == 1
x = i;
break;
end
end
if isempty(x)
disp('Not found');
end
Doesn't really matter here, but it's worth getting into the habit of recognising some repeated calculations as being pointless. Call it "eco-coding". =)
  3 个评论
Geoff
Geoff 2012-5-29
Then it's probably not _exactly_ 1. Try this:
fprintf( 'i=%d : j=%.30f\n', i, j);
You might need to test with something like:
if abs(j-1) < eps(10)
Adrian
Adrian 2012-5-29
That was it! The only thing I had to finish so my encryption/decryption program was finished. I am just starting to learn matlab and your help is really appreciated.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrix Indexing 的更多信息

标签

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by