我试图用二分法来解两个高度非线性的方程。让我们说,f(x,y) = 0是8级,g(x,y) = 0是6级;
我需要一个二维二分法的matlab代码来求解f(x,y) = 0和g(x,y) = 0,并找到所有可能的根。
发布于 2014-01-17 16:04:47
你的想法行不通。用两个变量中的两个多项式,进入代数的区域,有Gr bner基,结果,Bezout定理和无穷远的解。
贝祖特定理告诉你,最多有6*8=48解,真实的和复杂的。我不认为matlab有一个Gr bner软件包,使用枫树,Magma或单数。
使用结果,可以减少变量的数量。F和g的x的结果是y中的一元多项式,可以用标准方法求解。它是y中含有多项式的西尔维斯特矩阵的行列式,在原则上可以用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或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。
对于系数的一般值,所遵循的路径将不相交,因此从头到尾都是规则的,并且可以找到所有的根。一个棘手的部分是决定当一条路径漂移,如果它是因为一个非常大的解或非解在无穷远。
另一个同伦首先计算固定任意x1的根y0,.,f(x,y0)的x8,然后计算g(x1,y),…,g(x8,y)的根y11,.,y61,y12,.,y68。然后给出同伦
0=f( x(t), (1-t)*y0+t*y(t)),
0=g( x(t), y(t)),其中x(0)=xk和y(0)=yjk。
https://stackoverflow.com/questions/21185518
复制相似问题