MATLAB主应力计算代码生成表格仅第五行有值问题排查
问题原因
- 结果数组初始化位置错误:原代码将A、B、H等结果数组的
zeros(1,5)初始化语句写在for循环内部,每次循环都会先将整个数组重置为全0,再仅修改当前循环位的数值。循环执行到最后一次时,数组仅保留第5位的赋值,前面4次的计算结果全部被覆盖清零。 - 符号表达式不会自动更新数值:原代码提前用符号变量定义了主应力等的计算公式,后续给sigma_xx、sigma_yy、sigma_xy赋值标量时,提前定义的符号表达式不会自动重新计算得到新的数值,需要将计算逻辑移入for循环内部,每次赋值应力分量后重新计算对应结果。
修正后代码
% 预初始化结果数组(仅在循环外执行1次) A = zeros(1,5); % σ max B = zeros(1,5); % σ min H = zeros(1,5); % tau max C = zeros(1,5); % alpha D = zeros(1,5); % primary direction x x value E = zeros(1,5); % primary direction x y value F = zeros(1,5); % primary direction y x value G = zeros(1,5); % primary direction y y value % 输入应力分量 xx=[60 200 900 400 0]; yy=[0 -200 100 800 240]; xy=[40 -200 200 600 120]; for n = 1:length(xx) sigma_xx=xx(n); sigma_yy=yy(n); sigma_xy=xy(n); % 计算逻辑移入循环内,每次更新应力分量后重新计算 sigma_max=0.5*((sigma_xx)+(sigma_yy))+sqrt(0.25*(((sigma_xx)-(sigma_yy))^2)+(sigma_xy)^2); sigma_min=0.5*((sigma_xx)+(sigma_yy))-sqrt(0.25*(((sigma_xx)-(sigma_yy))^2)+(sigma_xy)^2); tau_max=0.5*((sigma_max)-(sigma_min)); alpha=(180/pi)*0.5*(atan((2*sigma_xy)/(sigma_xx-sigma_yy))); primary_direction_x_x_value=cosd(alpha); primary_direction_x_y_value=sind(alpha); primary_direction_y_x_value=-sind(alpha); primary_direction_y_y_value=cosd(alpha); % 对应位置赋值 A(n)=sigma_max; B(n)=sigma_min; H(n)=tau_max; C(n)=alpha; D(n)=primary_direction_x_x_value; E(n)=primary_direction_x_y_value; F(n)=primary_direction_y_x_value; G(n)=primary_direction_y_y_value; end varNames = {'σ max [Mpa]';'σ min [Mpa]';'tau max [Mpa]';'alpha [°]';'primary direction x x value';'primary direction x y value';'primary direction y x value';'primary direction y y value'}; T=table(A',B',H',C',D',E',F',G','VariableNames',varNames)
内容的提问来源于stack exchange,提问作者step bakun
相关产品推荐
相关产品推荐

