之前查了几版多项式拟合的程序,多多少少有点问题。并且阶数上往往有明显的限制,三阶以上多项式拟合的算法较少。为了满足自己的需要,我自己写了一段可变阶数的多项式拟合算法。现在分享给大家使用。
#include <iostream>
#include <vector>
#include <math.h>
#include <assert.h>
#define ORDER_MAX 5
using namespace std;
//创建矩阵
static double Array_All[ORDER_MAX][ORDER_MAX + 1];
static double coefficient[ORDER_MAX];
bool Fill_Matrix(double* P_Data_x, double* P_Data_y, int Number_Data, int Order);
bool Elimination_method(int Order);
int main()
{
double* P_Data_x;
double* P_Data_y;
double x[100];
double y[100];
//产生一个函数,并填充数组,检验下面的方法可行与否
for (int i = 0; i < 100; i++)
{
x[i] = i;
y[i] = 1 + 10 * (double)pow(i, 1) + 1.254 * (double)pow(i, 2) + 0.5 * (double)pow(i, 3);
}
P_Data_x = x;
P_Data_y = y;
int order_used = 4;
Fill_Matrix(P_Data_x, P_Data_y, 100, order_used);//填充消元法矩阵
cout <<"*********