在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
语句,其条件是ifa
等于向量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;