if statement with and or

Hi sorry, i want to create a code to know if a generic matrix A is positive definite. On my version of matlab (2016) when i write the second & the code gives me an error saying that "Matrix dimensions must agree". Can you help me?
A=[13/4 1/2 0; 1/2 17/4 1/2; 0 1/2 21/4]
A = 3×3
3.2500 0.5000 0 0.5000 4.2500 0.5000 0 0.5000 5.2500
[n,m]=size(A);
D_A=diag(A);
M_A=A-diag(D_A);
if n==m & A==A' & (abs(D_A)>sum(abs(M_A),2) | abs((D_A)')>sum(abs(M_A),1)) & diag(A)>0
disp 'A è DEFINITA POSITIVA'
end
A è DEFINITA POSITIVA

12 Comments

Use && to short-circuit. Requires scalar inputs.
If i use && i have this error "Operands to the || and && operators must be convertible to logical scalar values."
Is the code you posted exactly the code that gives the error? It doesn't give an error in 2021b, and I don't see specifically what would give an error in a prior version.
Like I said, "Requires scalar inputs."
Yes the code is exactly the same. Here on the 2021 it doesn't give errors. On my matlab it does
so @Benjamin what i have to do? i need this 4 coditions to say that the matrix is positive definite
It seems like you are using a non-square matrix A to get the error you report, but the matrix here is square so we get no error.
This
A==A.'
returns a vector, but this:
isequal(A,A.')
returns a scalar.
I don't know if this is precisely the condition you want, but you might try something like this:
if n==m && isequal(A,A') && (all(abs(D_A)>sum(abs(M_A),2)) || all(abs((D_A)')>sum(abs(M_A),1))) && all(diag(A)>0)
@Benjamin with your code the problem is solved thank you. But can you explain me what isequal and all do?
isequal is for comparing arrays (especially non-scalar arrays). all is for checking a condition on elements of an array.
@Benjamin thank you very much

Sign in to comment.

Answers (0)

Categories

Tags

Asked:

on 28 Dec 2021

Commented:

on 28 Dec 2021

Community Treasure Hunt

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

Start Hunting!