3

我有六个参数方程,使用 18 个(实际上不是 26 个)不同的变量,其中 6 个是未知的。

我可以坐下来拿几张纸,计算出每个未知数的方程是什么,但是有没有一个简单的程序解决方案(我在 Matlab 中考虑)可以找出我正在寻找的六个方程为了?

编辑: 很遗憾这已经关闭,但我想我明白为什么。如果有人仍然感兴趣,这些方程(我相信)是非线性的:

r11^2 = (l_x1*s_x + m_x)^2 + (l_y1*s_y + m_y)^2
r12^2 = (l_x2*s_x + m_x)^2 + (l_y2*s_y + m_y)^2
r13^2 = (l_x3*s_x + m_x)^2 + (l_y3*s_y + m_y)^2
r21^2 = (l_x1*s_x + m_x - t_x)^2 + (l_y1*s_y + m_y - t_y)^2
r22^2 = (l_x2*s_x + m_x - t_x)^2 + (l_y2*s_y + m_y - t_y)^2
r23^2 = (l_x3*s_x + m_x - t_x)^2 + (l_y3*s_y + m_y - t_y)^2

(平方rs,好地方@gnovice!)

我需要在哪里找到t_x t_y m_x m_y s_xs_y

我为什么要计算这些?对于三个坐标 ( {1,2,3})中的每一个,有两个点 p1 (at 0,0) 和 p2 at( ) 我知道从 p1 和 p2 到该点的距离 ( & ),但在不同的坐标系中。变量并定义我需要多少缩放一组坐标才能到达另一组,以及我需要翻译多少(使用并作为一种方法来解释两个系统中的旋转差异)t_x,t_yl_x,l_yr1r2s_xs_ym_xm_yt_xt_y

哦!而且我忘了提,我也知道点 ( l_x,l_y) 低于 p1 和 p2 的最高点,即l_y< max( 0, t_y) 以及l_y> 0 和l_y< t_y

它看起来确实足够具体,以至于我可能只需要拿出我的垫子并用数学方法完成它!

4

5 回答 5

1

它们是线性的吗?如果是这样,那么您可以使用线性代数原理建立一个表示方程组的 6x6 矩阵,并使用任何标准矩阵求逆例程来求解它...

如果它们不是线性的,则需要使用数值分析方法。

正如我多年前所记得的那样,我相信您随后会创建一个非线性方程的线性近似系统,并一遍又一遍地迭代求解该线性系统,每次将答案反馈到输入中,直到出现错误指标变得足够小,表明您已达到解决方案。这显然是用计算机完成的,我相信有数值分析软件包可以为你做这件事,尽管我认为任何非线性方程组的任意系统都可以包括几乎无限程度的不同类型和复杂程度,这些软件包无法为您创建线性近似值(可能在最直接的标准情况下除外),您将不必手动完成这部分工作。

于 2009-12-11T15:42:18.077 回答
1

如果你有Symbolic Toolbox,你可以使用SOLVE函数。例如:

>> solve('x^2 + y^2 = z^2','z')    %# Solve for the symbolic variable z

ans =

  (x^2 + y^2)^(1/2)
 -(x^2 + y^2)^(1/2)

您还可以为 N 个变量求解 N 个方程组。这是一个包含 2 个方程、2 个要求解 (xy) 的未知数和 6 个参数 (a通过f) 的示例:

>> S = solve('a*x + b*y = c','d*x - e*y = f','x','y')
>> S.x

ans =

(b*f + c*e)/(a*e + b*d)

>> S.y

ans =

-(a*f - c*d)/(a*e + b*d)
于 2009-12-11T15:49:12.947 回答
1

是的(假设这些是线性方程) - 你通过创建一个矩阵方程来做到这一点,它相当于你的 6 个线性方程,例如,如果你有两个方程:

6x + 12y = 9
7x - 8y = 14

这可以等效地表示为:

|6  12| |a|   |9 |
|7  -8| |b| = |14|

(其中 2 个矩阵相乘)。然后,Matlab 可以为解矩阵 (a, b) 解决这个问题。

我没有安装 matlab,所以恐怕我将不得不把细节留给你:-)

于 2009-12-11T15:53:02.953 回答
1

如上所述,答案将取决于您的方程是线性的还是非线性的。对于线性系统,您可以设置一个简单的矩阵系统(但不要使用矩阵求逆,使用 LU 分解(如果您的系统条件良好))。

对于非线性系统,您需要使用更高级的求解器,很可能是牛顿方法的一些变体。基本上你会给 Matlab 你的六个方程,并要求它同时求解所有方程的根(零)。在处理非线性系统时,有几个注意事项和复杂情况会发挥作用,其中之一是需要进行初始猜测,为六个未知变量中的每一个分配一个接近真实解的值。如果没有一个好的初始猜测,求解器可能需要很长时间才能找到一个解,或者可能根本不会收敛到一个解,即使存在一个解。

于 2009-12-11T16:04:50.480 回答
1

几十年前,麻省理工学院开发了 MACSYMA,这是一种符号代数系统,专门用于此类事物。麻省理工学院将 MACSYMA 卖给了 Symbolics,它已经很好地折叠、干燥和吹走了。然而,由于军事资金的奇迹,MACSYMA 的早期版本被要求向政府发布。该版本随后在 GPL 下发布,并以 MAXIMA 的名义继续维护。

有关详细信息,请参阅http://maxima.sourceforge.net/

于 2009-12-11T16:13:53.283 回答