フィルターのクリア

Why are my variables saving only Nan entries?

4 ビュー (過去 30 日間)
hyu34gyd5
hyu34gyd5 2023 年 12 月 9 日
編集済み: Stephen23 2023 年 12 月 10 日
Cal = struct;
Cal.data = readtable('Lab_4_Data.txt');
Warning: The DATETIME data was created using format 'MM/dd/uuuu' but also matched 'dd/MM/uuuu'.
To avoid ambiguity, supply a datetime format using SETVAROPTS, e.g.
opts = setvaropts(opts,varname,'InputFormat','MM/dd/uuuu');
Cal.data_uE1 = Cal.data.Var3;
Cal.data_uE2 = Cal.data.Var4;
Cal.data_uE3 = Cal.data.Var5;
Cal.data_E1 = Cal.data_uE1 * 1000000;
Cal.data_E2 = Cal.data_uE2 * 1000000;
Cal.data_E3 = Cal.data_uE3 * 1000000;
masses = [0 50 100 200 300 500]; % grams
xN = (masses ./ 1000) * 9.81; % in newtons
% Calculate shear strain (𝛾xy)
Cal.data_gamma_xy = 2 * Cal.data_E2 - (Cal.data_E1 + Cal.data_E3);
% Calculate principal strains (Ɛ1, Ɛ2, Ɛ3)
Cal.data_epsilon_1 = Cal.data_E1;
Cal.data_epsilon_2 = 0.5 * Cal.data_gamma_xy;
Cal.data_epsilon_3 = Cal.data_E3;
% Calculate Poisson's ratio (v)
Cal.data_nu = abs(Cal.data_epsilon_2) ./ Cal.data_epsilon_1;
% Calculate angle of rotation (𝜃𝜃p)
Cal.data_theta_p = atand(Cal.data_gamma_xy ./ (Cal.data_epsilon_1 - Cal.data_epsilon_3));
% Calculate principal stresses (Txx, Tyy)
E = 69000; % Young's Modulus for aluminum in MPa
Cal.data_Txx = ((E) / (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_1 + Cal.data_nu .* Cal.data_epsilon_2);
Cal.data_Tyy = ((E) / (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_2 + Cal.data_nu .* Cal.data_epsilon_1);
% Calculate longitudinal stress from the beam flexure equation
P = xN; % applied load in Newtons
L = 0.241; % length of the beam in meters (replace with your actual value)
b = 0.025; % width of the beam in meters (replace with your actual value)
h = 0.00379; % thickness of the beam in meters (replace with your actual value)
c = h / 2;
% distance between gage's mounting line and dent at the end of the beam in meters
L_adjusted = 0.051;
I = (b * h^3) / 12;
Cal.data_sigma_L = (6 * P * L_adjusted) / (b * h^2);
% Calculate load cell calibration factor
Calibration_Factor = max(abs(Cal.data_epsilon_1)) / max(P);
% Plot 1: Principal Strains vs. Applied Load
figure;
plot(xN, Cal.data_epsilon_1(1:6), '-o', 'DisplayName', 'Ɛ1');
hold on;
plot(xN, Cal.data_epsilon_2(1:6), '-o', 'DisplayName', 'Ɛ2');
plot(xN, Cal.data_epsilon_3(1:6), '-o', 'DisplayName', 'Ɛ3');
xlabel('Applied Load (N)');
ylabel('Principal Strains (\mu\epsilon)');
title('Principal Strains vs. Applied Load');
legend('Location', 'Best');
grid on;
% Plot 2: Principal Stresses vs. Applied Load
figure;
plot(xN, Cal.data_Txx(1:6), '-o', 'DisplayName', 'Txx');
hold on;
plot(xN, Cal.data_Tyy(1:6), '-o', 'DisplayName', 'Tyy');
xlabel('Applied Load (N)');
ylabel('Principal Stresses (MPa)');
title('Principal Stresses vs. Applied Load');
legend('Location', 'Best');
grid on;
% Plot 3: Comparison of Measured and Theoretical Longitudinal Stress
figure;
plot(xN, Cal.data_sigma_L(1:6), '-o', 'DisplayName', 'Measured Longitudinal Stress');
hold on;
plot(xN, Cal.data_Txx(1:6), '-o', 'DisplayName', 'Theoretical Longitudinal Stress');
xlabel('Applied Load (N)');
ylabel('Stress (MPa)');
title('Comparison of Measured and Theoretical Longitudinal Stress');
legend('Location', 'Best');
grid on;
% Display Load Cell Calibration Factor
disp('Load Cell Calibration Factor (N/Ɛ):');
Load Cell Calibration Factor (N/Ɛ):
disp(Calibration_Factor);
1.1621e+07
The .txt file is attached.
This code runs, however the variables data_nu, data_theta_p, data_Txx, and data_Tyy within the Cal struct all have Nan values. All other created variables contain the correct data pulled from the .txt file. Why is this happening?
  2 件のコメント
Stephen23
Stephen23 2023 年 12 月 9 日
編集済み: Stephen23 2023 年 12 月 9 日
"Why is this happening?"
Because the first eighty-five rows of channel data are zeros. What do you expect to get when you divide zero by zero?
Date Time 200245-Ch 1 ue 200245-Ch 2 ue 200245-Ch 3 ue
11/11/21 04:09:57:5492 0 0 0
11/11/21 04:09:57:6792 0 0 0
11/11/21 04:09:57:7992 0 0 0
11/11/21 04:09:57:9293 0 0 0
11/11/21 04:09:58:0593 0 0 0
11/11/21 04:09:58:1894 0 0 0
11/11/21 04:09:58:3194 0 0 0
11/11/21 04:09:58:4494 0 0 0
11/11/21 04:09:58:5795 0 0 0
11/11/21 04:09:58:7095 0 0 0
11/11/21 04:09:58:8395 0 0 0
11/11/21 04:09:58:9594 0 0 0
11/11/21 04:09:59:0896 0 0 0
11/11/21 04:09:59:2197 0 0 0
11/11/21 04:09:59:3596 0 0 0
11/11/21 04:09:59:4897 0 0 0
11/11/21 04:09:59:6197 0 0 0
11/11/21 04:09:59:7498 0 0 0
11/11/21 04:09:59:8799 0 0 0
... etc
hyu34gyd5
hyu34gyd5 2023 年 12 月 9 日
編集済み: hyu34gyd5 2023 年 12 月 9 日
My apologies, I came to this platform for help because I'm new to MATLAB and coding in general. I get it, you're the smart guy, but can you actually help?
I'm well aware that the first 85 entries are zero indicating that zero load had been applied. I still need the rest of the data (not all zeros) to plot my figures.

サインインしてコメントする。

回答 (1 件)

Stephen23
Stephen23 2023 年 12 月 9 日
編集済み: Stephen23 2023 年 12 月 9 日
Cal.data_Txx = ((E) ./ (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_1 + Cal.data_nu .* Cal.data_epsilon_2);
Cal.data_Tyy = ((E) ./ (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_2 + Cal.data_nu .* Cal.data_epsilon_1);
% ^^ you used the wrong operator here
The first 85 NaN are expected, as I explained in my comment.
  7 件のコメント
Sam Chak
Sam Chak 2023 年 12 月 10 日
Since the code is provided, most of the time, we can only advise on what went wrong in the code. If you are very new to MATLAB and coding, you may have difficulty understanding some technical aspects that we explain.
Therefore, I suggest that you provide a very clear picture (graphically) of what you intend to do with the data. Also, provide a sample outcome or plot that you expected.
Furthermore, some of us are not experts in the stress and strain field. Thus, we cannot verify if the formulas in the code are correct or not. You are advised to attach some images of the formulas so that we can check them.
Stephen23
Stephen23 2023 年 12 月 10 日
編集済み: Stephen23 2023 年 12 月 10 日
You could use K-means clustering to detect the groups:
after which it is very simple to take the mean of each group. First import the data from file:
fnm = 'Lab_4_Data.txt';
opt = detectImportOptions(fnm, 'Delimiter','\t', 'VariableNamingRule','preserve');
tbl = readtable(fnm,opt)
tbl = 212×4 table
Date Time 200245-Ch 1 ue 200245-Ch 2 ue 200245-Ch 3 ue __________________________ ______________ ______________ ______________ {'11/11/21 04:09:57:5492'} 0 0 0 {'11/11/21 04:09:57:6792'} 0 0 0 {'11/11/21 04:09:57:7992'} 0 0 0 {'11/11/21 04:09:57:9293'} 0 0 0 {'11/11/21 04:09:58:0593'} 0 0 0 {'11/11/21 04:09:58:1894'} 0 0 0 {'11/11/21 04:09:58:3194'} 0 0 0 {'11/11/21 04:09:58:4494'} 0 0 0 {'11/11/21 04:09:58:5795'} 0 0 0 {'11/11/21 04:09:58:7095'} 0 0 0 {'11/11/21 04:09:58:8395'} 0 0 0 {'11/11/21 04:09:58:9594'} 0 0 0 {'11/11/21 04:09:59:0896'} 0 0 0 {'11/11/21 04:09:59:2197'} 0 0 0 {'11/11/21 04:09:59:3596'} 0 0 0 {'11/11/21 04:09:59:4897'} 0 0 0
Then identify each group using K-means algorithm and take the mean of each channel in each group:
masses = [0,50,100,200,300,500]; % grams
mat = tbl{:,digitsPattern+wildcardPattern};
idx = kmeans(mat,numel(masses));
[~,~,idy] = unique(idx,'stable');
tmp = splitapply(@mean,mat,idy)
tmp = 6×3
0 0 0 -5.6364 21.8485 26.9394 -11.0000 44.0000 54.0000 -22.7097 87.3226 107.1290 -34.0000 131.0000 160.8824 -56.7826 218.4783 267.5652
Cal = struct;
Cal.data_uE1 = tmp(:,1);
Cal.data_uE2 = tmp(:,2);
Cal.data_uE3 = tmp(:,3);
After that comes the rest of your code:
Cal.data_E1 = Cal.data_uE1 * 1000000;
Cal.data_E2 = Cal.data_uE2 * 1000000;
Cal.data_E3 = Cal.data_uE3 * 1000000;
xN = (masses ./ 1000) * 9.81; % in newtons
% Calculate shear strain (𝛾xy)
Cal.data_gamma_xy = 2 * Cal.data_E2 - (Cal.data_E1 + Cal.data_E3);
% Calculate principal strains (Ɛ1, Ɛ2, Ɛ3)
Cal.data_epsilon_1 = Cal.data_E1;
Cal.data_epsilon_2 = 0.5 * Cal.data_gamma_xy;
Cal.data_epsilon_3 = Cal.data_E3;
% Calculate Poisson's ratio (v)
Cal.data_nu = abs(Cal.data_epsilon_2) ./ Cal.data_epsilon_1;
% Calculate angle of rotation (𝜃𝜃p)
Cal.data_theta_p = atand(Cal.data_gamma_xy ./ (Cal.data_epsilon_1 - Cal.data_epsilon_3));
% Calculate principal stresses (Txx, Tyy)
E = 69000; % Young's Modulus for aluminum in MPa
Cal.data_Txx = ((E) ./ (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_1 + Cal.data_nu .* Cal.data_epsilon_2);
Cal.data_Tyy = ((E) ./ (1 - Cal.data_nu.^2)) .* (Cal.data_epsilon_2 + Cal.data_nu .* Cal.data_epsilon_1);
% Calculate longitudinal stress from the beam flexure equation
P = xN; % applied load in Newtons
L = 0.241; % length of the beam in meters (replace with your actual value)
b = 0.025; % width of the beam in meters (replace with your actual value)
h = 0.00379; % thickness of the beam in meters (replace with your actual value)
c = h / 2;
% distance between gage's mounting line and dent at the end of the beam in meters
L_adjusted = 0.051;
I = (b * h^3) / 12;
Cal.data_sigma_L = (6 * P * L_adjusted) / (b * h^2);
% Calculate load cell calibration factor
Calibration_Factor = max(abs(Cal.data_epsilon_1)) / max(P);
% Plot 1: Principal Strains vs. Applied Load
figure;
plot(xN,Cal.data_epsilon_1, '-o', 'DisplayName', 'Ɛ1');
hold on;
plot(xN,Cal.data_epsilon_2, '-o', 'DisplayName', 'Ɛ2');
plot(xN,Cal.data_epsilon_3, '-o', 'DisplayName', 'Ɛ3');
xlabel('Applied Load (N)');
ylabel('Principal Strains (\mu\epsilon)');
title('Principal Strains vs. Applied Load');
legend('Location', 'Best');
grid on;
% Plot 2: Principal Stresses vs. Applied Load
figure;
plot(xN,Cal.data_Txx, '-o', 'DisplayName', 'Txx');
hold on;
plot(xN,Cal.data_Tyy, '-o', 'DisplayName', 'Tyy');
xlabel('Applied Load (N)');
ylabel('Principal Stresses (MPa)');
title('Principal Stresses vs. Applied Load');
legend('Location', 'Best');
grid on;
% Plot 3: Comparison of Measured and Theoretical Longitudinal Stress
figure;
plot(xN,Cal.data_sigma_L, '-o', 'DisplayName', 'Measured Longitudinal Stress');
hold on;
plot(xN,Cal.data_Txx, '-o', 'DisplayName', 'Theoretical Longitudinal Stress');
xlabel('Applied Load (N)');
ylabel('Stress (MPa)');
title('Comparison of Measured and Theoretical Longitudinal Stress');
legend('Location', 'Best');
grid on;
% Display Load Cell Calibration Factor
disp('Load Cell Calibration Factor (N/Ɛ):');
Load Cell Calibration Factor (N/Ɛ):
disp(Calibration_Factor);
1.1576e+07

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeStress and Strain についてさらに検索

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by