1. ホーム
  2. matlab

[解決済み] Matlab: 逆コサイン(acos)の完全解を返す

2022-02-12 12:26:43

質問

次のような形式のMatlabのコードがあります。

syms theta x theta = acos(x)

これは、thetaの単一の解を返します。しかし、私は完全な解を(ある限界の間で)返したいのです。

例えば

x = cos(theta)

は、theta = 60度、120度、420度などではx=0.5となります。したがって、上のコードでは、thetaがこれらすべての可能な値を返すようにしたいのです。

どなたか、この方法をご存じないでしょうか?何時間もgoogleで検索しているのですが、この方法を見つけることができません

ありがとうございます。

解決方法は?

Benoit_11のように、この文脈では記号的に解く意味がないと思います。

区間[-pi, pi]には2つの解があり、大きい方の解は acos :

% solution within [0, pi]
theta1 = acos(x);
% solution within [-pi, 0]
theta2 = -acos(x);

これらの解は2πのステップで繰り返される。下降と上昇の可能なステップ数は、基本解とそれぞれの限界の間の距離の整数部によって決定できる ( lowerupper )を2πの単位で表示します。の場合 theta1 :

% repetitions in 2 pi intervals within limits
sd = floor((theta1 - lower) / (2 * pi));
su = floor((upper - theta1) / (2 * pi));
theta1 = (-sd : su) * 2 * pi + theta1

また、同じように theta2 :

% repetitions in 2 pi intervals within limits
sd = floor((theta2 - lower) / (2 * pi));
su = floor((upper - theta2) / (2 * pi));
theta2 = (-sd : su) * 2 * pi + theta2

重複する可能性のあるものを除いて、1つにまとめた解決策のリストが必要な場合。

theta = unique([theta1, theta2])

と度数で表示します。

theta = theta / pi * 180;


x = 0.5;
lower = -10;
upper = 30;

与える

theta =

   -7.3304   -5.2360   -1.0472    1.0472    5.2360    7.3304   11.5192   13.6136   17.8024   19.8968   24.0855   26.1799