c++编程求解二元二次方程组_c++:求解二元二次方程组(解析解)

这个问题从产生到解决,困扰了LZ快一周(当然因为中间也有其他事情要做),本来从LZ的角度是想找第三方库使用,不要说matlab就可以啊o(╥﹏╥)o,确实matlab一个solve函数就解决问题了,但是问题是不能用matlab,所以第一方案排除。

用第三方库?google了半天,发现一个gsl库确实可以求解二元二次方程组,但是也有问题,1)只能求解出一个解,而且无法求解复数解(源代码定义中没有复数定义,除非自己扒源程序,自己写);2)使用的是优化算法,例如牛顿迭代等,所求出的是近似解,非解析解,也就是说求得的结果并不精确。而且初始值的设定会影响迭代结果,容易进入局部最优。3)复数解无法收敛。

PS:花钱的库还是算了,毕竟也不是特别难解决的问题。。。

只剩一个方案:自己动手,丰衣足食O(∩_∩)O哈哈~

列出基本的问题:

a1x2+b1xy+c1y2+d1x+e1y+f1=0

a_1x^2+b_1xy+c_1y^2+d_1x+e1y+f_1=0

a2x2+b2xy+c2y2+d2x+e2y+f2=0

a_2x^2+b_2xy+c_2y^2+d_2x+e2y+f_2=0

求上述方程的解(包含复数),也就是两个二次曲线的交点。

step 1: 利用两式相减,用x来表示y  得到类似如下的方程:

(Bx+D)y=−Ax2−Cx−E

(Bx+D)y = -Ax^2-Cx-E

其中的A,B,C,D,E都是用

a1−f1,a2−f2

a1-f1 , a2-f2 所表示的。

step 2:带入原方程得到关于

x

x的一元四次方程

M4x4+M3x3+M2x2+M1x+M0=0M_4x^4 + M_3x^3+M_2x^2 + M_1x +M_0 = 0

将四次项归一化

x4+bx3+cx2+dx+e=0

x^4+bx^3+cx^2+d^x+e=0 step 3: 利用费拉里法求一元四次方程 具体对费拉里法求解一元四次方程的推导:https://baike.baidu.com/item/%E4%B8%80%E5%85%83%E5%9B%9B%E6%AC%A1%E6%96%B9%E7%A8%8B 这里就不在解释了,因为公式很多,手打太浪费时间了。 讲了这么多,贴出源代码:(如果有小伙伴有更好的方法可以和LZ私聊哦) #include

#include

#include

#include

// #include

#include

#include

void quadratic2quartic(Eigen::Matrix & _par1,

Eigen::Matrix & _par2,

Eigen::Matrix & _y2x_par,

Eigen::Matrix<:complex>, 5, 1> &_quartic_par)

{

double A, B, C, D, E;

double a1, b1, c1, d1, e1, f1, a2, b2, c

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值