最小二乘法

#include <iostream>
using namespace std;
void main()
{
float **a,x,result;
int n;
float k,b;
void smallest(float **a,int n,float *k,float *b);
cout<<"输入点数:";
cin>>n;
a=new float *[n];
for(int i=0;i<n;i++)
  a=new float[2];
cout<<"输入各个点:"<<endl;
for(i=0;i<n;i++)
  for(int j=0;j<2;j++)
   cin>>a[j];
smallest(a,n,&k,&b);
cout<<"输入自变量的值:";
cin>>x;
result=k*x+b;
cout<<"拟合曲线方程:Y="<<k<<"X"<<"+"<<b<<endl;
cout<<"运算结果是:"<<result<<endl;
}
void smallest(float **a,int n,float *k,float *b)
{
float can[2][3]={n,0,0,0,0,0};
for(int i=0;i<n;i++)
{
  can[0][1]+=a[0];
  can[0][2]+=a[1];
  can[1][1]+=a[0]*a[0];
  can[1][2]+=a[0]*a[1];
}
can[1][0]=can[0][1];
for(i=2;i>=0;i--)
  can[1]=can[1]-can[0]*can[1][0]/can[0][0];
*b=can[1][2]/can[1][1];
*k=(can[0][2]-can[0][1]**b)/can[0][0];
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值