total_Route = zeros(4,4);
tmp = evalin('base', 't'); % i initialise t in the Workspace with the value 1
if(tmp==5)
tmp=1;
end
total_Route(tmp,1) = Distance_Traveled_CM;
total_Route(tmp,2) = Hauptantrieb_Verbrauchte_Energie_CM;
total_Route(tmp,3) = Nebenaggregate_Verbrauch_Real_CM;
total_Route(tmp,4) = t;
Total_Distance_Traveled_CM = sum(total_Route(:,1));
set(handles.edit3, 'string',Total_Distance_Traveled_CM);
Total_Hauptantrieb_Verbrauchte_Energie_CM = sum(total_Route(:,2));
set(handles.edit4, 'string',Total_Hauptantrieb_Verbrauchte_Energie_CM);
Total_Nebenaggregate_Verbrauch_Real_CM = sum(total_Route(:,3));
set(handles.edit5, 'string',Total_Nebenaggregate_Verbrauch_Real_CM);
%% Index
set(handles.edit15, 'string',tmp);
assignin('base', 't', tmp + 1); % with this line i can increment "t" after each pass
guidata(hObject,handles);
很抱歉,我没有很好地解释我的问题。
@Sardar_Usama我想只运行一次循环,但每次单击我的按钮后t
都会递增。
@ Sembei Norimaki end
在我的代码末尾,忘了在我的问题中写下来
@Patrik& @Dennis Jaheruddin让我再次解释我的问题
我创建了一个带有4×4元素的矩阵,目标是在我的矩阵元素中的每个模拟之后保存每个变量(Total_Distance_Traveled_CM
,Total_Hauptantrieb_Verbrauchte_Energie_CM
等...)的结果(见下图。
我想通过按下一个按钮(在我的GUI上)来获得每列的总和。
第一遍:t = 1
- > Distance_Traveled(1,1)
是GUI将点击按钮,即第一列的总和(即900 + 0 + 0 + 0),并将其写入静态测试。
第二遍t = 2
- > Distance_traveled(2,1)
为800,GUI将取第一列的总和(即900 + 800 + 0 + 0)并将其写入静态测试,同样的事情应该发生在另一列上。
这应该持续到t = 4
,即直到它为每列做同样的事情,然后它应该重置。
我希望,这次我更好地解释了我的问题,并为我糟糕的英语道歉。
我感谢任何帮助。
答案 0 :(得分:0)
根据你的代码片段,for循环只被调用一次。
然而,for循环的内容运行了四次。 (首先是i = 1然后是1 = 2等等。)
如果您只想运行其中一个选项,解决方案非常简单:
i = 1
yourLoopContent
如果我第一次总是0,并且你总是希望为当前的i运行它,那也很简单:
yourLoopContent
i = i+1;
然而,如果我第一次没有正确设置,事情会变得混乱。这是因为我默认定义为-1的平方根。 因此,我建议你使用像t这样的不同字母。然后你可以这样做:
if ~exists(t)
t=0;
end
yourLoopContent %Everywhere using t instead of i
t = t+1;
一般情况下,您可能希望避免使用i作为索引来避免复杂的数字问题。
答案 1 :(得分:0)
我不确定我是否正确地提出了您的问题,但在我看来,您所寻找的是累积金额。这可以通过1:t
或使用cumsum
购买汇总来完成。我不确定你为什么使用循环,但如果这仅用于求和,则cumsum
可以替换它。
以下是您的代码中的一些示例:
total_Route = zeros(4,4);
% I commented below what is not part of the question
for t = 1:4
total_Route(t,:) = [Distance_Traveled_CM,
Hauptantrieb_Verbrauchte_Energie_CM,
Nebenaggregate_Verbrauch_Real_CM,
t];
% the following line compute the comulative sum from the top of each
% column to every element in it, so cs_total_Route(3,2) is like
% sum(total_Route(1:3,2)):
cs_total_Route = cumsum(total_Route);
Total_Distance_Traveled_CM = cs_total_Route(t,1); % OR sum(total_Route(1:t,1))
% set(handles.edit3, 'string',Total_Distance_Traveled_CM);
Total_Hauptantrieb_Verbrauchte_Energie_CM = cs_total_Route(t,2); % OR sum(total_Route(1:t,2))
% set(handles.edit4, 'string',Total_Hauptantrieb_Verbrauchte_Energie_CM);
Total_Nebenaggregate_Verbrauch_Real_CM = cs_total_Route(t,3); % OR sum(total_Route(1:t,3))
% set(handles.edit5, 'string',Total_Nebenaggregate_Verbrauch_Real_CM);
% set(handles.edit15, 'string',t);
end
以下是cumsum
所做的事情的快速查看(total_Route
的一些随机数字):
total_Route =
671 4.6012 1.0662 1
840 3.6475 0.58918 2
354 8.6056 2.1313 3
893 4.1362 2.0118 4
cs_total_Route =
671 4.6012 1.0662 1
1511 8.2487 1.6554 3
1865 16.854 3.7867 6
2758 20.991 5.7985 10
这是你要找的吗?