You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 17:57:03