以编程方式求解代数方程

时间:2009-12-11 15:39:14

标签: matlab algebra

我有六个参数方程,使用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

(平移r s,好消息@gnovice!)

我需要找到t_x t_y m_x m_y s_xs_y

我为什么要计算这些?对于三个坐标(0,0 {1,2,3})中的每一个,有两个点p1(在t_x,t_y)和p2在(l_x,l_y),我知道距离({{ 1}}& r1)从p1和p2到那一点,但在不同的坐标系中。变量r2s_x定义了我需要将一组坐标缩放到另一组坐标,s_ym_x我需要多少需要翻译(m_yt_x是解决两个系统中轮换差异的一种方式)

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

看起来确实具体,我可能不得不把我的垫子拿出来并通过数学方法进行处理!

5 个答案:

答案 0 :(得分:1)

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

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

正如我多年前回忆的那样,我相信你会创建一个非线性方程的线性近似系统,并且反复地一遍又一遍地解决该线性系统,每次将答案反馈到输入中,直到某个错误指标变得足够小以表明您已达到解决方案。它显然是用计算机完成的,我确信有数据分析软件包会为你做这件事,尽管我想象任何非线性方程组都可以包含几乎无限大的不同类型和复杂程度,这些软件包无法为您创建线性近似值(除非在最直接的标准情况下),您将不会手动执行该部分操作。

答案 1 :(得分: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个参数(af):

>> 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)

答案 2 :(得分:1)

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

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

这可以等效地表示为:

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

(2个矩阵乘以一起)。然后Matlab可以为解决方案矩阵(a,b)解决这个问题。

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

答案 3 :(得分:1)

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

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

答案 4 :(得分:1)

几十年前,麻省理工学院开发了MACSYMA,这是一种象征性的代数系统。麻省理工学院将MACSYMA卖给了Symbolics,它已经很好地折叠,干涸和被吹走了。然而,由于军事资金的奇迹,需要向政府发布早期版本的MACSYMA。该版本随后根据GPL发布,并继续以MAXIMA的名义进行维护。

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