2D二分法 - 根发现

时间:2014-01-17 12:01:54

标签: matlab linear-algebra numerical-methods bisection

我正在尝试使用Bisection方法来求解两个高度非线性方程。 让我们说; f(x,y) = 0,学历为8,g(x,y) = 0,学位为6;

我需要一个用于2D二分法的matlab代码来解决f(x,y) = 0g(x,y) = 0并找到所有可能的根

1 个答案:

答案 0 :(得分:0)

你的想法不起作用。通过两个变量中的两个多项式,您可以使用Gröbner基,结果,Bezout定理和无穷大解来进入代数区域。

Bezout定理告诉你,最多有6 * 8 = 48个解,实数和复数。我不认为matlab有一个Gröbner包,使用Maple,Magma或Singular。

使用结果可以减少变量的数量。 f和g的x的结果是y中的单变量多项式,然后可以通过标准方法求解。它是包含y中多项式的Sylvester矩阵的决定因素,原则上应该能够在matlab中对此进行评估,但它不是很实用。


结果的概念本身(不是那么明显的弯路)适用于同伦方法。 Verschelde,Wampler等人对于全数值方法进行了广泛的研究。

如果我没记错的话,同伦的初始可解决问题是通过考虑

构建的
g0(x,y)=(y-a1*x-b1)*...*(y-a6*x-b6) 

随机系数a1,..,a6,b1,...,b6。然后,可以根据单变量多项式确定每个线性因子g0的初始解

0=f1(x)=f(x,a1*x+b1),..., 0=f6(x)=f(x,a6*x+b6)

使用Jenkins-Traub或Laguerre,给出根xjk和yjk = aj * xjk + bj。复平面的二等分或四等分不是很有用,但存在。看看Yakoubsohn和Didieu的作品。

现在引入同伦参数t从0到1的直线或曲线t = s + c * s *(1-s),s在[0,1],c随机小虚数,在复杂的平面并考虑系统

0=f(x(t),y(t)),
0=t*g(x(t),y(t))+(1-t)*g0(x(t),y(t)),

从x(0)= xjk和y(0)= yjk开始,所有j = 1,...,6,k = 1,...,8。

对于系数的一般值,所遵循的路径将不相交,因此从开始到结束是规则的,并且可以找到所有根。一个棘手的部分是决定当路径漂移时,如果是因为非常大的解决方案或无限远的非解决方案。


另一个同伦开始于为固定的任意y0计算f(x,y0)的根x1,...,x8,然后计算g的根y11,...,y61,y12,...,y68 (X1,Y),...,G(X 8,y)的。然后将同伦给出为

0=f( x(t), (1-t)*y0+t*y(t)), 
0=g( x(t), y(t)),

其中x(0)= xk且y(0)= yjk。