在matlab中,如何使用具有条件的if循环(a是标量数,等于n长度向量v中的任何元素)

在matlab中,如何使用具有条件的if循环(a是标量数,等于n长度向量v中的任何元素),matlab,Matlab,我有一个函数replace\u me,它的定义如下:函数w=replace\u me(v,a,b,c)。第一个输入参数v是向量,而a,b和c都是标量。该函数用b和c替换v中与a相等的每个元素。例如,命令 x=replace_me([1,2,3],2,4,5)返回x作为[1 4 5 3] 我创建的代码是 function w = replace_me(v,a,b,c) [row,column]=size(v); new_col=column+1; w=(row:new_col); for

我有一个函数
replace\u me
,它的定义如下:
函数w=replace\u me(v,a,b,c)。
第一个输入参数v是向量,而a,b和c都是标量。该函数用b和c替换v中与a相等的每个元素。例如,命令
x=replace_me([1,2,3],2,4,5)
返回x作为
[1 4 5 3]

我创建的代码是

function w = replace_me(v,a,b,c)
[row,column]=size(v);
new_col=column+1;
w=(row:new_col);
    for n=(1:column)
        if a==v(n)
            v(n)=b;
            o=n;
            d=n-1;
            u=n+1;
            for z=1:d
                w(z)=v(z);
            end
            for z=u:column
                w(z+1)=v(z);
            end
            w(o)=b;
            w(o+1)=c;
        end
    end
end
对于
x=replace_me([1,2,3],2,4,5),它工作得非常好我获得了所需的输出,但当我尝试
x=replace_me([1 2 3],4,4,5)
时,我的函数失败了

为了解决这个问题,我想使用一个
if-else
语句,其条件是if
a
等于向量
v
的任何元素,我们将遵循上面的等式,否则它将返回向量

我试着用这个条件,但它不起作用

if v(1:column)==a

任何想法

我不完全确定我是否理解您试图实现的目标,但从我的理解来看,您正在寻找这样的想法:

function [v] = replace_me(v,a,b,c)

  v = reshape(v,numel(v),1); % Ensure that v is always a column vector
  tol = 0.001;
  aPos = find( abs(v-a) < tol ); % Used tol to avoid numerical issues as mentioned by excaza

  for i=numel(aPos):-1:1 % Loop backwards since the indices change when inserting elements
    index = aPos(i);
    v = [v(1:index-1); b; c; v(index+1:end)];
  end

end
函数[v]=替换(v,a,b,c)
v=重塑(v,努梅尔(v),1);%确保v始终是列向量
tol=0.001;
aPos=find(abs(v-a)
结束
结束

请澄清您想做什么,并添加一些标点符号。这里没有“if循环”欢迎使用堆栈溢出!虽然这个代码片段可以解决这个问题,但它确实有助于提高文章的质量。请记住,您将在将来回答读者的问题,这些人可能不知道您的代码建议的原因。
function w = move_me(v,a)
 if nargin == 2
   w=v(v~=a);
   w(end+1:end+(length(v)-length(w)))=a;
elseif isscalar(v)
   w=v;
else
   w=v(v~=0);
   w(end+1)=0;