⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 chazhi.txt

📁 这是在应用程序中截取的一段用高斯列主次法写的插值曲线
💻 TXT
字号:
这是在应用程序中截取的一段用高斯列主次法写的插值曲线没,代码不是很难,插值曲线的阶次需要Rank是自己可以调整的signalmeter[]和msp430[]是两个要插值的数组。

void chazhiset::OnCompute() 
{
	// TODO: Add your control notification handler code here
	CWnd    * pWnd = GetDlgItem(IDC_CZPic);
	pWnd->ShowWindow(SW_HIDE);
	CWnd * pEdit = GetDlgItem(IDC_Display);
	pEdit->ShowWindow(SW_SHOW);
	    for(int i=0;i<CollectNum;i++)
        {
                Rate[i]=signalmeter[i]/msp430[i];
        }
        //empty the array first
        //begin
		for (int k=0;k<50;k++)
        {
                S[k]=0; T[k]=0; v[k]=0; r[k]=0; p[k]=0; B[k]=0;
        }
        //end
        //设置阶次Rank=m
        UpdateData(TRUE);
		int m=m_Rank;
        for (k=0;k<=2*m;k++)
        for(i=0;i<CollectNum;i++)
                S[k]+=pow(msp430[i],k);
        //
        for (k=0;k<=m;k++)
        for (i=0;i<CollectNum;i++)
                T[k]+=signalmeter[i]*pow(msp430[i],k);
        //
        double a[50][50]={0};
        //create the matrix
        for (i=0;i<=m;i++)
        for (int j=0;j<=m;j++)
        {
                a[i][j]=S[i+j];
                a[i][m+1]=T[i];
        }
        //Gauss method begin
		
        int q=0;
        for (i=0;i<=m;i++)
        {
                int l=i;
                q=0;
                double e=a[i][0];
                for (int j=i;j<=m;j++)
                for (k=0;k<=m;k++)
                {
                        if(fabs(a[j][k])<=fabs(e))
                                break;
                        e=a[j][k];q=k;l=j;
                }

                if(fabs(e)<1E-10)
                {
//						m_nRank=m-1;
//						UpdateData(FALSE);
                        MessageBox("严重错误(高斯算法出现极小值作分母)\n\n因为:\n\n阶数过高或文件没有打开 ...","Stop",MB_OK|MB_ICONINFORMATION);
                }
                
                if (l!=i)
                {
                        for (int k=0;k<=m+1;k++)
                        {
                                double d; d=a[i][k]; a[i][k]=a[l][k]; a[l][k]=d;
                        }
                }
                for (j=0;j<=m;j++)
                {
                        if (j!=i && a[j][q]!=0)
                        {
                                double u=a[j][q]/a[i][q];
                                for(int k=0;k<=m+1;k++)
                                        a[j][k]-=u*a[i][k];
                        }
                }
                v[i]=q;

        }
        for (i=0;i<=m;i++)
        {
                q=v[i];
				r[q]=a[i][m+1]/a[i][q]; 
        }
        //Gauss method end
        //

        for (i=0;i<CollectNum;i++)
        {
                p[i]=0;
                for (int j=0;j<=m;j++)   p[i]+=r[j]*pow(msp430[i],j);
                B[i]=((p[i]-signalmeter[i])/signalmeter[i]);
                NewRate[i]=p[i]/msp430[i];
        }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -