多项式正反算解算源码 自己写的 C++

一次,二次、三次多项式系数解算是工程项目里最常用到的方法,就是常用的数学公式,如果从头写还是比较费劲,涉及到高斯解方程等,这里将源码分享给大家,已经经过大量的测试,解算算法是完全正确的。直接复制即可使用,如果能帮到大家,希望能点赞。

//solve one order polynomial

void PolynCal1(double *x1, double *y1, double *x2, 
    double *y2, int n, double *cofx, double *cofy)
{
    for(int i=0; i<n; i++)
    {
        x1[i]=(cofx[0]+cofx[1]*x2[i]+cofx[2]*y2[i]);
        y1[i]=(cofy[0]+cofy[1]*x2[i]+cofy[2]*y2[i]);
    }
}


void PolynCoff3(double *x1, double *y1, double *x2, 
    double *y2, int n, double *cofx, double *cofy, 
    double *rmsx, double *rmsy)
{
    double a[10],aa[100],al[10];
    int    i;

    //x 
    memset(aa,0,sizeof(double)*100);
    memset(al,0,sizeof(double)*10);    
    for(i=0; i<n; i++)
    {
        a[0] = 1.0;
        a[1] = x2[i];        a[2] = y2[i]; 
        a[3] = x2[i]*x2[i];    a[4] = x2[i]*y2[i];    a[5] = y2[i]*y2[i];
        a[6] = x2[i]*x2[i]*x2[i]; a[7] = x2[i]*x2[i]*y2[i];
        a[8] = x2[i]*y2[i]*y2[i]; a[9] = y2[i]*y2[i]*y2[i];
        EquationNorm(a,10,x1[i],aa,al,1.0);
    }
    Agaus(aa, al, 10);
    memcpy(cofx, al, sizeof(double)*10);

    //y
    memset(aa,0,sizeof(double)*100);
    memset(al,0,sizeof(double)*10);    
    for(i=0; i<n; i++)
    {
        a[0] = 1.0;
        a[1] = x2[i];        a[2] = y2[i]; 
        a[3] = x2[i]*x2[i];    a[4] = x2[i]*y2[i];    a[5] = y2[i]*y2[i];
        a[6] = x2[i]*x2[i]*x2[i]; a[7] = x2[i]*x2[i]*y2[i];
        a[8] = x2[i]*y2[i]*y2[i]; a[9] = y2[i]*y2[i]*y2[i];
        EquationNorm(a,10,y1[i],aa,al,1.0);
    }
    Agaus(aa, al, 10);
    memcpy(cofy, al, sizeof(double)*10);

    if(rmsx)
    {
        for(i=0; i<n; i++)
        {
            rmsx[i]=(cofx[0]+ 
                cofx[1]*x2[i]+cofx[2]*y2[i]+

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值