Matlab 矩阵的边值问题

Matlab 矩阵的边值问题,matlab,matrix,Matlab,Matrix,问题:我需要钳制[-1,1]范围内p矩阵的每个元素。我使用了提供的代码,但此代码仅适用于向量。所以,我对它进行了修改,使之适用于矩阵。修改后的函数代码MinMaxCheckMatrix仅更改第一列,但第二列元素未被检查或钳制。我无法理解为什么整个P矩阵没有受到影响。请帮忙改正 SomeVector = [20 0 -20 1 5 0.9 1.1 0.2

问题:我需要钳制[-1,1]范围内p矩阵的每个元素。我使用了提供的代码,但此代码仅适用于向量。所以,我对它进行了修改,使之适用于矩阵。修改后的函数代码
MinMaxCheckMatrix
仅更改第一列,但第二列元素未被检查或钳制。我无法理解为什么整个P矩阵没有受到影响。请帮忙改正

 SomeVector =     [20 0
                     -20 1
                      5 0.9
                      1.1 0.2
                      10  20];

 for rows =1:5
  P(rows,:) = SomeVector;
  min_range(rows,:)=-1;
  max_range(rows,:)=1;
end
 P = MinMaxCheckMatrix(min_range, max_range, P);

**Function**
function [ A2comp ] = MinMaxCheckMatrix( minimum, maximum, A2comp )
[row col] = size(minimum);

for i=1:row
    for j=1:col
        if(maximum(i,j)<A2comp(i,j)||minimum(i,j)>A2comp(i,j))
            if(maximum(i,j)<A2comp(i,j))
                A2comp(i,j)=maximum(i,j);
            else A2comp(i,j)=minimum(i,j);
            end
        end
   end
end


This is the result that I got:

P =

    1.0000         0
   -1.0000    1.0000
    1.0000    0.9000
    1.0000    0.2000
    1.0000   20.0000
SomeVector=[20 0
-20 1
5 0.9
1.1 0.2
10  20];
行数=1:5
P(行,:)=SomeVector;
最小范围(行:)=-1;
最大范围(行:)=1;
结束
P=MinMaxCheckMatrix(最小范围,最大范围,P);
**作用**
函数[A2comp]=MinMaxCheckMatrix(最小值、最大值、A2comp)
[行列]=大小(最小值);
对于i=1:行
对于j=1:col
if(最大(i,j)A2comp(i,j))
如果(最大值(i,j)这是因为
大小(最小值)
大小(A2comp)
不同

看着

P(rows,:) = SomeVector;
min_range(rows,:)=-1;
max_range(rows,:)=1;
列数由右侧决定,因此只有一列创建的
min\u range
max\u range

您可以将其矢量化:

function [ A2comp ] = MinMaxCheckMatrix( minimum, maximum, A2comp )
    A2comp = bsxfun(@max, A2comp, minimum);
    A2comp = bsxfun(@min, A2comp, maximum);
end
这是因为
大小(最小值)
大小(A2comp)
不同

看着

P(rows,:) = SomeVector;
min_range(rows,:)=-1;
max_range(rows,:)=1;
列数由右侧决定,因此只有一列创建的
min\u range
max\u range

您可以将其矢量化:

function [ A2comp ] = MinMaxCheckMatrix( minimum, maximum, A2comp )
    A2comp = bsxfun(@max, A2comp, minimum);
    A2comp = bsxfun(@min, A2comp, maximum);
end

除非我遗漏了什么,否则这似乎是一种非常复杂的方法:

P(P < -1) = -1;
P(P > 1) = 1;
P(P<-1)=-1;
P(P>1)=1;
或者,爱好者:

function mat = clamp(mat, minval, maxval)
mat(mat < minval) = minval;
mat(mat > maxval) = maxval;
功能垫=夹紧(垫、最小值、最大值)
mat(matmaxval)=maxval;

除非我遗漏了什么,否则这似乎是一种非常复杂的方法:

P(P < -1) = -1;
P(P > 1) = 1;
P(P<-1)=-1;
P(P>1)=1;
或者,爱好者:

function mat = clamp(mat, minval, maxval)
mat(mat < minval) = minval;
mat(mat > maxval) = maxval;
功能垫=夹紧(垫、最小值、最大值)
mat(matmaxval)=maxval;

我通常喜欢这样写:

function [ mO ] = ClampArray( mO, minVal, maxVal )

mO = max(min(mO, maxVal), minVal);


end

现在,您所需要的就是
p=ClampArray(p,-1,1);

我通常喜欢这样写:

function [ mO ] = ClampArray( mO, minVal, maxVal )

mO = max(min(mO, maxVal), minVal);


end

现在您只需要
p=ClampArray(p,-1,1)

我很难理解矢量化代码。你能不能容忍正常循环,我认为我犯了一个愚蠢的错误。最小范围应该是一个向量或大小为1行2列的向量?我很难理解矢量化代码。你能不能容忍正常循环,我认为我犯了一个愚蠢的错误e、 最小范围应该是一个向量或大小为1行2列的向量?