• 大小: 592KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-28
  • 语言: C/C++
  • 标签: 曲线拟合  

资源简介

最小二乘法曲线拟合C语言可执行代码

资源截图

代码片段和文件信息

#include “stdio.h“
#include “stdlib.h“
#include “math.h“
#include “vector“
using namespace std;

struct point
{
double x;
double y;
};

typedef vector doubleVector;

vector getFileInf(char *File);  //获取文件数据
doubleVector getCoeff(vector sample int n);   //矩阵方程

void main()
{
int i n;
char *File = “样本.txt“;
vector sample;
doubleVector Coef;

sample = getFileInf(File);

printf(“拟合阶数n:“);
scanf(“%d“ &n);

Coef = getCoeff(sample n);

printf(“\n拟合矩阵的系数为:\n“);
for(i=0; i printf(“a%d = %lf\n“ i Coef[i]);

}


//矩阵方程
doubleVector getCoeff(vector sample int n)
{
vector matFunX;  //矩阵方程
vector matFunY;  //矩阵方程
doubleVector temp;
double sum;
int i j k;

//正规方程X
for(i=0; i<=n; i++)
{
temp.clear();
for(j=0; j<=n; j++)
{
sum = 0;
for(k=0; k sum += pow(sample[k].x j+i);
temp.push_back(sum);
}

matFunX.push_back(temp);
}


//正规方程Y
for(i=0; i<=n; i++)
{
temp.clear();
sum = 0;
for(k=0; k sum += sample[k].y*pow(sample[k].x i);
temp.push_back(sum);

matFunY.push_back(temp);
}


//矩阵行列式变换
double num1 num2 ratio;

for(i=0; i {
num1 = matFunX[i][i];
for(j=i+1; j {
num2 = matFunX[j][i];
ratio = num2/num1;

for(k=0; k matFunX[j][k] = matFunX[j][k]-matFunX[i][k]*ratio;

matFunY[j][0] = matFunY[j][0]-matFunY[i][0]*ratio;
}

}


//计算拟合曲线的系数
doubleVector coeff(matFunX.size() 0);
for(i=matFunX.size()-1; i>=0; i--)
{
if(i==matFunX.size()-1)
coeff[i] = matFunY[i][0]/matFunX[i][i];

else
{
for(j=i+1; j matFunY[i][0] = matFunY[i][0]-coeff[j]*matFunX[i][j];
coeff[i] = matFunY[i][0]/matFunX[i][i];
}
}


return coeff;
}


//获取文件数据
vector getFileInf(char *File)
{
int i=1;
vector dst;

FILE *fp = fopen(File “r“);

if(fp==NULL)
{
printf(“Open file error!!!\n“);
exit(0);
}

point temp;
double num;

while(fscanf(fp “%lf“ &num)!=EOF)
{
if(i%2==0)
{
temp.y = num;
dst.push_back(temp);
}
else
temp.x = num;
i++;
}

fclose(fp);

return dst;
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2015-07-31 09:16  最小二乘法曲线拟合\
     目录           0  2015-07-30 22:11  最小二乘法曲线拟合\Debug\
     文件       66560  2015-07-31 09:14  最小二乘法曲线拟合\Debug\vc60.idb
     文件       86016  2015-07-30 22:11  最小二乘法曲线拟合\Debug\vc60.pdb
     文件       79314  2015-07-30 22:11  最小二乘法曲线拟合\Debug\曲线拟合.obj
     文件      254032  2015-07-30 22:11  最小二乘法曲线拟合\Debug\最小二乘法曲线拟合.exe
     文件      607004  2015-07-30 22:11  最小二乘法曲线拟合\Debug\最小二乘法曲线拟合.ilk
     文件     1164960  2015-07-30 20:39  最小二乘法曲线拟合\Debug\最小二乘法曲线拟合.pch
     文件      730112  2015-07-30 22:11  最小二乘法曲线拟合\Debug\最小二乘法曲线拟合.pdb
     文件        2441  2015-07-30 22:11  最小二乘法曲线拟合\曲线拟合.cpp
     文件        4420  2015-07-30 20:39  最小二乘法曲线拟合\最小二乘法曲线拟合.dsp
     文件         544  2015-07-30 20:39  最小二乘法曲线拟合\最小二乘法曲线拟合.dsw
     文件       41984  2015-07-31 09:16  最小二乘法曲线拟合\最小二乘法曲线拟合.ncb
     文件       48640  2015-07-31 09:16  最小二乘法曲线拟合\最小二乘法曲线拟合.opt
     文件         270  2015-07-31 09:14  最小二乘法曲线拟合\最小二乘法曲线拟合.plg
     文件          61  2015-07-30 20:41  最小二乘法曲线拟合\样本.txt
     文件          47  2015-07-30 20:57  最小二乘法曲线拟合\样本1.txt

评论

共有 条评论