![](https://iknow-base.cdn.bcebos.com/lxb/notice.png)
求一个用最小二乘法求拟合曲线表达式的C++程序,不需要图像,只要斜率和截距就行~
1个回答
展开全部
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
class coordinate
{
public:
double x;
double y;
};
coordinate function(int n, coordinate *cor)
{
coordinate result;
int i;
double sumy=0, sumx=0, sumx2=0, sumxy=0;
for(i=0; i<n; i++)
{
sumy += cor[i].y;
}
for(i=0; i<n; i++)
{
sumx += cor[i].x;
}
for(i=0; i<n; i++)
{
sumxy += cor[i].y * cor[i].x;
}
for(i=0; i<n; i++)
{
sumx2 += cor[i].x * cor[i].x;
}
result.x = (n*sumxy - sumx*sumy) / (n*sumx2 - sumx*sumx);
result.y = (sumxy*sumx - sumy*sumx2) / (sumx*sumx - n*sumx2);
return result;
}
int main ()
{
cout<<"Please input the 9 y coordinate"<<endl;
coordinate * cor = new coordinate [9];
coordinate result;
for(int i=0; i<9; i++)
{
cin >> cor[i].y;
}
for(i=0; i<9; i++)
{
cor[i].x = (double)i;
}
result = function(9, cor);
cout<< "最小二乘斜率为:"<<result.x<<endl;
cout<< "最小二乘截距为:"<<result.y<<endl;
return 0;
}
楼主你验下对不 ,我之前调了下可以运行,结果没有验证哈
#include <math.h>
#include <conio.h>
#include <iostream>
using namespace std;
class coordinate
{
public:
double x;
double y;
};
coordinate function(int n, coordinate *cor)
{
coordinate result;
int i;
double sumy=0, sumx=0, sumx2=0, sumxy=0;
for(i=0; i<n; i++)
{
sumy += cor[i].y;
}
for(i=0; i<n; i++)
{
sumx += cor[i].x;
}
for(i=0; i<n; i++)
{
sumxy += cor[i].y * cor[i].x;
}
for(i=0; i<n; i++)
{
sumx2 += cor[i].x * cor[i].x;
}
result.x = (n*sumxy - sumx*sumy) / (n*sumx2 - sumx*sumx);
result.y = (sumxy*sumx - sumy*sumx2) / (sumx*sumx - n*sumx2);
return result;
}
int main ()
{
cout<<"Please input the 9 y coordinate"<<endl;
coordinate * cor = new coordinate [9];
coordinate result;
for(int i=0; i<9; i++)
{
cin >> cor[i].y;
}
for(i=0; i<9; i++)
{
cor[i].x = (double)i;
}
result = function(9, cor);
cout<< "最小二乘斜率为:"<<result.x<<endl;
cout<< "最小二乘截距为:"<<result.y<<endl;
return 0;
}
楼主你验下对不 ,我之前调了下可以运行,结果没有验证哈
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询