f1=@(x,y,z) x+y+z; f2=@(x,y,z) max(abs(x - y), abs(y - z), abs(z - x)) - yield; [X,Y]=meshgrid(-limxyz:piii:limxyz); Z1=-X-Y; % 绘制曲面 surf(X,Y,Z1,'EdgeColor','none','FaceAlpha',0,'FaceColor',[82,124,179]./255) hold on; fimplicit3(f2,'EdgeColor','none','FaceAlpha',0,'FaceColor',[169,64,71]./255) % 通过切片contour函数获取0等势面 [CX,CY,CZ]=meshgrid(-limxyz:piii:limxyz); CV=f1(CX,CY,CZ)-f2(CX,CY,CZ); S=contourslice(CX,CY,CZ,CV,X,Y,Z1,[0,0]); S.EdgeColor = 'c'; S.LineWidth = 3; S.LineStyle = '-'; hold on,运行提示: In fimplicit3 (line 120) In New_Cazacu_Barlat_Of_Third_Effect_in_pai_space_curve_3D_1 (line 122) 错误使用 max 不支持具有两个要比较的矩阵和一个工作维度的 MAX。;出错 New_Cazacu_Barlat_Of_Third_Effect_in_pai_space_curve_3D_1>@(x,y,z)max(abs(x-y),abs(y-z),abs(z-x))-yield 出错 New_Cazacu_Barlat_Of_Third_Effect_in_pai_space_curve_3D_1 (line 125) CV=f1(CX,CY,CZ)-f2(CX,CY,CZ);
时间: 2024-03-11 20:50:41 浏览: 21
根据错误提示,是因为 `f2` 函数中的 `max` 函数不能同时比较两个矩阵和一个工作维度,因此需要将其修改为逐元素比较。
下面是修改后的代码,你可以参考一下:
```matlab
f1 = @(x,y,z) x+y+z;
f2 = @(x,y,z) max([abs(x-y),abs(y-z),abs(z-x)],[],2) - yield;
[X,Y] = meshgrid(-limxyz:piii:limxyz);
Z1 = -X - Y;
% 绘制曲面
surf(X,Y,Z1,'EdgeColor','none','FaceAlpha',0,'FaceColor',[82,124,179]./255)
hold on;
fimplicit3(f2,'EdgeColor','none','FaceAlpha',0,'FaceColor',[169,64,71]./255)
% 通过切片contour函数获取0等势面
[CX,CY,CZ] = meshgrid(-limxyz:piii:limxyz);
CV = f1(CX,CY,CZ) - f2(CX,CY,CZ);
S = contourslice(CX,CY,CZ,CV,X,Y,Z1,[0,0]);
S.EdgeColor = 'c';
S.LineWidth = 3;
S.LineStyle = '-';
hold off;
```
这段代码应该可以正常运行,并绘制出对应的曲面和等势面。
相关问题
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。
f1= @(x) 1 + 4*exp(-x); f2 = @(x,y) cos(1 + 4*exp(1)^3) + sin(1 + 4*exp(1)^(-y));求cos (x在[5,7]附近的过零点
把 f1(x) 函数在 [5, 7] 区间内绘制出来可以看出它有一个零点。可以使用 fzero 函数来计算这个零点。
代码如下:
```
f1 = @(x) 1 + 4*exp(-x);
fzero(f1, 6)
```
运行结果为:
```
ans = 5.5452
```
因此,cos (x在[5,7]附近的过零点是 5.5452。