С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

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

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

04.12.2010, 18:21. Просмотров 2911. Ответов 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2010, 18:21
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод наименьших квадратов, решение системы Гауссом (C++):

Метод наименьших квадратов - C++
В коде реализован метод наименьших квадратов. Помогите переделать в метод полиномов Чебышева. #include &lt;tchar.h&gt; #include &lt;iostream&gt;...

Метод наименьших квадратов - C++
Ребят,вот в чем беда. нужно для курсового решить задачу. нужно апроксимировать данные линейной зависимостью y=ax+b. В ручную все уже...

Метод наименьших квадратов - C++
Можете около сложных строчек написать что там происходит(комментарии) #include &quot;stdafx.h&quot; #include &lt;tchar.h&gt; #include &lt;iostream&gt; ...

Метод наименьших квадратов! (с Pascal на C++) - C++
Писал прогу на Паскале, так как не владею должными знаниями по С++ приходится просить помочь вас!!! Помогите перевести прогу написанную на...

МНК (Метод наименьших квадратов) - C++
Помогите с реализацией аппроксимации МНК. Есть экспериментальные данные, хочу аппроксимировать их МНК. Не хочу использовать мат пакеты,...

Метод наименьших квадратов/лаба 3 - аппроксимация/ С++ - C++
Добрый день! Помогите исправить неисправность программы: #include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;stdio.h&gt; ...

2
Homa
3 / 3 / 1
Регистрация: 21.04.2009
Сообщений: 35
05.12.2010, 23:47 #2
функция main должна быть int
int main (void){}
0
Vladimir.
158 / 158 / 10
Регистрация: 24.11.2009
Сообщений: 375
06.12.2010, 02:54 #3
в подходе. Сам по себе метод Грамма численно неустойчив, нужен модифицированый алгоритм.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2010, 02:54
Привет! Вот еще темы с ответами:

Линейная аппроксимация: метод наименьших квадратов (МНК) - C++
#include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include &lt;math.h&gt; // Задание начального набора значений double **...

Линейный Метод Наименьших Квадратов, ошибка в расчетах - C++
Разработка программы аппроксимации табличной функции степенным рядом( линейный метод наименьших квадратов). использование глобальных...

Портировать программу с графиком из Pascal в С++ (метод наименьших квадратов) - C++
имеется код программы , которая реализует метод наименьших квадратов и строит графики. Может ли кто-то переписать код под С++ или ...

Привести матрицу к треугольному виду Гауссом (не могу найти работающий код) - C++
Нужен код для приведения матрицы к треугольному виду (матрица статическая, целочисленная). Пробовал гуглить, в том числе и тут....


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.