Statistical programming, matrix languages, and more

Matrices

Reply
Occasional Contributor
Posts: 8

Matrices

I am suppose only be able to put in 2x2 matrices and find the determinate if the matrices is a 2x2 if it is a 1x1 or a 3x3 I am suppose to print an error and if it is singular i am suppose to print another error.

What am I doing wrong?

Proc IML;

a = {1 2, 3 4};

b = {1 1, 1 1};

c = {1 2 3, 4 5 6, 7 8 9};

d = {5};

start invers(a);

  nr = nrow(a);

  nc = ncol(a) ;

  if nr=2 & nc=2 then do;

    i = det(a);

    b = INV(a);

        if i ^= 0 then return(b);

        else if i = 0 then print("Singular");

        end; else print("error");

finish;

w = invers(a);

x = invers(b);

y = invers(c);

z = invers(d);

print w, x, y, z;

Regular Contributor
Posts: 161

Re: Matrices

Posted in reply to arbongard

Inverting a singular matrix causes an error so the INV function needs to be moved inside the 'if'.  To avoid further errors it is necessary to always return something from the function module.  I usually use syntax like return(.) or return(0) when an error occurs.  Then the calling program can test for these return codes and know that an error has occurred.

Occasional Contributor
Posts: 8

Re: Matrices

Posted in reply to IanWakeling

inside what if statement?

Regular Contributor
Posts: 161

Re: Matrices

Posted in reply to arbongard

Don't attempt to invert the matrix unless it has passed the  i^=0  test.

Occasional Contributor
Posts: 8

Re: Matrices

Posted in reply to IanWakeling

so would this work?

if i ^=0 then return (a**(-1))

Regular Contributor
Posts: 161

Re: Matrices

Posted in reply to arbongard

Yes that should work, or return(inv(a)).

Ask a Question
Discussion stats
  • 5 replies
  • 417 views
  • 3 likes
  • 2 in conversation