Автор: Пользователь скрыл имя, 27 Февраля 2013 в 22:32, курсовая работа
В данной курсовой работе выполняется разработка алгоритма и программы на языке программирования С, для решения задачи методом наименьших квадратов.
К данной программе также разработанна математическая модель решения, приведена блок-схема порядка решения программой поставленной задачи, текст программы и инструкцию пользователя, в которой описано для чего назначенная программа и как ею пользоваться, начиная с запуска.
Вступ………………………………………………………………………...……………6
1 Математичні аспекти методу найменших квадратів ……...………….……..…......7
1.1 Область застосування задачі…………………………………………………7
1.2 Математичне обґрунтування задачі….………………………………………9
2 Розробка алгоритму роботи обчислювальної задачі…………………….…...…....14
2.1 Розробка функціональної структури програми…………………………....14
2.2 Розробка алгоритму виконання задачі найменших квадратів …………...14
3 Розробка програми за запропонованим алгоритмом……………………....……...18
3.1 Розробка програми за методом найменших квадратів …...…...……….…18
3.2 Результати роботи програми………………………………………………..20
3.3 Розробка програми в Math Cad……………………………………………..21
4 Інструкція користувача………………………………..………………...……….….22
Висновки……………………………………………………………..……….………....24
Перелік посилань ………………........................................................……………..…..25
Додаток А. Блок-схема апроксимації за методом найменших квадратів
Додаток Б. Текст програми апроксимації за методом найменших квадратів
}
temp = b[j];
b[j] = b[i];
b[i] = temp;
break;
}
}
}
}
}
void cls(){
for(int i=0; i<25; i++) printf("\n");
}
void main(){
int i=0,j=0, k=0;
cls();
do{
printf("\nInput filename: ");
scanf("%s", filename);
InFile = fopen(filename, "rt");
}while(InFile==NULL);
count_num_lines();
printf("\nNumber of points: N=%d", N);
do{
printf("\nInput power of approximation polinom K<N: ");
scanf("%d", &K);
}while(K>=N);
allocmatrix();
rewind(InFile);
//read data from file
readmatrix();
//check if there are 0 on main diagonal and exchange rows in that case
diagonal();
fclose(InFile);
//printmatrix();
//process rows
for(k=0; k<K+1; k++){
for(i=k+1; i<K+1; i++){
if(sums[k][k]==0){
printf("\nSolution is not exist.\n");
return;
}
float M = sums[i][k] / sums[k][k];
for(j=k; j<K+1; j++){
sums[i][j] -= M * sums[k][j];
}
b[i] -= M*b[k];
}
}
//printmatrix();
for(i=(K+1)-1; i>=0; i--){
float s = 0;
for(j = i; j<K+1; j++){
s = s + sums[i][j]*a[j];
}
a[i] = (b[i] - s) / sums[i][i];
}
printresult();
freematrix();
}
Информация о работе Апроксимаціія функцій методом найменших квадратів