0

    n0 =

 nx*cos(a) + nz*cos(b)*sin(a) + ny*sin(a)*sin(b)
                           ny*cos(b) - nz*sin(b)
 nz*cos(a)*cos(b) - nx*sin(a) + ny*cos(a)*sin(b)

在 a 和 b 中,ns 固定(但当然,未分配)值。如果我做

[a,b]=solve(n0-[1 0 0]',a,b,'IgnoreAnalyticConstraints',true)

我明白了

    Error using solve>assignOutputs (line 257)
3 variables does not match 2 outputs.

    Error in solve (line 193)
varargout = assignOutputs(nargout,sol,sym(vars));

那么我想知道''3个变量''?然后我尝试

>> [a,b,c]=solve(n0-[1 0 0]',a,b,'IgnoreAnalyticConstraints',true)

这就是回应

a =

cos(a)/(cos(a)^2 + sin(a)^2)


b =

(sin(a)*sin(b))/((cos(a)^2 + sin(a)^2)*(cos(b)^2 + sin(b)^2))


c =

(cos(b)*sin(a))/((cos(a)^2 + sin(a)^2)*(cos(b)^2 + sin(b)^2))

它在做什么?c里面有什么?我想他正在解决关于 nx ny nz 的问题,但是为什么?每次我尝试用 n 个变量中的 n+k 方程解决问题时,我都会遇到奇怪的错误,即使系统的等级只是 n。

这意味着即使 a=2 b=3 a+b=5 也会给我带来问题。我该如何解决?

4

1 回答 1

0

我也无法复制“解决中的错误”错误。你用的是什么版本的matlab?另外,我认为一些错误信息丢失了——总是列出整个错误信息。无论如何,R2013asolve没有找到任何解决方案。Mathematica 9Solve也没有找到。

我怀疑为什么@DanielR 和我在第二种情况下不能完全减少您的问题,因为您可能在上面的一行中有错误 - 它应该是:

[a,b,c] = solve(n0-[1 0 0]','IgnoreAnalyticConstraints',true)

产生

a =

cos(a)/(cos(a)^2 + sin(a)^2)


b =

(sin(a)*sin(b))/((cos(a)^2 + sin(a)^2)*(cos(b)^2 + sin(b)^2))


c =

(cos(b)*sin(a))/((cos(a)^2 + sin(a)^2)*(cos(b)^2 + sin(b)^2))

什么是输出abc(顺便说一下,这些简化为cos(a)sin(a)*sin(b)sin(a)*cos(b))?一个重要提示是,所有解决方案都是根据您的原始变量ab,但不是nxnynz。当您不指定要解决的变量时,会solve选择它们。如果您改为以结构形式返回解决方案,则输出的性质将变得清晰:

s = solve(n0-[1 0 0]','IgnoreAnalyticConstraints',true)

s = 

    nx: [1x1 sym]
    ny: [1x1 sym]
    nz: [1x1 sym]

但我认为您可能希望解决ab作为 、 和 的函数nxnynz不是相反。您不正确地使用solve来寻找超定系统的解决方案。即使你有更多的方程而不是未知数,这对于非线性方程也并不总是可能的。如果您可以引入一些甚至额外的方程或为任何、或变量assumptions指定数值,则可能能够分离和反转方程。nxnynzsolve

除了线性系统之外,您不应该真正使用术语“等级” 。对于您提供的线性系统示例,solve效果很好:

[a,b] = solve([a==2 b==3 a+b==5],a,b)

或者

[a,b] = solve(a==2,b==3,a+b==5,a,b)

或者

[a,b] = solve([1 0;0 1;1 1]*[a;b]==[2;3;5],a,b)

返回

Warning: 3 equations in 2 variables. 
> In /Applications/MATLAB_R2013a.app/toolbox/symbolic/symbolic/symengine.p>symengine at 56
  In mupadengine.mupadengine>mupadengine.evalin at 97
  In mupadengine.mupadengine>mupadengine.feval at 150
  In solve at 170 

a =

2


b =

3
于 2014-01-05T21:14:03.600 回答