当我尝试使用我的预定义函数和向量求解时,我收到以下错误消息:
警告:找不到明确的解决方案 在169解决 在33岁的cardanAngles中
我有三个未知变量和三个方程式。我应该能找到这个答案。可能有什么不对?
V0 = transpose([-0.7969, 0.1778, 0.5774]);
V = [-0.7976 , 0.2282 , 0.5583];
syms a1 a2 a3
F1 = [ cos(a3 * pi / 180).*cos(a2 * pi / 180), cos(a3 * pi / 180).*sin(a2 * pi / 180).*sin(a1 * pi / 180)+sin(a3 * pi / 180).*cos(a1 * pi / 180), -cos(a3 * pi / 180).*sin(a2 * pi / 180).*cos(a1 * pi / 180)+sin(a3 * pi / 180).*sin(a1 * pi / 180)];
F2 = [-sin(a3 * pi / 180).*cos(a2 * pi / 180), -sin(a3 * pi / 180).*sin(a2 * pi / 180).*sin(a1 * pi / 180)+cos(a3 * pi / 180).*cos(a1 * pi / 180), sin(a3 * pi / 180).*sin(a2 * pi / 180).*cos(a1 * pi / 180)+cos(a3 * pi / 180).*sin(a1 * pi / 180)];
F3 = [ sin(a2 * pi / 180) , -cos(a2 * pi / 180).*sin(a1 * pi / 180) , cos(a2 * pi / 180).*cos(a1 * pi / 180) ];
[a1, a2,a3] = solve(V(1)==F1*V0,V(2)==F2*V0, V(3)==F3*V0, a1,a1,a3);
答案 0 :(得分:1)
如果有解决方案,您可以先解决最后一个问题。也就是F3*V0-V(3)=0
。
方程式如下:
F3 = [sin(a2), -cos(a2).*sin(a1), cos(a2).*cos(a1)];
V0 = [-0.7969, 0.1778, 0.5774]';
F=V0(1)*sin(a2) - V0(2)*cos(a2)*sin(a1) + V0(3)*cos(a1)*cos(a2) - V(3);
我们现在需要在某个地方寻找F=0
的一系列解决方案,快速分析会产生这样的结果:
现在,您可以使用这些作为评论中建议的fsolve
过程的初始猜测值。您可以按一下原始表格并编写以下功能:
function F = qfun(x)
V0 = transpose([-0.7969, 0.1778, 0.5774]);
V = [-0.7976 , 0.2282 , 0.5583];
F1 = [ cos(x(3) ).*cos(x(2) ), cos(x(3) ).*sin(x(2) ).*sin(x(1) )+sin(x(3) ).*cos(x(1) ), -cos(x(3) ).*sin(x(2) ).*cos(x(1) )+sin(x(3) ).*sin(x(1) )];
F2 = [-sin(x(3) ).*cos(x(2) ), -sin(x(3) ).*sin(x(2) ).*sin(x(1) )+cos(x(3) ).*cos(x(1) ), sin(x(3) ).*sin(x(2) ).*cos(x(1) )+cos(x(3) ).*sin(x(1) )];
F3 = [ sin(x(2) ) , -cos(x(2) ).*sin(x(1) ) , cos(x(2) ).*cos(x(1) ) ];
F=(F1*V0-V(1))+abs(F2*V0-V(2))+abs(F3*V0-V(3));
然后在单独的文件上运行类似:
options = optimset('Display','off');
for ...
x0 = [a1_found a2_found 0]; % guess values
[x,Fval,exitflag] = fsolve(@qfun,x0,options);
end...
每个猜测值向量将输出最近的解,因此循环可以对角度值进行良好的采样,得到a3
。