Matlab function to take matrix as input and return elements in its four corners as output

Hello, good day all, please I'm having difficulties writing a function to take a matrix input, and return the elements in its cour corners as an output.
Here is my code:
function [top_left,top_right,bottom_left,bottom_right] = corners(i,r,c)
A = matrix(i,r,c)
top_left = A(1,1);
top_right = A(1,c);
bottom_left = A(r,1);
bottom_right = A(r,c);
function B = matrix(i,r,c)
ind = i;
row = r;
col = c;
B = randi(ind,row,col);
I keep getting Not enough input arguments.
Error in corners (line 2)
A = matrix(i,r,c)
I'll appreciate your response. Thanks.

5 commentaires

Simpler:
>> A = randi(100,4,5)
A =
79 5 92 93 84
74 73 82 76 82
78 91 92 68 100
15 82 92 64 59
>> A([1,end],[1,end])
ans =
79 84
15 59
function [top_left,top_right,bottom_left,bottom_right] = corners(A)
Acorners=A([1,end],[1,end]);
top_left = Acorners(1,1);
top_right = Acorners(1,2);
bottom_left = Acorners(2,1);
bottom_right = Acorners(2,2);
end
it will works.
Ya..it's a nice perspective for both vector and matrices
can you tel me why did we use "Acorners" in the above code
you can also use the function like this
function [a,b,c,d]= corners(l)
a= l(1,1);
b=l(1,end);
c=l(end,1);
d=l(end,end);
end

Connectez-vous pour commenter.

 Réponse acceptée

Matt J
Matt J le 7 Fév 2019
Modifié(e) : Matt J le 7 Fév 2019
Maybe this is what you really want:
function Acorners = corners(A)
Acorners=A([1,end],[1,end]);
end

7 commentaires

Thanks Matt J,
Your response is most helpful. Here's what I did:
function [top_left,top_right,bottom_left,bottom_right] = corners(A)
Acorners=A([1,end],[1,end]);
top_left = Acorners(1,1);
top_right = Acorners(1,2);
bottom_left = Acorners(2,1);
bottom_right = Acorners(2,2);
end
And here's the code to call my function:
A = randi(100,4,5)
[top_left, top_right, bottom_left, bottom_right] = corners(A)
A = [1; 2]
[top_left, top_right, bottom_left, bottom_right] = corners(B)
Thank you so much. I'm settled now, and most grateful.
why do you use the word "end"?
@Ivonne,
This thread talks more extensively about when it is optional and when it is necessary to close a function with "end",
Hi, I tried to replace end with 2, but why does it show an error? Tq so much
What I did is: Acorners=A([1,2],[1,2]);
Acorners=A([1,end],[1,end]); how this helped us? can you please make me understand
It gets the corners. Did you try it?
>> A=nan(5); A(:)=1:25
A =
1 6 11 16 21
2 7 12 17 22
3 8 13 18 23
4 9 14 19 24
5 10 15 20 25
>> A([1,end],[1,end])
ans =
1 21
5 25

Connectez-vous pour commenter.

Plus de réponses (5)

function [top_left,top_right,bottom_left,bottom_right] = corners(M)
top_left = M(1,1);
top_right = M(1,end);
bottom_left = M(end,1);
bottom_right = M(end,end);
end
here's the code to call:
A = randi(100,4,5)
[top_left, top_right, bottom_left, bottom_right] = corners(A)
B = [1; 2]
[top_left, top_right, bottom_left, bottom_right] = corners(B)
I think this will be much simpler approch..

3 commentaires

Hello... Thank you for your explanation. I am glad to see your reply.
btw can you explain to me what the meaning of randi (100, 4, 5)
it gives 4x5 matrix. each element of the matrix take values up to 100.
its a simpler and easy way to do it

Connectez-vous pour commenter.

Matt J
Matt J le 6 Fév 2019
Modifié(e) : Matt J le 6 Fév 2019
I get no errors of any kind when I run your code, e.g.
[top_left,top_right,bottom_left,bottom_right] =corners(10,10,10)
gives
top_left =
4
top_right =
7
bottom_left =
7
bottom_right =
4
The only reason I can think of is you have a another function called matrix() higher in your path which is hiding the one you really want. Try,
>>which -all matrix

4 commentaires

TADA
TADA le 6 Fév 2019
Modifié(e) : TADA le 6 Fév 2019
But Local Functions Take Precedence
Dont They?
Yes, but the OP has not told us whether matrix() is local to corners().
Strictly speaking, your function corners does not take a matrix input.
I think you asked to do something like this
function out = corners(M)
% M is the input matrix
out(1) = M(1,1)
% etc
yes, thanks. I think that's the problem. I'm supposed to use the function to run the following lines of code in the command window:
A = randi(100,4,5)
[top_left, top_right, bottom_left, bottom_right] = corners(A)
A = [1; 2]
[top_left, top_right, bottom_left, bottom_right] = corners(B)
any suggestions please?
Thanks.

Connectez-vous pour commenter.

TADA
TADA le 6 Fév 2019
Modifié(e) : TADA le 6 Fév 2019
I Don't See Any Particular Problem With That Line.
The Problem Is Possibly That You Didn't Send Input Or Enough Input To corners When You Invoked It.
Try Calling Cornenrs From The Command Window With Valid Values, Or When You Run Using the Run Button T The Top Or Using F5, You Can Specify Input At The Run Button Menu
function [top_left,top_right,bottom_left,bottom_right]= corners (A)
top_left= A(1,1)
top_right= A(1,end)
bottom_left=A(end,1)
bottom_right=A(end,end)
end

4 commentaires

for A = randi(10,4,5)
A =
5 6 6 7 2
2 8 6 8 9
5 10 7 5 3
10 6 8 7 4
>> corners(A)
top_left =
5
top_right =
2
bottom_left =
10
bottom_right =
4
ans = %<------ why does MATLAB return "ans" here ?
5
That is the output argument from your call to the corners function, which by the way you've defined it is the contents of the top_left variable inside your function. Note that none of the variables top_left, top_right, bottom_left, or bottom_right will be accessible after this call. They were created inside the function and were destroyed when the function finished execution and its workspace was destroyed.
If you want those variables to be accessible on a future line, call your corners function with between 1 and 4 output arguments, depending on how many of the variables you want to have access to. You probably will also want to end those lines in corners with semicolons so the variables don't get displayed while the function is executing.
[TL, TR, BL, BR] = corners(A);
I get this idea of output argument and accesibility. But I defined also top_right, bottom_left and bottom_right as output argument. But why does particularly top_left pops out as an ans instead of other output arguments.
"But I defined also top_right, bottom_left and bottom_right as output argument."
You defined them in the function, but you did not use any output arguments when calling the function.
How to call functions (with multiple output arguments) is explained in Steven Lords comment above and also in the introductory tutorials:

Connectez-vous pour commenter.

please can anybody help me because i don't know where the probleme is :
function [top_left, top_right, bottom_left, bottom_right]= corner(A)
top_left= A(1,1);
top_right= A(1,end);
bottom_left= A(end,1);
bottom_right = A(end, end);
end
and it gives me this:
>> A = randi(100,4,5)
??? Undefined function or method 'randi' for input arguments of type 'double'.
and the m-file is in the current directory

2 commentaires

@nor el houda bouhaddoun: please show us the output of this command:
which randi -all
What MATLAB version are you using?
Is this your own computer and MATLAB installation, or that of your school/university/whatever ?
For sake of curiosity:
randi() was introduced to the base toolbox in R2008b, so for it to be missing in 2020 would be curious.

Connectez-vous pour commenter.

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by