Imię Nazwisko Dudek Marcin |
Aproksymacja |
Data 23.01.2012 |
Grupa II |
|
Ocena |
Opis Problemu
Zadanie polega na napisaniu programu, który policzy parametry liniowej funkcji aproksymującej. Aproksymacja metodą najmniejszych kwadratów.
Przykład rozwiązany analitycznie
Wyznaczamy parametry liniowej funkcji aproksymującej postaci (x) C0 + C1x dla
następujących danych:
X |
Y |
1 |
1 |
3 |
8 |
5 |
16 |
Obliczamy sumy:
Podstawiamy do równań:
Równanie ma postać:
(x) C0 + C1x
(x) - 2,916 + 3,75x
y = 3,75x - 2,916
Listing kodu
#include<iostream>
using namespace std;
int main()
{
bool zabezpieczenie=0;
double n, sumx = 0, sumx2 = 0, sumy = 0,sumyx = 0, c1, c0, pamiec;
cout<<"Podaj ilosc punktow"<<endl;
cin>>n;
for(int i=1; i<=n; i++)
{
int x, y;
pamiec = x;
cout<<"Podaj argument nr "<<i<<endl;
cin>>x;
if (x==pamiec)
{
cout<<"Blad! Nie ma takiej funkcji!";
zabezpieczenie=1;
break;
}
cout<<"Podaj wartosc dla tego argumentu"<<endl;
cin>>y;
sumx = sumx + x;
sumx2 = sumx2 + x * x;
sumy = sumy + y;
sumyx = sumyx + y * x;
}
if (zabezpieczenie==0)
{
c1 = (n*sumyx - sumy*sumx)/(n*sumx2 - sumx*sumx);
c0 = (sumy - c1*sumx)/n;
cout<<"funkcje opisuje wzor: y = "<<c1<<"x + "<<c0<<endl;
}
else cout<<endl;
}