Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> графики в С++ 
:(
    Опции темы
wir
Дата 11.4.2010, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.6.2009

Репутация: -2
Всего: -2



Есть задача.метод рунге.выдает значения.а как написать чтобы он еще график строил по этим значениям?
помогите плиз))
Код
#include <conio.h>
#include <math.h>
#include <stdio.h>

typedef void (*ptr_func)(int, long double, long double*, long double*);

 void rp1(int n, long double t, long double* y, long double* f)    // Функция вычисления правой части
   {
//коэффициенты 
    long double u = 1;   //средняя скорость течения потока (в день)
    long double k1 = 1;  //
    long double k2 = 1;  //
    long double k3 = 1;  //
    long double db = 1;  //
    long double la = 1;  //
    long double cs = 1;  // насыщенность (концентрация) растворенного кислорода

    f[0] = 1.0/u *(-(k1 + k3) * y[0] + la);            
    f[1] = 1.0/u *(-k1*y[0] + k2 * (cs - y[1]) - db); 
    return; 
   }

 void rp2(int n, long double t, long double* y, long double* f)    // Функция вычисления правой части
   {
//коэффициенты 
    long double k1 = 1;  //
    long double k2 = 1;  //
    long double k3 = 1;  //
    long double db = 1;  //
    long double la = 1;  //

    //f[0] = 1.0/u *(-(k1 + k3) * y[0] + la);            
    //f[1] = 1.0/u *(-k1*y[0] + k2 * (cs - y[1]) - db); 

//уравнения
    f[0] = (-k1 - k3) * y[0] + la;            // биохимическая потребность растворенного кислорода в потоке 
    f[1] = k1 * y[0] - k2 * y[1] + db; //концентрация растворенного кислорода на расстоянии вниз по течению потока

     return; 
   }

 void method(ptr_func rp, int n, long double &t,long double &h, long double tk, long double eps, long double* y, long double r)    // Метод Фельберга
   {

 long double  *yN, b1, bb1, bb2, t1, pp, ss;
 long double *k1, *k2, *k3, *k4, *k5, *k6;
 
 k1 = new long double [n];    // стадии метода
 k2 = new long double [n];
 k3 = new long double [n];
 k4 = new long double [n];
 k5 = new long double [n];
 k6 = new long double [n];
 yN = new long double [n];
 
 long double l1 =17./24.;
 long double l2 = 1./9.;

 long double p51 = 16./135.;    // коэффициенты метода
 long double p52 = 0.;
 long double p53 = 6656./12825.;
 long double p54 = 28561./56430.;
 long double p55 = -9./50.;
 long double p56 = 2./55.;
 
 long double p41 = 25./16.;
 long double p42 = 0.;
 long double p43 = 1408./2565.;
 long double p44 = 2197./4104.;
 long double p45 = -1./5.;
 long double p46 = 0;

 long double b21 = 1./4.;
 long double b31 = 3./32.;
 long double b32 = 9./32.;
 long double b41 = 1932./2197.;
 long double b42 = -7200./2197.;
 long double b43 = 7296./2197.;
 long double b51 = 439./216.;
 long double b52 = -8.;
 long double b53 = 3680./513.;
 long double b54 = -845./4104.;
 long double b61 = -8./27.;
 long double b62 = 2.;
 long double b63 = -3544./2565.;
 long double b64 = 1859./4104.;
 long double b65 = -11./40.;

 if(t+h > tk) h = fabs(tk - t);

 rp(n, t, y, k1);
 
do
{
 t1 = t + b21*h;
 
 for(int i=0; i<n; i++)
   yN[i] = y[i] + b21*h*k1[i];

 rp(n,t1,yN,k2);

 t1 = t + (b31 + b32)*h;
 
 for (int i=0; i<n; i++)
   yN[i] = y[i] + h*(b31*k1[i] + b32*k2[i]);
 
  rp(n,t1,yN,k3);

  t1 = t + (b41 + b42 + b43)*h;
  
  for (int i=0; i<n; i++)
    yN[i] = y[i] + h*(b41*k1[i] + b42*k2[i] + b43*k3[i]);
  
  rp(n,t1,yN,k4);
  t1 = t + (b51 + b52 + b53 + b54)*h;
  
  for(int i=0; i<n; i++)
    yN[i] = y[i] + h*(b51*k1[i] + b52*k2[i] + b53*k3[i] + b54*k4[i]);
  
  rp(n,t1,yN,k5);

  t1 = t + (b61 + b62 + b63 + b64 + b65)*h;
  
  for(int i=0; i<n; i++)
    yN[i] = y[i] + h*(b61*k1[i] + b62*k2[i] + b63*k3[i] + b64*k4[i] + b65*k5[i]);
 
  rp(n,t1,yN,k6);

  pp = 0.;
  ss = 0.;
  
  for(int i=0; i<n; i++)
    {
      b1 = fabs((p51 - p41)*k1[i] + (p52 - p42)*k2[i] + (p53 - p43)*k3[i] + (p54 - p44)*k4[i] +
      (p55 - p45)*k5[i] + (p56 - p46)*k6[i] )/(fabs(y[i]) + r);
      b1 = b1*l1;
      bb1 =  fabs(k2[i] - k1[i]);
      bb2 = 0.e0;
      if(bb1 > 1.e-13) bb2 = fabs(32*k3[i] - 48*k2[i] + 16*k1[i])/bb1;
      if(pp < b1) pp = b1;
      if(ss < bb2) ss = bb2;
    }
   
      pp = h*pp;
      ss = ss*l2;
      if(pp < eps) break;


do
{
    h = h/1.1;
    pp = pp/1.4641;
    if(pp <= eps) break;

    h = h/1.1;
}
while (true);
 
}
while (true);


      t=t + h;
      for(int i=0; i<n; i++)
        y[i] = y[i] + h*(p51*k1[i] + p52*k2[i] + p53*k3[i] + p54*k4[i] + p55*k5[i] + p56*k6[i]);

      ss = 0.;

//m4: 
do
{
      h = h*1.1;

      pp = pp*1.61051;
      ss = ss*1.1;
      if (pp > eps || ss > 3.6) break;
}
while (true);



      h = h/1.1;

      delete yN;
      delete k1;
      delete k2;
      delete k3;
      delete k4;
      delete k5;
      delete k6;
      
      return;
}


 void main()
   {
     int n = 2;    // размерность задачи

     long double h=0.1;    // начальный шаг интегрирования
     
     
     long double t= 0.0;    // начальная точка интегрирования
     long double tk = 5;    // конечная точка интегрирования
     
     
     long double eps = 0.01;    // точность
     long double r = 1.;
     long double *y, *f;
     long double t1,h1;

     y = new long double [n];
     f = new long double [n];

     y[0] = 1.e0;    // начальные условия
     y[1] = 0.;
     
     printf("\tt\t    h\t\ty1(t)\t  y2(t)\n");

     do
     {
         t1=t;
        method(rp1, n,t,h,tk,eps,y,r);
        h1 = t - t1;
     
         printf("\n%12.5f %12.5f %12.5f %12.5f",t,h1,y[0],y[1]);
     }
     while (fabs(t-tk)>1.e-13);

     printf("\n\n");

     //система (2)
     h=0.1;    // начальный шаг интегрирования
     t= 0.0;    // начальная точка интегрирования
     tk = 5;    // конечная точка интегрирования
     eps = 0.01;    // точность
     r = 1.;
     y[0] = 1.e0;    // начальные условия
     y[1] = 0.;
     
     printf("\tt\t    h\t\ty1(t)\t  y2(t)\n");

     do
     {
        t1=t;
        method(rp2, n,t,h,tk,eps,y,r);
        h1 = t - t1;
        printf("\n%12.5f %12.5f %12.5f %12.5f",t,h1,y[0],y[1]);
     }
     while (fabs(t-tk)>1.e-13);

    
     getch();
}



Модератор: не забываем пользоваться кнопочкой "Код".

Это сообщение отредактировал(а) bsa - 12.4.2010, 13:56
PM MAIL   Вверх
ИванМ
Дата 11.4.2010, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



wir, тебе надо под винды или под дос?
PM MAIL   Вверх
wir
Дата 11.4.2010, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.6.2009

Репутация: -2
Всего: -2



хм..)))скорей всего под дос))))я если чего девочка))и ничего особо не понимаю))а в чем разница))
PM MAIL   Вверх
ИванМ
Дата 11.4.2010, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



wir, если под дос, то, разбирайся сама smile Никто таким архаизмом, думаю, уже не занимается. А если под винды и ты еще причем ничего особо не понимаешь, то поставь например Builder и его юзай. Там есть стандартные компоненты. Думаю это лучший вариант. WinApi, MFC и проч. тебе не потянуть.
PM MAIL   Вверх
wir
Дата 11.4.2010, 16:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.6.2009

Репутация: -2
Всего: -2



у меня Builder
PM MAIL   Вверх
ИванМ
Дата 11.4.2010, 16:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



wir, тогда погугли компонент TChart.
PM MAIL   Вверх
wir
Дата 11.4.2010, 16:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.6.2009

Репутация: -2
Всего: -2



слушай у меня эти данные сохраняются в блокноте в виде таблицы,мне надо отдельные ее столбцы в  Excel перенести.а она копируется как единое целое.не знаешь чего сделать можно?как ее разбить?
PM MAIL   Вверх
ИванМ
Дата 11.4.2010, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1260
Регистрация: 19.6.2006
Где: СПб

Репутация: 3
Всего: 23



wir, как вариант открой текстовый файл в Билдере, а там с помощью нажатия alt выбери нужное. Только не редактируй в нем ничего, потому что Билдер заменяет символ табуляции на пробелы.
А вообще не вижу из твоего кода, что бы там что-то куда то сохранялось.
Или ты имеешь ввиду что копируется все в одну ячейку? Надо чтобы были разделителями символы табуляции.

Это сообщение отредактировал(а) ИванМ - 11.4.2010, 17:07
PM MAIL   Вверх
wir
Дата 11.4.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 33
Регистрация: 24.6.2009

Репутация: -2
Всего: -2



спасибо огромное))
PM MAIL   Вверх
xvr
Дата 12.4.2010, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 35
Всего: 223



Цитата(wir @  11.4.2010,  16:58 Найти цитируемый пост)
слушай у меня эти данные сохраняются в блокноте в виде таблицы,мне надо отдельные ее столбцы в  Excel перенести
Сохраняй данные в формате csv. Столбцы в нем разделяются символами ';' (для русской версии Excel'я). Для английской - табуляциями


PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1201 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.