tensileTest.m

function tensileTest()
% reads data from a tensile test
% plots stress–strain curves and computes Young modulus

[L, d, DLMat, FMat] = readTensileData("tensileTest.dat");

epsMat = DLMat/L*100;     % in %
S0 = pi*d^2/4;            % in mm^2
sigMat = 1000*FMat/S0;    % in N/mm^2 = MPa

plot(epsMat, sigMat)
xlabel("\epsilon [%]", "Fontsize", 14)
ylabel("\sigma [MPa]", "Fontsize", 14)
title("Stress–strain curves", "Fontsize", 14)
F = getframe(gcf());
imwrite(F.cdata, "bild14.png");

% get linear data
epsMax = 0.25;
idxMax = find(epsMat(:,1) <= epsMax, 1, "last");

epsLin = epsMat(1:idxMax, 1);
sigLin = sigMat(1:idxMax, :);

plot(epsLin, sigLin, "*")
xlabel("\epsilon [%]", "Fontsize", 14)
ylabel("\sigma [MPa]", "Fontsize", 14)
title("Stress–strain curves, linear part", "Fontsize", 14)
F = getframe(gcf());
imwrite(F.cdata, "bild22.png");

% get mean values and standard deviations
sigMean = mean(sigLin', "omitnan")';
sigDevs = std(sigLin', "omitnan")';

errorbar(epsLin, sigMean, sigDevs/2, ".")
xlabel("\epsilon [%]", "Fontsize", 14)
ylabel("\sigma [MPa]", "Fontsize", 14)
title("Stress–strain curves, mean values", "Fontsize", 14)
F = getframe(gcf());
imwrite(F.cdata, "bild23.png");

% linear fit without using std's
poly1 = polyfit(epsLin, sigMean, 1)
E = poly1(1)/10;           % in GPa
fprintf("Young modulus without using standard deviations: %7.2f GPa\n", E)

epsMax = epsLin(end);
epsP = 0:epsMax/100:epsMax;
sigP = polyval(poly1, epsP);
plot(epsLin, sigMean, "r*", epsP, sigP, "k-")
xlabel("\epsilon [%]", "Fontsize", 14)
ylabel("\sigma [MPa]", "Fontsize", 14)
title("Stress–strain curves, linear fit", "Fontsize", 14)
F = getframe(gcf());
imwrite(F.cdata, "bild24.png");