Метод Зейделя
![]() |
Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
|
| ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
| [18.97.9.174] |
|
|
правила раздела Алгоритмы

Метод Зейделя
|
Сообщ.
#1
,
|
|
|
|
Братья спасайте строчно нужна прога :
решение системы уравнений методом Зейделя, а самому пиать влом если есть у кого кинте на мыло please Заранее спасибо |
|
Сообщ.
#2
,
|
|
|
|
Тут есть, когда-то в инсте по ЧМ писал
//Метод наименьших квадратов #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <math.h> #include <iostream.h> #define n 20 #define m 9 double y[20]={5,6,8,10,12,13,12,10,8,10,8,11,7,9,11,10,9,12,11,6}; double sum,f[m][m+1]={1,0.5,0.6666,0.5,0.3333,0.4}; double a[m],old,tmp; int i,l,j; double mypow(double a, unsigned b) { if(!b) return 1; if(!a) return 0; double res = a; for(unsigned i=1;i<b;i++) res*=a; return res; }; void show(void) { for(i=0;i<m;i++) { for(j=0;j<m+1;j++) { printf("\%13.2f",f[i][j]); } cout<<endl; } } int main () { for(i=0;i<m;i++) for(j=0;j<m;j++) { sum=0; for(l=0;l<n;l++) { sum+=mypow(l+1,j+i); } f[i][j]=sum/n; } for(i=0;i<m;i++) { sum=0; for(l=0;l<n;l++) { sum+=mypow(l+1,i)*y[l]; } f[i][m]=sum/n; } show(); // Метод Зейделя for(i=0;i<m;i++) { for(j=0;j<m+1;j++) if(i!=j) f[i][j] /= -f[i][i]; f[i][i] = 0; f[i][m] = -f[i][m]; }; for(i=0;i<m;i++) a[i]=0; tmp = 1; old = 0; while(fabs(tmp-old)>0.0000001) { old = tmp; for(i=0;i<m;i++) { a[i] = f[i][m]; for(j=0;j<m;j++) a[i] += f[i][j]*a[j]; }; tmp=0; for(i=0;i<m;i++) tmp+=a[i]*a[i]; tmp = sqrt(tmp); }; for(j=0;j<m;j++) cout <<a[j]<<" "<<endl; for(j=1;j<n+1;j++) { printf("\%3d \%3.0f ",j,y[j-1]); for(double r=0;r<1;r+=0.2) { sum=0; for(i=0;i<m;i++) sum+=mypow(j+r,i)*a[i]; printf("\%6.1f",sum); // cout<<sum<<" "; } cout<<endl; } getch(); //show(); int gdriver = DETECT, gmode, errorcode; int xmax, ymax; initgraph(&gdriver, &gmode, "ch_met\\"); setcolor(4); line(0,400,640,400); moveto(50+20,400-y[0]*20); setcolor(3); for(j=1;j<n+1;j++) { putpixel(50+j*20,400-y[j-1]*20,3); // lineto(50+j*20,400-y[j-1]*20); for(double r=0;r<1;r+=0.05) { sum=0; for(i=0;i<m;i++) sum+=mypow(j+r,i)*a[i]; putpixel(50+(j+r)*20,400-20*sum,2); } } getch(); closegraph(); return 1; } |
|
Сообщ.
#3
,
|
|
|
|
Спасиба примерна это мне и надо было 8)
|
|
Сообщ.
#4
,
|
|
|
|
достать бы ещё заголовочный файл graphics.h
|