f2=@(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-... b1.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield;,MATLAB中,参照f2,将tresca模型的函数写成f3
时间: 2024-03-11 07:50:24 浏览: 25
根据Treaca模型的定义,可以得到其应力判据为:
f3 = max(abs(sigma1 - sigma2), abs(sigma2 - sigma3), abs(sigma3 - sigma1)) - yield
其中,sigma1、sigma2、sigma3为应力主值,yield为屈服强度。
对应到 MATLAB 代码中,可以写成:
```matlab
function f3 = tresca(sigma1, sigma2, sigma3, yield)
f3 = max(abs(sigma1 - sigma2), abs(sigma2 - sigma3), abs(sigma3 - sigma1)) - yield;
end
```
其中,输入参数分别为应力主值 sigma1、sigma2、sigma3 和屈服强度 yield,输出为应力判据 f3。
相关问题
MATLAB中 f1=@(x,y,z) x+y+z; if (x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27) >= 0 f21=@(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-... b1.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield; else f22=@(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-... b2.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield; end f2 = [f21 f22] 这句语法对吗
这个语法是不正确的,因为 f21 和 f22 是在 if-else 语句块中定义的局部函数句柄,不能在 if-else 语句块外部使用。如果需要在 if-else 语句块外部使用 f2,可以先在外部定义 f21 和 f22 函数句柄,然后在 if-else 语句块中分别给 f2 赋值,如下所示:
```matlab
f21 = @(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-b1.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield;
f22 = @(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-b2.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield;
if (x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27) >= 0
f2 = f21;
else
f2 = f22;
end
```
这样就可以正确地定义 f2。
f21 = @(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-b1.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield; f22 = @(x,y,z) ((((((x+y+z).^2))/3-(x.*y+y.*z+z.*x))).^(3/2)-b2.*(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27))-yield; if (x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27) >= 0 f2 = f21; else f2 = f22; end 这段代码不对,运行提示矩阵维度必须一致。 出错 New_Cazacu_Barlat_Of_Third_Effect_in_pai_space_curve_3D_3 (line 26) if (x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27) >= 0
根据代码,出错的原因是在条件语句中,左右两边的矩阵维度不一致。具体来说,是因为在计算 `(x.*y.*z-(x+y+z).*(x.*y+y.*z+z.*x)./3+(2.*(x+y+z).^3)./27)` 时,可能会得到一个矩阵,而条件语句中的 `0` 是一个标量,两者无法比较大小。
解决这个问题的方法是将条件语句中的 `0` 改为一个与上述计算结果维度一致的矩阵,比如可以将 `0` 改为 `zeros(size(x))`。这样做可以确保两边的维度一致,从而避免出现维度不一致的错误。
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)