What is wrong with my code?

Hi. I am trying to write a function that takes two inputs (N and n) and return a n by n array at the top right corner of N. So far i have:
function M = top_right(N,n)
M = N(1:n, 1:n);

Answers (3)

I’m not exactly certain what you want to do.
See if this works for you:
N = 6; % Argument
n = 3; % Argument
M = zeros(N); % Create ‘M’
M(1:n, N-n+1:N) = 1 % Set Top Right Corner To ‘1’
M =
M =
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 1 1 1
0 0 0 0 0 0
0 0 0 0 0 0
0 0 0 0 0 0

4 Comments

I think that it what I want however, im trying for a more general code, not something as specific as that.
Another approach:
N = 6; % Argument
n = 3; % Argument
M = randi(99,N); % Create ‘M’
M(1:n, N-n+1:N) = rand(n) % Set Top Right Corner To ‘rand’
79 68 70 0.119 0.34039 0.75127
95 76 4 0.49836 0.58527 0.2551
65 74 28 0.95974 0.22381 0.50596
4 39 5 4 49 68
85 65 10 44 45 65
93 17 82 38 64 17
The first way is what I want but I am trying to figure out how to do it without defining specifically what N and n is. Does that clarify what I am looking for better? So, I am trying to take two inputs N and n, where N's dimension is always greater than or equal to n. Then the function returns a n by n square array at the top right corner of N.
I don’t see any way to do what you want without specifically defining ‘N’ and ‘n’ unless you do it randomly:
N = randi(8); % Argument
n = randi(N-2); % Argument
M = zeros(N); % Create ‘M’
M(1:n, N-n+1:N) = 1 % Set Top Right Corner To ‘1’
I’m keeping the matrices small for convenience. You can also define ‘n’ as:
n = randi(N-randi(N-1));
That way, you don’t have to define anything specifically, since all the parameters are random integers.

Sign in to comment.

Categories

Tags

Asked:

on 5 Aug 2016

Edited:

on 5 Aug 2016

Community Treasure Hunt

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

Start Hunting!