Skip to main content

calcNormalizedFiberLengthMeanSimilarityCost.m


% This function is part of the NMSM Pipeline, see file for full license.
%
% (Array of number, struct) -> (Array of number)
% returns the cost for all rounds of the Muscle Tendon optimization


function cost = calcNormalizedFiberLengthMeanSimilarityCost( ...
modeledValues, experimentalData, costTerm)
errorCenter = valueOrAlternate(costTerm, "errorCenter", 0);
maximumAllowableError = valueOrAlternate(costTerm, "maxAllowableError", 0.1);
Ind = 1;
for i = 1:length(experimentalData.normalizedFiberLengthGroups)
normalizedFiberLengthSimilarity = ...
abs(modeledValues.normalizedFiberLength(:, ...
experimentalData.normalizedFiberLengthGroups{i}, :) - ...
mean(modeledValues.normalizedFiberLength(:, ...
experimentalData.normalizedFiberLengthGroups{i}, :), 2));
normalizedFiberLengthSimilarityCost(Ind : Ind + ...
size(experimentalData.normalizedFiberLengthGroups{i}, 2) - 1) = ...
log(sum(exp(500 * (normalizedFiberLengthSimilarity)), [1 3])) / 500;
Ind = Ind + size(experimentalData.normalizedFiberLengthGroups{i}, 2);
end

cost = calcDeviationCostArray(...
normalizedFiberLengthSimilarityCost, errorCenter, ...
maximumAllowableError);
end