4

256x938のマトリックスがあります。個々の要素を調べて、-pi <element <piの範囲にあるかどうかを確認する必要があります。そうでない場合は、2 * piの倍数を減算または加算して、範囲内の要素を取得する必要があります。非常に非効率的であることがわかったため、forループがないことが望ましい。

4

3 に答える 3

4

提示された他のソリューションとは異なりますが、必要なコードは1行だけなので、少しすっきりしています...

B = mod(A+pi,2*pi) - pi;

A = -20:2:20;
mod(A+pi,2*pi) - pi
ans =
  Columns 1 through 12
 -1.1504  0.84956 2.8496 -1.4336  0.56637 2.5664 -1.7168  0.28319 2.2832   -2   0  2

  Columns 13 through 21
 -2.2832 -0.28319 1.7168 -2.5664 -0.56637 1.4336 -2.8496 -0.84956 1.1504
于 2012-11-15T00:43:56.460 に答える
1

これは、あなたの望むことですか?

B=rem(A,2*pi)
B(A<-pi)=A(A<-pi)+2*pi
B(A>pi)=A(A>pi)-2*pi

のすべての要素bB-pi <= b <= piです。

-pi < b < pi質問にある通りにはなりません。

于 2012-11-14T23:28:59.500 に答える
0

私は現在Matlabを手元に持っていないので、私の提案はうまくいかないかもしれませんが、アイデアがうまくいくことを願っています.

この方法で何かを試してください:

c = cos(B); % will set all your elements between [-1 1]
B2 = acos(c);  % will return values between [0 PI] but for some the sign will be wrong
B2 = B2.*sign(sin(B)); % should set the correct sign for each element.

これがうまくいくことを願っています。

3 行すべてを 1 つに要約することもできましたが、アイデアをできるだけ明確にしようとしました。

于 2012-11-15T03:26:02.087 に答える