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