Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.75
5209
Сообщений: n/a
#1

Метод наименьших квадратов, решение системы Гауссом - C++

04.12.2010, 18:21. Просмотров 2677. Ответов 2
Метки нет (Все метки)

подскажите, пожалуйста, где ошибка. матрицу Грамма вычисляю правильно, а вот когда после вычисления прямого хода гаусса, пытаюсь вывести треугольную матрицу, чем выше порядок полинома u, тем больше ненулевых коэффициентов в нижних строках

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
#include <stdio.h>                                      
#include <conio.h>                                     
#include <math.h>
void main (void)
{
   int n,k,i,j,u;
   float a[54][54],x[54],y[54],w,koef[54],t,m[54][54],a0,a1,a2,b[54],h,R,sum,sig[54],pogr[54],ob[54]; 
   FILE *z,*s,*q,*det,*das,*frei;
   frei=fopen("fr.txt","w");
   det=fopen("del.txt","w");
   das=fopen("pr.txt","w");
   z=fopen("x.txt","w");
   s=fopen("y.txt","w");
   q=fopen("rez.txt","w");
printf("kolichestvo uzlov 50\n");
printf("koeffizienti: a0=1, a1=1, a2=0.1\n ");
a0=1;x[0]=1;n=50;a1=1;a2=0.01;h=0.1;w=0.01;
printf("nachalnoe znachenie argumenta funkzii x0=1\n ");
printf("schag setki h=1\n ");
for ( k=0; k < n; k++)
{
y[k]=a0+a1*pow(cos(x[k]),4)+a2*pow((x[k]),3);
fprintf(z,"%.4f\n",x[k]);
fprintf(s,"%.4f\n",y[k]);
x[k+1]=x[k]+h;
}
for(i=0; i<n; i++)
{
    for(j=0; j<n+1; j++)
    {
        a[i][j]=0;
    }
        koef[i]=0;
}
for(u=1; u<21; u++)
{   
fprintf(q,"Porjadok polinoma=%.d\n",u);
sum=0; 
for(k=0; k<=u; k++)
{
    for(i=0; i<=u; i++)
    {
        for(j=0; j<n; j++)
        {
            R=pow((x[j]),i+k);
            sum+=R;
        }
        a[k][i]=sum;
        a[0][0]=n;
        sum=0;
    }
}
 
sum=0;        
for(k=0; k<=u; k++)
{
    for(i=0; i<n; i++)
    {
        R=(y[i])*(pow((x[i]),k));
        sum+=R;
    }
    a[k][u+1]=sum;
    fprintf(z,"%.2e\n",a[k][u+1]);
    sum=0;
}
for(k=0; k<=u; k++)
{
    for(i=0; i<=u+1; i++)
    {
                fprintf(q,"%.2e  ",a[k][i]);
    }
    fprintf(q,"\n");
}
for(k=0;k<=u;k++)
{
    b[k]=a[k][u+1];
}
 for (k=0; k<u; k++)
    {
        for (i=k+1; i<u+1; i++)
        {
            m[i][k]=a[i][k]/a[k][k];
            for (j=k; j<u+1; j++)
            {
            a[i][j]=a[i][j]-a[k][j]*m[i][k];
            }
            b[i]=b[i]-b[k]*m[i][k];
        }
    }
for(i=0; i<u+1; i++)
{
    for(j=0; j<=u+1; j++)
    {
        fprintf(det,"%.3f ",a[i][j]);
    }
    fprintf(det,"%.3f\n",b[i]);
}
 
    for (k=u; k>=0; k--)
    {
        t=0;
        for (j=k+1; j<u+1; j++)
        {
            t=t+a[k][j]*koef[j];
        }
        koef[k]=(b[k]-t)/a[k][k];
        printf("a[%d]=%.3e \n",k, koef[k]); 
     }
     pogr[u]=0;
              for (j=0;j<n;j++)
         {
             sig[j]=0;
         for(i=0;i<=u;i++)
          {
              sig[j]+=koef[i]*pow(x[j],i);
          }
          pogr[u]+=pow(((y[j]-sig[j])*100/y[j]),2);
          fprintf(frei,"%.2f\n",((y[j]-sig[j])*100/y[j]));
         }
           ob[u]=pow((pogr[u]/n),0.5);   
           fprintf(det,"pogresch[%d]=%.2e\n",u,ob[u]);
           
}
 
fclose(frei);
fclose(das);
   fclose(det);
   fclose(z);
   fclose(s);
   fclose(q);
   getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2010, 18:21     Метод наименьших квадратов, решение системы Гауссом
Посмотрите здесь:

Решение системы в C++ C++
Метод наименьших квадратов C++
C++ Портировать программу с графиком из Pascal в С++ (метод наименьших квадратов)
C++ Решение системы
C++ Линейный Метод Наименьших Квадратов, ошибка в расчетах
МНК (Метод наименьших квадратов) C++
C++ Метод наименьших квадратов! (с Pascal на C++)
C++ Решение системы
Метод наименьших квадратов C++
Метод наименьших квадратов C++
C++ Привести матрицу к треугольному виду Гауссом (не могу найти работающий код)
Линейная аппроксимация: метод наименьших квадратов (МНК) C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Homa
3 / 3 / 1
Регистрация: 21.04.2009
Сообщений: 35
05.12.2010, 23:47     Метод наименьших квадратов, решение системы Гауссом #2
функция main должна быть int
int main (void){}
Vladimir.
155 / 155 / 10
Регистрация: 24.11.2009
Сообщений: 375
06.12.2010, 02:54     Метод наименьших квадратов, решение системы Гауссом #3
в подходе. Сам по себе метод Грамма численно неустойчив, нужен модифицированый алгоритм.
Yandex
Объявления
06.12.2010, 02:54     Метод наименьших квадратов, решение системы Гауссом
Ответ Создать тему
Опции темы

Текущее время: 04:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru