适应(求解)复方程的算法(隐函数f(x,y))

时间:2017-03-28 21:57:56

标签: javascript math implicit complex-numbers

我试图调整一些方程式(隐式f(x,y)),以便能够列出相应X值的Y.
等式可以是例如如下:

y^2 = x^3 + 2x - 3xy
(X^2+y^2-1)^3-x^2y^3=0
X^3+y^3=3xy^2-x-1
X^3+y^2=6xy/sqrt(y/x)
cos(PI*Y) = cos(PI.X)

您可以在下面看到绘制的公式:
enter image description here
提示,我不知道,但也许这可能会有所帮助,以下情况适用:

Y^2 + X^2 =1  ==>  Y= sqrt(1-X^2)

方程式要适应(替换),因此它们用X(不是Y)表示  对于 y ^ 2 = x ^ 3 + 2x-3xy ,通过替换结果:

y1 =( - ( - 3x) - sqr(( - 3x)^ 2 - 4(-1)(x ^ 3 + 2x)))/ 2 *( - 1)
y2 =( - ( - 3x)+ sqr(( - 3x)^ 2 - 4(-1)(x ^ 3 + 2x)))/ 2 *( - 1)


通过改编的方程,我将能够改变X并获得相应的Y. 在这里看到Arkadiusz Raszeja-Solution对于等式y ^ 2 = x ^ 3 + 2x-3xy的解决方案
" Arkadiusz Raszeja"是二次方程,但我需要一个算法,所以例如以上所有方程都可以解决。

var x,y;
for(var n=0; n<=10; n++) {
    x=n;
    y = (-(-3*x)-Math.sqrt(((-3*x)*(-3*x)) - 4*(-1)*((x*x*x)+2*x)))/(2*(-1));
    alert(y);
}

以上提醒(y); 将显示Y,如下所示:

X= 1 ; Y=0.79
X=2 ; Y=1.58
X=3 ; Y=2.79
X=4 ; Y=4.39
X=5 ; Y=6.33
X=6 ; Y=8.57 
X=7 ; Y=11.12 
X=8 ; Y=13.92
X=9 ; Y=16.98
X=10 ; Y= 20.29


我的问题是我如何编程算法,它将适应(求解)上述例子中的方程?

(您也可以使用像math.js这样的JS库,但不能使用绘图或图形库。解决方案应该是javascript)
提前谢谢。

3 个答案:

答案 0 :(得分:1)

希望我能正确理解你的问题。 nerdamer会帮忙吗?它可以帮助解算高达三次多项式的代数。可以调用buildFunction方法来获取可用于绘图的JS函数。我在项目网站上以类似的方式结合function-plot.js

使用它

&#13;
&#13;
var solutions = nerdamer('y^2=x^3+2x-3x*y').solveFor('y');
//You'll get back two solutions since it's quadratic wrt to y
console.log(solutions.toString());
//You can then parse the solutions to native javascript function
var f = nerdamer(solutions[0]).buildFunction();
console.log(f.toString());

/* Evaluate */
var solutions = nerdamer('y^3*x^2=(x^2+y^2-1)').solveFor('y');
console.log(solutions.toString());
//You can then parse the solutions again to native javascript function
var f = nerdamer(solutions[0]);
var points = {};
for(var i=1; i<10; i++)
    points[i] = f.evaluate({x: i}).text();

console.log(points)
&#13;
<script src="http://nerdamer.com/js/nerdamer.core.js"></script>
<script src="http://nerdamer.com/js/Algebra.js"></script>
<script src="http://nerdamer.com/js/Calculus.js"></script>
<script src="http://nerdamer.com/js/Solve.js"></script>
&#13;
&#13;
&#13;

你总是可以评估。这比纯JS函数慢,但它可能是你需要的。您可能必须使用try catch块进行除零。

答案 1 :(得分:1)

我想指出这个问题一般无法解决。所引用的二次情形解(y ^ 2)可以扩展到cubic casequartic case(存在一般的复杂解)。但是有一个数学定理(来自Galois theory)表明对于五次方程没有通用解(等等)。在您的情况下,最大度数为3,因此您可以使用维基百科中的三次方程式。对于心脏图形写:x ^ 2 * y ^ 3 - y ^ 2 - (x ^ 2-1)= 0并将x视为常数。对于sqrt案例,摆脱它。将方程式的两边都平方,隔离y,最后得到一个关于y的四次方程,你可以用维基百科的四次方程知识来解决。

无论如何,如果你没有充分的理由去做,不要这样做,因为计算机可以为你解决这个问题。标准方法是隐式计算,如你所做的那样。

我希望这会有所帮助。

答案 2 :(得分:-1)

当您将Cardano的求解方法添加到一般三次方程式时,将法拉利的求解方法添加到了一般四次方程时,