if i have a i*j matrix(with random numbers ), then how can i make the sum of first row = d(say d= 5).

1 Ansicht (letzte 30 Tage)
HELLO,
I want to make random number matrix having the sum of first row elements equal to d (a positive number). I tried to use Roger Stafford's randomfixedsum for first row but was not successful.
thank you
Resh

Antworten (3)

Orion
Orion am 19 Aug. 2014
Bearbeitet: Orion am 19 Aug. 2014
You can do this: http://www.mathworks.com/matlabcentral/newsreader/view_thread/318632 And you don't need a value constraint in the first line.

Aykut Satici
Aykut Satici am 19 Aug. 2014
I understand that you would like to get a matrix A with m rows and n columns, and your constraint is that the first row has to sum to d
This means you can arbitrarily select (n-1) of these numbers such that their sum is less than d and then assign the last one such that the whole sum is d.
As a result, one way of doing this would be to generate (n-1) random numbers all of which is smaller or equal to d/(n-1) and then select the last one as d minus the sum of the previous (n-1). See the code below:
m = 4; % number of rows
n = 7; % number of columns
d = 5; % desired sum of the first column
a = 10/17; % lower bound on the elements of the first row of A
% Generate the matrix
A = zeros(m,n); % Create a matrix of zeros
% of dimension m-by-n
A(2:m,:) = rand(m-1,n); % Populate the elements of the
% matrix through rows 2 to m
% with random numbers
A(1,1:n-1) = a + (d/(n-1)-a)*rand(1,n-1); % Generate (n-1) random numbers
% between a and d/(n-1)
% (see "help rand")
A(1,n) = d - sum(A(1,1:n-1));
  2 Kommentare
Guillaume
Guillaume am 19 Aug. 2014
What you're asking now is completely different from what you've asked originally. You should create a new question.

Melden Sie sich an, um zu kommentieren.


Guillaume
Guillaume am 19 Aug. 2014
Bearbeitet: Guillaume am 19 Aug. 2014
You don't say what you want to happen in the other rows, so I would just generate a random matrix, divide it by the sum of the first row and multiply it by d.
M = rand(nrows, ncols);
M = M / sum(M(1, :)) * d;
  1 Kommentar
reshdev
reshdev am 19 Aug. 2014
ok great. Thank you again. Now, you can have a look at my main problem. i have mentioned constraints that represents different sums for different rows and columns. I have also written a small program at the end. After that, i was unable to do anything.
Can you please take a look at that one too. It will be highly appreciated.

Melden Sie sich an, um zu kommentieren.

Kategorien

Find more on Random Number Generation in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by