code is not 'return'-ing

2 visualizaciones (últimos 30 días)
Komel Kaur
Komel Kaur el 19 de Dic. de 2020
Comentada: Les Beckham el 20 de Dic. de 2020
I want to produce a code that compares both Cholesky in-built function with calculated values, but my current code is not returning to line 1. i can't figure out why.
this is my current code
A=input('Matrix= ');
[n,m]=size(A);
if m==n
if issymmetric(A,'nonskew')
if eig(A)>=0
fprintf('matlab inbuilt function "chol" is: ')
R=chol(A)
[n,m]=size(A);
R1=zeros(n,m);
h=1;
for j=1:n
if j==1
R1(j,1)=sqrt(A(j,1));
else
R1(j,1:h)=((A(j,1:h))/(R1(1:h,1:h))')';
sum=R1(j,1:h)*(R1(j,1:h))';
R1(j,j)=sqrt(A(j,j)-sum);
h=h+1;
end
end
else
fprintf('matrix does not have positive eigenvalues, ')
return
end
fprintf('Calculated value is: ')
Q=R1'
else
fprintf('the input is not a symmetrical matrix, try again')
return
end
else
fprintf('the format of input matrix is wrong')
return
end
  3 comentarios
VBBV
VBBV el 19 de Dic. de 2020
Komel Kaur
Komel Kaur el 19 de Dic. de 2020
noted with thanks. this helped me understand 'return' better

Iniciar sesión para comentar.

Respuesta aceptada

Les Beckham
Les Beckham el 19 de Dic. de 2020
Editada: Les Beckham el 19 de Dic. de 2020
return does not mean 'restart'. return in the context of a script actually means 'abort' or 'return to the command line and stop executing this script'.
If you wish this code to repeat until a valid matrix is entered, wrap it in a while(true) loop and replace all of your return statments with continue (which will restart the loop, skipping any statements after that one).
Also, add a break after the last line of code for success (Q = R1'). This will terminate the while loop.
You should also add '\n' at the end of each of your error messages so the command prompt will start on a new line.
So, this should work better. Note that this is still a rather fragile way to do this. Using the input function leaves lots of opportunities for the user to enter stuff that doesn't make sense (especially leaving off the square brackets in this case).
while (true)
A=input('Matrix= ');
[n,m]=size(A);
if m==n
if issymmetric(A,'nonskew')
if eig(A)>=0
fprintf('matlab inbuilt function "chol" is: ')
R=chol(A)
[n,m]=size(A);
R1=zeros(n,m);
h=1;
for j=1:n
if j==1
R1(j,1)=sqrt(A(j,1));
else
R1(j,1:h)=((A(j,1:h))/(R1(1:h,1:h))')';
sum=R1(j,1:h)*(R1(j,1:h))';
R1(j,j)=sqrt(A(j,j)-sum);
h=h+1;
end
end
else
fprintf('matrix does not have positive eigenvalues, \n')
continue
end
fprintf('Calculated value is: ')
Q=R1'
break
else
fprintf('the input is not a symmetrical matrix, try again\n')
continue
end
else
fprintf('the format of input matrix is wrong\n')
continue
end
end
  4 comentarios
Komel Kaur
Komel Kaur el 20 de Dic. de 2020
ohh.. understood. thank you for all your help
Les Beckham
Les Beckham el 20 de Dic. de 2020
You are welcome.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Linear Algebra en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by