Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 如何创建仅用于计算向量中奇数和的倍频程函数?_Matlab_Octave - Fatal编程技术网

Matlab 如何创建仅用于计算向量中奇数和的倍频程函数?

Matlab 如何创建仅用于计算向量中奇数和的倍频程函数?,matlab,octave,Matlab,Octave,我在八度音阶上创建了一个函数文件 function y = sum_odd(n) if rem(n,2) ==1 sum_odd = sum(n) endif endfunction 我想让函数计算每个向量中奇数的和。 但当我尝试求和(sum_-odd)([1,2,3])时,它并不适合我 有没有解决此问题的方法?您只需使用: rem([1 2 3],2)==1)返回逻辑数组:[1 0 1] n(逻辑([1 0 1])返回[1 3]` su

我在八度音阶上创建了一个函数文件

function y = sum_odd(n)
       if rem(n,2) ==1
         sum_odd = sum(n)
       endif
    endfunction
我想让函数计算每个向量中奇数的和。 但当我尝试求和(sum_-odd)([1,2,3])时,它并不适合我

有没有解决此问题的方法?

您只需使用:

  • rem([1 2 3],2)==1)
    返回逻辑数组:
    [1 0 1]
  • n(逻辑([1 0 1])返回
    [1 3]`
  • sum(n(rem([1 2 3],2)==1))
    返回
    [1 3]
    的和
您只需使用:

  • rem([1 2 3],2)==1)
    返回逻辑数组:
    [1 0 1]
  • n(逻辑([1 0 1])返回
    [1 3]`
  • sum(n(rem([1 2 3],2)==1))
    返回
    [1 3]
    的和
您显然只是在学习matlab,并且来自不同的语言-这里有一些基本语法问题:只需使用
end
而不是
endif
endfunction
;您正在分配给函数名
sum_odd
,而不是返回变量
y
;在matlab中,函数为
mod
not
rem
。此外,这显然也是你要回答的一个指导性问题,因此如果我们只是给你答案,它不会真正帮助你。matlab有很多很好的在线文档,请尝试“使用逻辑值索引”@euransith,很抱歉误解了您的意思。我指的是八度音阶,不是Matlab。语言是相似的。啊,好的。但是,使用逻辑值进行索引仍然是您需要的参考-这两者都是相同的。@Eupransith:
mod
rem
都存在于MATLAB中,并且不做相同的事情。@CrisLuengo确实如此。我已经查过了。但是
endif
不在matlab中,分配给
sum_odd
是不正确的。很明显,您只是在学习matlab,并且来自不同的语言-这里有一些基本语法问题:只需使用
end
而不是
endif
endfunction
;您正在分配给函数名
sum_odd
,而不是返回变量
y
;在matlab中,函数为
mod
not
rem
。此外,这显然也是你要回答的一个指导性问题,因此如果我们只是给你答案,它不会真正帮助你。matlab有很多很好的在线文档,请尝试“使用逻辑值索引”@euransith,很抱歉误解了您的意思。我指的是八度音阶,不是Matlab。语言是相似的。啊,好的。但是,使用逻辑值进行索引仍然是您需要的参考-这两者都是相同的。@Eupransith:
mod
rem
都存在于MATLAB中,并且不做相同的事情。@CrisLuengo确实如此。我已经查过了。但是,
endif
不在matlab中,并且分配给
sum_odd
是不正确的
function y = sum_odd(n)
    y = sum(n(rem(n,2)==1))
end