% 计算每个网格点的主应力 S = [S1(:), S2(:), S3(:)]; [~, D] = eig(S); sigma1 = D(:, 3); sigma2 = D(:, 2); sigma3 = D(:, 1); % 计算每个网格点的 Mises 应力和 Tresca 应力 seq = sqrt((sigma1 - sigma2).^2 + (sigma2 - sigma3).^2 + (sigma3 - sigma1).^2) / sqrt(2); taumax = max(abs(sigma1 - sigma2), abs(sigma2 - sigma3), abs(sigma3 - sigma1)); % 绘制 Mises 应力和 Tresca 应力在 pi 平面上的投影 figure; scatter(seq, taumax, 10, 'filled'); xlabel('Equivalent Stress \sigma_{eq}'); ylabel('Maximum Shear Stress \tau_{max}'); title('Mises and Tresca in Principal Stress Space'); grid on; % 绘制主应力坐标轴 hold on; plot([0 1], [0 0], '-k', 'LineWidth', 1); plot([0 0], [0 1], '-k', 'LineWidth', 1);这段代码尤问题 改下这段代码提示eig格式错误
时间: 2023-12-10 08:41:22 浏览: 142
可能是你输入的 S 不符合要求。eig 函数需要输入一个方阵,而 S 是一个列向量,你需要先将 S 转换成方阵形式。修改代码如下:
```
% 假设 S1,S2,S3 分别为三个列向量
S = [S1(:), S2(:), S3(:)];
n = size(S, 1); % 获取网格点数
seq = zeros(n, 1);
taumax = zeros(n, 1);
for i = 1:n
[~, D] = eig(reshape(S(i,:), 3, 3)); % 将 S 转换成方阵形式,并计算 eig
sigma1 = D(3, 3);
sigma2 = D(2, 2);
sigma3 = D(1, 1);
seq(i) = sqrt((sigma1 - sigma2)^2 + (sigma2 - sigma3)^2 + (sigma3 - sigma1)^2) / sqrt(2);
taumax(i) = max(abs(sigma1 - sigma2), abs(sigma2 - sigma3), abs(sigma3 - sigma1));
end
% 绘制 Mises 应力和 Tresca 应力在 pi 平面上的投影
figure;
scatter(seq, taumax, 10, 'filled');
xlabel('Equivalent Stress \sigma_{eq}');
ylabel('Maximum Shear Stress \tau_{max}');
title('Mises and Tresca in Principal Stress Space');
grid on;
% 绘制主应力坐标轴
hold on;
plot([0 1], [0 0], '-k', 'LineWidth', 1);
plot([0 0], [0 1], '-k', 'LineWidth', 1);
```
这样应该就可以正常运行了。
阅读全文