Matlab代码求和数组的术语

时间:2013-11-21 21:52:39

标签: arrays matlab loops while-loop sum

我有一个应该执行以下操作的代码:

第一个名为CalcNum1.m的函数,将找到所有的总和 任何大小的数组中的值使用for循环而不是sum函数。这个总和除以 2将保存到变量Num1。 最后,在名为PrintTerms.m的第二个函数中,使用。重新排序您的术语 内置排序功能。现在,找到多少条款(从第一个和第一个开始) 当相互相加时,必须超过Num1的值。 向用户打印需要多少条款。

这是我的主要脚本代码:

B = input ('Enter matrix B');
[Num1,sum] = CalcNum1(B);
[Q] = PrintTerms(B, Num1);

这是我的函数代码

function [sum, Num1] = CalcNum1(B)

n = numel(B);
sum1 =0;
for i = 1:n
    sum1 = sum1 + B(i);

end
sum = sum1;
Num1 = sum/2;
end




function [Q] = PrintTerms( B, Num1 )

sort (B)
sum1 = 0;
i = 0;
count = 0;
while sum1<=Num1
    i = i+1
    sum1 = sum1 + B(i)
    count = count+1
end  
 Q = count;
 sum1
    fprintf(' This many terms necessary %.2f',Q)
end

2 个答案:

答案 0 :(得分:0)

尝试:

function [Num1, my_sum] = CalcNum1(B)

n = numel(B);
my_sum =0;
for i = 1:n
   my_sum = my_sum + B(i);
end

Num1 = my_sum/2;
end

请注意,我切换了输出顺序,因为您将其命名为[Num1,sum] =

function count = PrintTerms( B, Num1 ) % No need for brackets when only single output

B = sort(B);  % Need to save it in a new (or the same variable)
              % sort(B) will only print the sorted vector
my_sum = 0;
ii = 0;       
count = 0; 
while my_sum <= Num1
    ii = ii+1;                  % Use semicolons to supress output
    my_sum = my_sum + B(ii);   
    count = count + 1;          % Use space for better readability 
end  

fprintf(' This many terms necessary %.2f \n', count)
% Include \n to get a line shift
end

键入B时使用括号,如下所示:[1 2 3 4 2 3 4 23 12 32 12 2 3 6]

如果您希望它更简单,您还可以使用cumsum并避免循环。这是您的最后一个功能(打印部分除外):

vec_sum = cumsum(sort(B));        % See documentation for explanation
count = find(vec_sum >= Num1,1) ; % the second input 1, is to only include the 
                                  % first element larger than Num1

答案 1 :(得分:0)

您的PrintTerms功能似乎运作良好。可能的问题是,假设Num1是一个任意值,如果它是如此之大以至于即使使用B的所有元素也未达到它,您将尝试从{{中拉出一个不存在的其他元素1}}。为避免这种情况,您可以使用B添加条件并使用标记结果来指示您是否有if

success

另请注意,% [...] success = 1; % for now while (sum1 <= Num1) ii = ii+1; % Use semicolons to supress output if ii>length(B) success = 0; % we ran out of terms break; % exit while loop end sum1 = sum1 + B(ii); count = count + 1; % Use space for better readability end if success fprintf(' This many terms necessary %.2f', count) else fprintf(' The sum cannot be reached') end 不会存储结果。使用sort(B)