我必须解决多项式方程系统,因为它有无限的解决方案而给出错误,我只需要很少的解决方案(任何2或3)所以我怎样才能得到它们? ,我可以在解决方案上指定条件,例如值范围在1到10之间的解决方案,这样我就可以得到很少的价值。 方程实际上很复杂,但无限解是由于根处的“sin(0)”。
答案 0 :(得分:3)
您可以尝试向系统添加其他公式,例如x1 = 0
,x2 = 0
等,以限制可能的解决方案的数量。
答案 1 :(得分:1)
Mathematica的FindRoot
函数将为您提供最接近给定值的解决方案,因此您可以使用FindRoot
几次使用各种输入。
任何其他数学程序应该有类似的东西,恰好我现在最熟悉Mathematica。
答案 2 :(得分:1)
这里解释的解决方案的定义是:对于某些输入,给定函数的值为零,或者多个方程的给定系统在多个点上重叠?后者可以被描述为在一条线上相交的2个平面,但这并不一定是人们在想象解决多项式方程系统时可能会想到的。
例如:x ^ 2 = 4只有2个解,但x ^ 2 = y ^ 2可能有无限多个解,因为x = y和x = -y都是定义相等所在位置的行,在我看来,两者都可以被认为是多项式方程式。
我认为您已经阅读了SOLUTION OF EQUATIONS USING MATLAB,MATLAB Programming/Symbolic Toolbox和Solving non linear equations等内容,对吧?对于如何使用Matlab来做这些可能有一些想法。
答案 3 :(得分:1)
在Mathematica中,您可以使用FindInstance查找方程的一个或多个解。以下是如何获得特定方程组的2个解:
In[2]:= FindInstance[
x^2 + y^2 + z^2 == -1 && z^2 == 2 x - 5 y, {x, y, z}, 2]
Out[2]= {{x -> -(46/5) - (6 I)/5,
y -> 1/10 (25 - Sqrt[-5955 - 1968 I]),
z -> -Sqrt[1/10 ((-309 - 24 I) + 5 Sqrt[-5955 - 1968 I])]}, {x ->
11/5 - (43 I)/5, y -> 1/10 (25 - Sqrt[6997 + 5504 I]),
z -> Sqrt[(1/5 - I/10) ((2 - 85 I) + (2 + I) Sqrt[6997 + 5504 I])]}}
你也可以给出不等式,如1< var< 10如FindInstance或Reduce进一步限制可能的解决方案,如您所建议的那样。
答案 4 :(得分:0)
如果以数字方式求解形式为f(x)= 0的系统,则可以使用FMINCON来添加约束。例如,您可以指定解决方案应介于1和10之间。
答案 5 :(得分:0)
以与Jonas类似的方式,如果在Matlab中以数字方式求解f(x)= 0,则可以使用fsolve。如果多项式具有许多潜在输出,您可能能够从不同的初始点迭代这些输出。
请注意解决方案空间中的局部最小值,它们可能是迭代解决方案的一个严重问题,因为它们会将您的算法引导到实际上不正确的答案。
答案 6 :(得分:0)
如果系统很大或有许多解决方案(隔离或高维组件),您可以使用HOM4PS2等软件包。如果系统(非常)小,你可以通过找到所谓的Grobner基础来象征性地解决它,它为你提供了一组等价(但不同)的多项式,其解决方案几乎是显而易见的。 Maple和Mathematica 7都可以做到这一点。
答案 7 :(得分:0)
Mathematica提供了许多功能来帮助您。例如:
Plot3D[{0, x^2 - y^2}, {x, -1, 1}, {y, -1, 1},
PlotStyle -> {Red, Green}]
a = ToRules@Reduce[x^2 - y^2 == 0, {x, y}];
Plot[Evaluate@({x, y} /. {a}), {x, -1, 1}]