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

Краевая задача - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.85
Лунатик
0 / 0 / 0
Регистрация: 22.09.2011
Сообщений: 8
04.11.2011, 21:41     Краевая задача #1
Решение краевых задач методом прогонки для диф. уравнений второго порядка. Подскажите, где ошибка. Погрешности гигантские получаются
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
#include <stdlib.h>
#include <math.h>
using namespace std;
 
void main()
{
        int n,i;
        float c1=1.0, d1=1.0, c2=-2.0, d2=2.0, c=0, d=0, a=-1.0, b=1, fx;
        float h,e[9999], maxe;
        float p[9999],q[9999],betta[9999],gamma[9999],fi[9999],alfa[9999];
        float y[9999],u[9999],v[9999],x[9999], yt[9999];
        cout<<"Vvedite 4islo uzlov n"<<endl;
        cout<<endl<<"n=";
        cin>>n;
        x[0]=a;
        h=(b-a)/n;//шаг
        betta[0]=c1*h-c2;
        gamma[0]=c2;
        fi[0]=h*c;
        alfa[0]=0;
        yt[0]=10*exp(-x[0]*x[0]);
        for(i=1;i<n;i++)
        {
                yt[i]=10*exp(-x[i]*x[i]);
                x[i]=x[i-1]+h;//определение отрезка
                p[i]=x[i]*x[i];// р на данном отрезке
                q[i]=x[i];//q на данном отрезке
                fx=10*exp(-x[i]*x[i])*(2*x[i]*x[i]-1)*(2-x[i]);
                fi[i]=h*((y[i+1]-2*y[i]+y[i-1])/h*h+p[i]*(y[i+1]-y[i-1])/2*h+q[i]*y[i]);// функция на данном отрезке
                alfa[i]=1/h-(1/2)*p[i];
                betta[i]=q[i]*h-2/h;
                gamma[i]=1/h+(1/2)*p[i];
        }
        alfa[n]=-d2;
        betta[n]=h*d1+d2;
        fi[n]=h*d;
        gamma[n]=0;
        v[0]=gamma[0]/betta[0];
        u[0]=fi[0]/betta[0];
        for(i=1;i<n;i++)//прямой ход прогонки
        {
                v[i]=-gamma[i]/(betta[i]+alfa[i]*v[i-1]);
                u[i]=(fi[i]-alfa[i]*u[i-1])/(betta[i]+alfa[i]*v[i-1]);
        }
        y[n]=u[n];
        v[n]=0;
        for(i=n-1;i>0;i--) //обратный ход прогонки
                y[i]=u[i]+v[i]*y[i+1];
        
        cout<<"maximal'naya pogre6nost'"<<endl;//нахождение погрешности
        for(i=0;i<n;i++)
        {
                cout<<yt[i]<<endl<<y[i]<<endl;
                e[i]=y[i]-yt[i];
        }
        maxe=e[0];
        for(i=0;i<n;i++)
        {
                if (e[i]>maxe) maxe=e[i]; 
        }
        cout<<maxe <<endl;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.11.2011, 21:41     Краевая задача
Посмотрите здесь:

C++ Краевая задача 1 порядка

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
05.11.2011, 09:39     Краевая задача #2
Цитата Сообщение от Лунатик
C++
1
for(i=1;i<n;i++)
повторится n - 1 раз
в массивах пропустит элемент с индексом ноль
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
05.11.2011, 12:39     Краевая задача #3
Цитата Сообщение от Лунатик Посмотреть сообщение
for(i=n-1;i>0;i--) //обратный ход прогонки
Аналогично.
Yandex
Объявления
05.11.2011, 12:39     Краевая задача
Ответ Создать тему
Опции темы

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