Matlab中是否有应用于矩阵的比较运算符,如点运算符'*''/''^';

Matlab中是否有应用于矩阵的比较运算符,如点运算符'*''/''^';,matlab,matrix,dot-operator,Matlab,Matrix,Dot Operator,我有这样的函数f function z=f(x,y) if(x<1 & y <1) z=0; else z=1; end end 运行此脚本时,我遇到以下错误: Z必须是矩阵,而不是标量或向量 这是因为这里的x和y是两个数组,而不是标量值。如果我更改了 function f looks like this: function z = f( x,y ) for i=1:size(x,2)

我有这样的函数f

function z=f(x,y)
    if(x<1 & y <1)
        z=0;
    else
        z=1;
    end
 end 
运行此脚本时,我遇到以下错误: Z必须是矩阵,而不是标量或向量

这是因为这里的x和y是两个数组,而不是标量值。如果我更改了

function f looks like this:
     function z = f( x,y )
     for i=1:size(x,2)
         for j=1:size(y,2)
             if(x(i)<1 & y(j)<1)
                 z(i,j)=0;
             else
                 z(i,j)=1;
             end
         end
     end
     end

非常感谢。

您得到了一个错误,因为函数
f(x,y)
z
返回一个标量,
mesh
期望
z
是一个矩阵。您可以使用简单、快速的矢量化解决方案替换上述所有函数和代码,该解决方案使用:

x=0:0.1:2;
y=0:0.1:2;
[X,Y]=网格网格(X,Y);
Z=个(尺寸(X));

Z(X(:)引用麦基先生的话:因为带有索引矩阵的循环是不好的,mkay?它占用了很多时间,mkay

为了提高效率,我将修改尤达的代码一个等级:

x=0:0.1:2;
y=0:0.1:2;
[X,Y]=meshgrid(x,y);
Z = ((X>1) | (Y>1))*1;
mesh(X,Y,Z);

非常感谢。使用逻辑索引的想法很好。我的问题已经解决了。@James:很高兴能提供帮助。也许你没有意识到,但是你可以通过单击答案旁边的复选标记将答案标记为“已接受”,以便其他可能有相同问题的人更容易找到有效的解决方案。
function z=f(x,y)
    z=x.*y;
 end
x=0:0.1:2;
y=0:0.1:2;
[X,Y]=meshgrid(x,y);
Z=ones(size(X));
Z(X(:)<1&Y(:)<1)=0;

mesh(X,Y,Z)
x=0:0.1:2;
y=0:0.1:2;
[X,Y]=meshgrid(x,y);
Z = ((X>1) | (Y>1))*1;
mesh(X,Y,Z);