Я написал полный код, который работает в MATLAB, но выводит немного неверный результат. Мне нужно получить следующее:

utotal

Где

utotal = S1plot + S2plot + ... 

Пока цифра не станет равной (N / 2) + 1, где N четное. Если, скажем, N = 10, цифра будет 6.

Затем мне нужно оценить итого в сценарии. Как я могу этого добиться?

Это то, что у меня до сих пор:

N = 10;
for alpha = 1:(N/2+1)
    eval(['utotal = sum(S' num2str(alpha) 'plot);'])
end

Но он не работает, потому что оценивает следующее:

utotal = sum(S1plot);
utotal = sum(S2plot);
utotal = sum(S3plot);
utotal = sum(S4plot);
utotal = sum(S5plot);
utotal = sum(S6plot);

Заранее благодарим за помощь.

0
arabhi manachra 30 Окт 2015 в 00:40

3 ответа

Лучший ответ

Вот обходной путь, который вы можете использовать сейчас. Обратите внимание, что это крайне плохая практика программирования, и трудности, с которыми вы сейчас сталкиваетесь, - лишь одна из причин, по которой вам не следует этого делать.

%// Generate random data
S1plot = randi(100,51,5);
S2plot = randi(100,51,5);
S3plot = randi(100,51,5);
S4plot = randi(100,51,5);
S5plot = randi(100,51,5);
S6plot = randi(100,51,5);
N = 10;

%// Put individual matrices into 3D matrix S
%// To access matrix Snplot, use S(:,:,n)
%// This is the format these variables should have been in in the first place
for alpha = 1:(N/2+1)
    eval(['S(:,:,' num2str(alpha) ') = (S' num2str(alpha) 'plot);'])
end

%// Now sum along the third dimension
utotal = sum(S,3);
2
beaker 29 Окт 2015 в 22:39
N = 10;
Result =0;
for alpha = 1:(N/2+1)
   Result = Result + num2str(alpha)
end
eval(['utotal = sum(S' Result 'plot);'])
0
Tarek 29 Окт 2015 в 21:47

См. Комментарии @beaker. Это решение не делает то, что хочет OP.

Я не тестировал это, но он должен работать.

N=10;
for alpha = 1:(N/2+1)
    allSum = [allSum 'sum(S' num2str(alpha) 'plot)+'];
end

allSum(end)=';';
eval(['utotal = ' allSum]);
1
Autonomous 30 Окт 2015 в 00:19