#ifndef FUNCTION_H_
#define FUNCTION_H_
#include <iostream>
#include <cmath>
#include "polyfit.h"
#include <fstream>
using namespace std;
dxs::dxs()
{
ifstream fin("多项式拟合.txt");
fin>>n;
x=new float[n];
y=new float[n];
for(int i=0;i<n;i++)
{
fin>>x[i];
}
for(i=0;i<n;i++)
{
fin>>y[i];
}
cout<<"输入拟合多项式的次数:";
int nn;
cin>>nn;
m=nn+1;
u=new float*[m];
for(i=0;i<m;i++)
{
u[i]=new float[m+1];
}//创建m行,m+1列数组
}
void dxs::dfine()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<m+1;j++)
{
u[i][j]=0;
}
}
for(i=0;i<m;i++)
{
for(int j=0;j<m;j++)
{
for(int k=0;k<n;k++)
{
u[i][j]=u[i][j]+pow(x[k],j+i);
}
}
}
for(i=0;i<m;i++)
{
for(int k=0;k<n;k++)
{
u[i][m]=u[i][m]+pow(x[k],i)*y[k];
}
}
}
void dxs::show()
{
for(int i=0;i<m;i++)
{
for(int j=0;j<m+1;j++)
{
cout<<u[i][j]<<" ";//<<endl;
}
cout<<endl;
}
////显示具有m行m+1列u数组的各元素值
}
void dxs::select_main(int k,float **p,int m)
{
double d;
d=*(*(p+k)+k);
//cout<<d;
int l=k;
int i=k+1;
for(;i<m;i++)
{
if(fabs(*(*(p+i)+k)) > fabs(d))
{
d=*(*(p+i)+k);
l=i;
}
else continue;
}
if(d==0)
cout<<"错误";
else
{
if(k!=l)
{
for(int j=k;j<m+1;j++)
{
double t;
t=*(*(p+l)+j);
*(*(p+l)+j)=*(*(p+k)+j);
*(*(p+k)+j)=t;
}
}
}
}
void dxs::gaosi()
{
for(int k=0;k<m;k++)
{
select_main(k,u,m);//调用列主元函数
for(int i=1+k;i<m;i++)
{
// *(*(p+i)+k)=(float) *(*(p+i)+k) / *(*(p+k)+k);
u[i][k]=(float) u[i][k] / u[k][k];
}
for(i=k+1;i<m;i++)
{
for(int j=k+1;j<m+1;j++)
{
u[i][j]=u[i][j] - u[i][k] * u[k][j];
}
u[i][k]=0;
}
}
}
void dxs::answer()
{
u[m-1][m]=u[m-1][m] / u[m-1][m-1];
for(int i=m-2;i>=0;i--)
{
float a=0;
for(int j=i+1;j<m;j++)
{
//a=a + (*(*(p+i)+j) * *(*(p+j)+m));
a=a+u[i][j] * u[j][m];
}
//*(*(p+i)+n-1)= (*(*(p+i)+n-1) - a) / *(*(p+i)+i);
u[i][m]= (u[i][m] -a) / u[i][i];
}
cout<<"方程组的解为:"<<endl;
for(i=0;i<m;i++)
{
cout<<"a"<<i+1<<"=";
cout<<u[i][m]<<endl;
// l[i]=*(*(p+i)+n-1);
}
cout<<"y="<<u[0][m];
for(i=1;i<m;i++)
{
cout<<showpos<<u[i][m]<<"x";
if(i!=1)cout<<"^"<<noshowpos<<i;
}
cout<<endl;
}
dxs::~dxs()
{
delete[]x,y;
delete []*u;
}
#endif
- 1
- 2
前往页