Erro:边缘向量必须是单调不递减的

时间:2014-02-18 21:52:16

标签: matlab function histogram montecarlo

我的问题在于MCsolutionupdated()函数,因为我无法运行它超过20,000次迭代,因为我获得了错误“边缘向量必须单调非递减”。有时,我甚至为final_matrix获得了Inf元素(当我没有得到这个错误时),这也没有意义。当我运行Nielsennewupdated(casechoice,no_iterations)时,我可以运行它进行多次模拟,但我从未获得过Inf元素。所以,我认为MCsolutionupdated()必定存在问题。

function [final_matrix, thresh_strain] = MCsolutionupdated()

no_iterations = input('No. of iterations?:');

thresh_strain = zeros(1,no_iterations*16);

casechoice =input('Enter 1 for 1st Layup and 2 for 2nd layup:');

 J = Nielsennewupdated(casechoice, no_iterations);
 thresh_strain = J;


roundedValues = round(thresh_strain/.0001)*0.0001;
myUniqueValues = unique(roundedValues);
i = numel(myUniqueValues);
nelements  = hist(thresh_strain(:),myUniqueValues); 

for i=1:i
    percent(i)  = (nelements(1,i)/numel(thresh_strain))*100;
end

final_matrix = [myUniqueValues' percent'];

% uniqueValues,~,uniqueIndex] = unique(ans);
% frequency = accumarray(uniqueIndex(:),1)./numel(ans);

header = {'Threshold Strain' 'Probability of occurrence'};
xlswrite('results.xlsx', header) 
xlswrite('results.xlsx', final_matrix,'A2')

由于

3 个答案:

答案 0 :(得分:0)

你的错误就在这一行上(错误信息甚至可能说得那么多):

nelements  = hist(thresh_strain(:),myUniqueValues);

问题是myUniqueValues不是“单调不减少”。此示例产生相同的错误:

n  = hist(randi(3,[1 10]),[3 2 1]);

导致

Error using histc
Edge vector must be monotonically non-decreasing.

Error in hist (line 92)
    nn = histc(y,edges,1);

我不确定这是怎么回事,因为unique应该对它的输出进行排序。所以我无法在R2013b中完全复制您的错误。也许您正在运行旧版本的Matlab。我会看看myUniqueValues的价值是什么。

答案 1 :(得分:0)

这种类型的错误主要是由于hist函数的第二个参数没有单调递减

答案 2 :(得分:0)

将您的unique行更改为:

myUniqueValues = unique(roundedValues,'sorted');

您可能有一个旧版本,默认情况下不进行排序,而是使用“稳定”排序。