Исходники и листинги ::: С++, С, С# ::: Численное решение дифференциального уравнения методом Адамса

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
133
  #include < conio.h >
  #include < stdlib.h >
  #include < graphics.h >
  #include < stdio.h >
  #include < math.h >
  #include < iomanip.h >
  #include < iostream.h >
 
  float f (float x,float y)
   {
  return 2*x+0*y;
   }
 
  void main()
  {
 
   int gdriver=DETECT,gmode,errorcode;
   initgraph(&gdriver,&gmode,"");
   errorcode=graphresult();
   if(errorcode!=grOk)
    {
     printf("Graphics error: %sn",grapherrormsg(errorcode));
     printf("Press any key to halt:");
     getch();
     exit(1);
    }
   clrscr();
   textbackground(0);
   int n;
   float h;
   int a,b;
   int i;
 
  //-----------------------------------------------
 
   float *dy,*x1,*y1,*y2,*xO,*yO,*y3;
   xO=new float [n];
   yO=new float [n];
   x1=new float [n];
   y1=new float [n];
   y2=new float [n];
   y3=new float [n];
   dy=new float [n];
 
  //--------------------------------------------
 
   cout < < "BBEDuTE KoJI-BO To4EK: ";
   cin >> n;
   cout < < endl < < "Nachalnaya tochka: ";
   cin >> a;
   cout < < endl < < "Konechnaya tochka: ";
   cin >> b;
   float x00,y00;
    cout < < endl < < "Vvedite x0: ";
   cin >> x00;
   cout < < endl < < "Vvedite y0: ";
   cin >> y00;
 
    h = (float)(b-a)/n;
    cout < < "Shag raven " < < h < < endl < < endl;
 
  //--------------------------METOD ADAMSA--------------------------------------
 
  cout < < "Koordinaty po metodu Adamsa: " < < endl;
  x1[0]=x00;
  y1[0]=y00;
  float ftemp;
  for(i = 0; i < 3; i++)
   {
     x1[i+1]=x1[i]+h;
     y2[i+1]=y1[i]+h*f(x1[i],y1[i]);
     ftemp=f(x1[i+1],y2[i+1]);
     y1[i+1]=y1[i]+h*(f(x1[i],y1[i])+ftemp)/2;
   }
  for(i = 3; i < n; i++)
   {
  x1[i+1]=x1[i]+h;
  dy[i+1]=float(y1[i]+((h/24)*(55*f(x1[i],y1[i])-59*f(x1[i-1],y1[i-1])+37*f(x1[i-2],y1[i-2])-9*f(x1[i-3],y1[i-3]))));
  y3[i+1]=y1[i]+((h/24)*(9*f(x1[i+1],dy[i+1])+19*f(x1[i],y1[i])-5*f(x1[i-1],y1[i-1])+f(x1[i-2],y1[i-2])));
  cout < < x1[i] < < "      ";
  cout < < y3[i+1] < < endl;
   }
 
    getch();
  //---------------------------------------------------------------------------
   clrscr();
   cleardevice();
   setcolor(15);
   setlinestyle(0,1,1);
   settextstyle(0,HORIZ_DIR,1);
  //-----osi------------------------------
   int xf=70,yf=20,yl=getmaxy()-20;
   int x2=getmaxx()-15,y4=30;
   line(xf,yf,xf,yl-5);  //os' y
   line(xf,yf,xf-5,y4);
   line(xf,yf,xf+5,y4);
   outtextxy(xf-20,yf-10,"y");
   line(xf-20,yl-25,x2,yl-25);//os' x
   line(x2,yl-25,x2-10,yl-30);
   line(x2,yl-25,x2-10,yl-20);
   outtextxy(x2-10,yl-10,"x");
   outtextxy(xf-20,yl-10,"0");
   //-------------------------------------------------------------------------
   int yz=yl-25;
   int d1y=10,d1x=50;
   char buffer[20];
  for(i = 1; i < = 10; i++)
  &nbsp;&nbsp;{
  &nbsp;&nbsp; sprintf(buffer,"%d",i);
  &nbsp;&nbsp; outtextxy(xf+i*d1x,yz+d1y,buffer);
  &nbsp;&nbsp;}
  &nbsp;&nbsp;for(i = 1; i < = 35; i++)
  &nbsp;&nbsp;{
  &nbsp;&nbsp; sprintf(buffer,"%d",i);
  &nbsp;&nbsp; outtextxy(xf-d1x,yz-i*d1y,buffer);
  &nbsp;&nbsp;}
  &nbsp;&nbsp;//--------------------------risovanie grafika----------------------------------------
  &nbsp;&nbsp; for(i = 0; i < n-1; i++)
   { setcolor(2);
  &nbsp;&nbsp;line(xf+x1[i]*d1x,yz-y3[i]*d1y,xf+x1[i+1]*d1x,yz-y3[i+1]*d1y);
   }
 
 
   getch();
 
   delete xO;
   delete yO;
   delete x1;
   delete y1;
   delete y2;
   delete y3;
   delete dy;
  }
<<< Предыдущая работа

Вернуться в галерею исходников
Численное решение дифференциального уравнения методом Адамса
Автор: Администратор 1-го ранга (Координатор) Sauron
Город: Томск
Дата: 05.11.2008  15:05
Комментариев: 3
Просмотров: 3970
Оценка: 6 (1|2|1|1|1) [2]

Вернуться на главную
Авторский комментарий к работе: Находится решение диф. уравнения 1го порядка вида dy/dx=f(x,y) методом Адамса 4го порядка точности. В данном примере - dy/dx=2*x Видно, что искомая функция имеет вид y=x^2. В зависимости от введенных начальных данных выводится график параболы того или иного вида. Использован также метод Эйлера для нахождения первых трех приближений.
Работа опубликована администратором Sauron
Вы не можете оценивать

КОММЕНТАРИИ К РАБОТЕ:
Администратор 1-го ранга (Координатор) Белая Волка ::: комментарий от 02.02.2009 | 07:42
Белая Волка Мастер (ур.17)
Очки: 33506
Город: Детские сказки
Тв. работ: 101
Рег: 27.09.2008 (8524)
Отличная работа)) Жаль что поздно заметила. Редко сюда захожу.


--------------------
Есть в жизни счастье. Spring
Администратор 2-го ранга (Куратор) Legolas ::: комментарий от 12.11.2008 | 15:32
Legolas Инструктор (ур.15)
Очки: 17265
Город: Dalaran
Тв. работ: 19
Рег: 27.04.2006 (27)
а мы не тру в маткаде гиперболические уравнения решаем ;[


--------------------
I'll never stop looking
Kane* ::: комментарий от 10.11.2008 | 08:27
Kane Перспективный (ур.8)
Очки: 1556
Город: Якутск
Тв. работ: 9
Рег: 09.10.2008 (8737)
Спасибо за строки 17-20 за определение графического режима в C++! Работа отличная.


--------------------
Все что хорошо начинается кончается плохо. А что плохо начинается кончается еще хуже.