我正在尝试使用Bisection方法来求解两个高度非线性方程。
让我们说; f(x,y) = 0
,学历为8,g(x,y) = 0
,学位为6;
我需要一个用于2D二分法的matlab代码来解决f(x,y) = 0
和g(x,y) = 0
并找到所有可能的根。
答案 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。