6 views (last 30 days)

The singularitytest function will test whether a matrix is singular. If it is, the output should be 1. Otherwise, the output should be 0. The input, A, can be any n × n matrix. Your code needs to take into consideration very small errors that could occur due to floating point arithmetic (apply a tolerance of 10-10).

function result = singularitytest(A)

n = some_number;

A = matrix (n, n)

d = det(A);

c = cond(d) <= 1e-10;

end

I get this Undefined function or variable 'some_number'.

John Chilleri
on 10 Sep 2017

Edited: John Chilleri
on 10 Sep 2017

Hello,

I would recommend you watch a video or read an introduction to coding in MATLAB. They don't take too long and should give you enough knowledge to avoid errors such as these.

First, let's go through your code,

function result = singularitytest(A)

n = some_number;

A = matrix (n, n)

d = det(A);

c = cond(d) <= 1e-10;

end

So from the function definition line,

function result = singularitytest(A)

We know that the function is going to be given some value A (in this case an n x n matrix). Your function will then use this A to compute the variable result, which it returns from the function.

Since you are given A, you don't need the lines,

n = some_number;

A = matrix(n,n)

Also, n = some_number doesn't help MATLAB - it can only work with values. If you were trying to get how big your n x n matrix is, you can use,

n = size(A,1);

Furthermore, matrix is not a MATLAB function, so you'll also get an error on the line,

A = matrix(n,n)

Remember though, you were given matrix A as an input, so you don't need to try to make it.

Finally, you have the right idea in the next lines, but you need to assign a value to result, as that is the variable that is returned from your function.

In this case, I assume you're checking if the determinant of matrix A is zero, with tolerance 1e-10. Don't forget that since determinants can be negative, we must check if it's 1e-10 within zero on both sides of zero, or more simply,

result = abs(det(A)) <= 1e-10;

This line says, "is the absolute value of the determinant of A less than or equal to 1e-10?" If yes, it'll return a 1, if not, it'll return a 0, which is how comparisons naturally work in MATLAB, but it's also what was requested of you. And as a side note, I don't think you need to use the ( cond ) condition number here.

All in all, your function should look like this,

function result = singularitytest(A)

result = abs(det(A)) <= 1e-10;

end

Hope this helps, and please do your best to understand everything - understanding it now will save you countless hours in the future!

Opportunities for recent engineering grads.

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

Start Hunting!
## 1 Comment

## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/355955-identity-matrix-what-am-i-doing-wrong#comment_483421

⋮## Direct link to this comment

https://in.mathworks.com/matlabcentral/answers/355955-identity-matrix-what-am-i-doing-wrong#comment_483421

Sign in to comment.