我有一些以下形式的Matlab代码:
syms theta x
theta = acos(x)
这将返回theta的单个解决方案。但是,我想返回完整的解决方案(在某些限制之间)。
例如,
x = cos(theta)
对于θ= 60度,120度,420度等,会给出x = 0.5。因此,在上面的代码中,我希望theta返回所有这些可能的值。
有谁知道怎么做?我一直在谷歌搜索几个小时,但我找不到如何做到这一点!
非常感谢!
答案 0 :(得分:1)
这是一个数值解决方案;就像Benoit_11一样,在这种背景下,我没有看到象征性地做到这一点。
区间内有两个解决方案[-pi,pi],较大的一个由acos
返回:
% solution within [0, pi]
theta1 = acos(x);
% solution within [-pi, 0]
theta2 = -acos(x);
这些解决方案以2 pi的步骤重复。向下和向上的可能步骤的数量可以由基本解决方案与相应限制(lower
和upper
)之间的距离的整数部分确定,以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
如果您想要一个合并的解决方案列表,请排除可能的重复项:
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
答案 1 :(得分:-1)
你只需要使用一个循环:
for x = limit_inf:step:limit_sup
theta(x) = acos(x);
end
并定义您的限制以及它们之间的步骤。