I have a series of variables form a1 to a100 and each one has a single numeric value. I want to repeat copies of that value to 1-by-4 matrix for all of them.

조회 수: 2 (최근 30일)
For e.g. a1 = 5; a2 = 6; ......a100 = 43; I want it to be like:- a1 = [5 5 5 5]; a2 = [6 6 6 6]; ... a100 = [43 43 43 43]; I know that, if the variables are too few then it is easily possible by individually using 'repmat'. But how to do it for these many variables?
  댓글 수: 6
Stephen23
Stephen23 2018년 7월 27일
I don't see any reason why mixed-integer linear programming requires lots of separate variables: what optimization function are you using?
Ankit Singh
Ankit Singh 2018년 7월 27일
Guys thanks for your timely replies...but I found out that the approach I was using was not a viable option, but my objective is now fulfilled as I have changed my approach.

댓글을 달려면 로그인하십시오.

채택된 답변

Stephen23
Stephen23 2018년 7월 27일
편집: Stephen23 2018년 7월 27일
Your script Trial1.m (attached) is pointlessly complex, and using eval to access variables names just complicates things even more for no benefit. I doubt that this approach is worthwhile. Most of the first half can be replaced with just one line of code, and the second half is an inefficient use of eval to create lots of variables: keep your data in arrays and just use indexing!
Replace all of this:
load('unitCommData.mat','T','loadProfile');
load('DA_price.mat');
nHours = 24;
nIntervals = nHours*4;
DAPrice = zeros(nIntervals,1);
cnt = 1;
for i = 1:nIntervals
DAPrice(i,1) = e_Auktion24Energie(cnt,1);
if mod(i,4) == 0
cnt = cnt + 1;
end
end
DA_Price = repmat(DAPrice,1,4);
with the much simpler and more robust:
>> ucd = load('unitCommData.mat','T','loadProfile');
>> dap = load('DA_price.mat');
>> P = kron(dap.e_Auktion24Energie,ones(4))
P =
31.72 31.72 31.72 31.72
31.72 31.72 31.72 31.72
31.72 31.72 31.72 31.72
31.72 31.72 31.72 31.72
28.63 28.63 28.63 28.63
28.63 28.63 28.63 28.63
28.63 28.63 28.63 28.63
28.63 28.63 28.63 28.63
27.86 27.86 27.86 27.86
27.86 27.86 27.86 27.86
... more rows here
35.44 35.44 35.44 35.44
35.44 35.44 35.44 35.44
35.44 35.44 35.44 35.44
31.07 31.07 31.07 31.07
31.07 31.07 31.07 31.07
31.07 31.07 31.07 31.07
31.07 31.07 31.07 31.07
28.31 28.31 28.31 28.31
28.31 28.31 28.31 28.31
28.31 28.31 28.31 28.31
28.31 28.31 28.31 28.31
The second half of your code can be simply replaced with this line:
>> X = repmat((1:size(P,1)).',1,4)
X =
1 1 1 1
2 2 2 2
3 3 3 3
4 4 4 4
5 5 5 5
6 6 6 6
... more rows here
91 91 91 91
92 92 92 92
93 93 93 93
94 94 94 94
95 95 95 95
96 96 96 96
Which you can trivially access using indexing. So far there is no reason why you require lots of magically named variables.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Logical에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by