?? 1.cpp
字號:
#include<iostream.h>
#include<math.h>
#include<string.h>
void gaosi(double a[2][2],double *b,int n)
{
int i,j,k=0;
double *p,*q,temp,*pb,*qb;
while(k<n-1)
{
q=p=a[k];
qb=pb=&b[k];
for(i=k+1;i<n;i++)
if(fabs(a[i][k])>fabs(*(p+k)))
{
p=a[i];
pb=&b[i];
}//找主元
if(p!=a[k])
{
for(i=k;i<n;i++)
{
temp=*(q+i);
*(q+i)=*(p+i);
*(p+i)=temp;
}
temp=*qb;
*qb=*pb;
*pb=temp;
}//換行
for(i=k+1;i<n;i++)
{
a[i][k]=a[i][k]/a[k][k];
for(j=k+1;j<n;j++)
a[i][j]=a[i][j]-a[i][k]*a[k][j];
b[i]=b[i]-a[i][k]*b[k];
}//消元
k++;
}
b[n-1]=b[n-1]/a[n-1][n-1];
for(i=n-2;i>=0;i--)
{
temp=0;
for(j=i+1;j<n;j++)
temp+=a[i][j]*b[j];
b[i]=(b[i]-temp)/a[i][i];
}//回代求解
}
void main()
{
int m,i,j;
double *x,*w,*y,a[2][2],b[2];
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));//置零
cout<<"輸入離散點的個數";
cin>>m;
x=new double[m];
y=new double[m];
w=new double[m];
cout<<"按提示輸入每點x y 及權值w"<<endl;
for(i=0;i<m;i++)
{
cout<<"輸入點"<<i<<" ";
cin>>x[i]>>y[i]>>w[i];
}
for(i=0;i<m;i++)
{
a[0][0]+=w[i];
a[0][1]+=w[i]*x[i];
a[1][1]+=w[i]*x[i]*x[i];
b[0]+=w[i]*y[i];
b[1]+=w[i]*y[i]*x[i];
}
a[1][0]=a[0][1];
for(i=0;i<2;i++){
for(j=0;j<2;j++)
cout<<a[i][j]<<" ";
cout<<b[i]<<endl;
}//構造方程并輸出
gaosi(a,b,2);
cout<<"擬合曲線S(x)="<<b[0]<<'+'<<b[1]<<'x'<<endl;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -