我正在尝试使用二分法来求解两个高度非线性的方程。让我们说; f(x,y) = 0
八级和g(x,y) = 0
六级;
我需要二维二等分法的 matlab 代码来解决f(x,y) = 0
并g(x,y) = 0
找到所有可能的根。
我正在尝试使用二分法来求解两个高度非线性的方程。让我们说; f(x,y) = 0
八级和g(x,y) = 0
六级;
我需要二维二等分法的 matlab 代码来解决f(x,y) = 0
并g(x,y) = 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)),
对于所有 j=1,...,6, k=1,...,8,从 x(0)=xjk 和 y(0)=yjk 开始。
对于一般的系数值,所遵循的路径不会相交,因此从头到尾都是规则的,并且可以找到所有的根。一个棘手的部分是确定路径何时漂移,如果它是因为一个非常大的解决方案或无限处的非解决方案。
另一个同伦从计算 f(x,y0) 的根 x1,...,x8 为固定的任意 y0 开始,然后计算根 y11,...,y61,y12,...,y68 的 g(x1, y),...,g(x8,y)。然后将同伦给出为
0=f( x(t), (1-t)*y0+t*y(t)),
0=g( x(t), y(t)),
其中 x(0)=xk 和 y(0)=yjk。