Вопрос по С++

NaBlA

Сын Амбера
Ну, с сигнумом можно было и не давать информации, функция дровольно таки распростаненная.:)
Вопрос по существу - что за это будет Гуру? :)))))
ОООО!!! Кстати!
Это Система Лоренца с двузначным параметром порядка, да еще и обладающая самоподобием (так как есть степень 0.7). Я ее тебе не только решить могу, а еще и объяснить полученное решение, указав стационарные точки, и так далее. Величина 40 - это у тебя внешнее воздействие (видимо энтропия).
З.Ы.: Только времени не так много, увы.
З.Ы.Ы.: Сигнум у тебя появляется, так как рассматриваются как положительные, так и отрицательные значения параметра порядка, а он у нас в дробной степени, что мешает этому учету. Я когда-то пробовал решать в отрицательной области, выдавало ошибку, так и не понял, в чем дело. Теперь хоть буду знать, что нужно пользоваться такой замечательной вещью, как сигнум! :)
 

Firewall

Мой повелитель
Монcтр!(в харошем смысле)
Это правду система ЛОренца которая дает простейшее описание колективного поведения системы, претерпевающая качественных изменений, характерезуемая параметром порядка.
 
Останнє редагування:

Firewall

Мой повелитель
Ну хотябы каким-нибудь методом (желаетльно эйлера)
само n=
h=
S=....
 
Останнє редагування:

NaBlA

Сын Амбера
Метод Эйлера состоит в определении производной как приращения функции на приращение аргумента, и все. Дерзай, не так уж и сложно:)
 

Firewall

Мой повелитель
ну и сказанул, это ты сказал определение производной ), мне описуеться как оно надо... точнее я не пойму...
void Ailer(double n0, double h0, double S0)
{
struct Var{
double n, h, S;
} ;
Var v;
int N=700;
int i;
double k=n0,l=h0,m=S0;
FILE *datafile1, *datafile2, *datafile3;
datafile1=fopen("c:\\file1.txt","w+b");
for(i=0;i<N;i++){
v.n = n0 ??????????????????????? *dt
v.h = h0 ??????????????????????? *dt;
v.S = S0 ?????????????????????? *dt;
fwrite(&v,sizeof(v),1,datafile1);
n0=v.n;
h0=v.h;
S0=v.S;
}
fclose(datafile1);
n0=k;
h0=l;
S0=m;
datafile2=fopen("c:\\file2.txt","w+b");
for(i=0;i<N;i++){
v.h = h0 ???????????????????*dt;
v.S = S0 ???????????????????*dt;
fwrite(&v,sizeof(v),1,datafile2);
h0=v.h;
S0=v.S;
}
fclose(datafile2);
n0=k;
h0=l;
S0=m;
datafile3=fopen("c:\\file3.txt","w+b");
for(i=0;i<N;i++){
v.h = h0 ???????????????????*dt;
fwrite(&v,sizeof(v),1,datafile3);
h0=v.h;
}
fclose(datafile3);
Menu();
getch();
}

хотя я так понял и это тож не правильно так как n0 h0 S0 у меня не известны.... И ище как сделать что бы в file1.txt file2.txt file3.txt сохранялись значения в столбик а не какойто байдой?


или все таки без начальных n h и S не обойтись?!?!?!?...
 
Останнє редагування:

Firewall

Мой повелитель
НУ ПОДСКАЖИТЕ АЛГОРИТМ РЕШЕНИЯ СИСТЕМ ДИФ.УР. МЕТОДОМ ЭЙЛЕРА!!!
 

Firewall

Мой повелитель
ели нашол этот алгоритм а собственно ево гениальный способ это умножение функции(с задаными начальными) на шаг.

void Ailer(double n0, double h0, double S0)
Код:
{
   struct Var{
      double n, h, S;
   } ;
   Var v;
   int N=700;
   int i;
   double k=n0,l=h0,m=S0;
   FILE *datafile;
   datafile2=fopen("c:\\hs.txt","w+b");
   for(i=0;i<N;i++){
      v.h = h0+(((-h0+1*S0*pow(fabs(n0),0.7)))/10)*dt;
      v.S =  S0+((((r-S0)-1*pow(fabs(n0),0.7)*h0)*(8/3))/10)*dt;
     fwrite(&v,sizeof(v),1,datafile2);
     h0=v.h;
     S0=v.S;
   }
   fclose(datafile);
   n0=k;
   h0=l;
   S0=m;
   Menu();
   getch();
}
вообщем график ацтойный какойто рисует падскажите де я ошибаюсь!!!?? Это я его укоротил для нахождения координат h & S а также sign заменил на 1
 

Firewall

Мой повелитель
Очередная неудачная попытка(все пытаюсь добиться результатов h i S):
main.cpp
Код:
# include "c:\user\ailer\funk.h"
void main()
{
 float n0=2,h0=2 ,S0=2;
Ailer(n0,h0,S0);
}
funk.h
Код:
#ifndef  _funk_h
#define  _funk_h
#include <fstream.h>
#include <math.h>
#include <iomanip.h>
#define N 10
void Ailer(double n0,double h0,double S0)
{
double h, S, t;
ofstream in_file("c:\\data.txt");
int dt=0.001;
for(int i=0;i<N;i++)
{
h = h0 + h0+(((-h0+1*S0*pow(fabs(n0),0.7)))/10)*t;
S = S0 + S0+(((39-S0)-1*pow(fabs(n0),0.7)*h0)*0.26666)*t;
in_file<<"\t"<<setw(4)<<h<<"\t"<<setw(5)<<S<<endl;
t+=dt;
}}
#endif
Мне кто-то подскажет что я делаю не так?!?!?!?!?!?!?!?!?
 

NaBlA

Сын Амбера
dx/dt = A;
Решение:
(x2-x1)/dt = A;
x2-x1 = A*dt;
x2 = x1 + A*dt;

При следующем шаге x1 заменяется на x2.
У тебя совсем не так.
 

Firewall

Мой повелитель
И сново я с очередным супер-сложным заданием!
Надо организовать функцию маштобирывание для графика которое берет значения х и у с текстового файла и ресует график.
Вот наброски(нерабочии):
Код:
void Graph_NH()
{
   int x1,y1,x;
   float max_y=1E-5,min_y=1E+5,y,dx=0.3,x_max,x_min,a=60;
  FILE *datafile;
   Var v;
   datafile=fopen("c:\\user\\vip\\nh.txt","rb");
   rewind(datafile);
     while (!feof(datafile)){
     fscanf(datafile,"%lf\t%lf\n",&x,&y);
    if(x>x_max) x_max=x;
    if(x<x_min) x_min=x;
    if(y>max_y) max_y=y;
    if(y<min_y) min_y=y;}
   setgraphmode(getgraphmode());
int y_c=getmaxy()/2,xx;
int x_c=getmaxx()/2,yy;
line(0,y_c,getmaxx(),y_c);
line(getmaxx(),y_c,getmaxx()-10,y_c-5);
line(getmaxx(),y_c,getmaxx()-10,y_c+5);
moveto(getmaxx()-10,y_c+15);
outtext("x");
line(x_c,0,x_c,getmaxy());
moveto(x_c+5,y_c+5);
outtext("0");
line(x_c,0,x_c+5,10);
line(x_c,0,x_c-5,10);
moveto(x_c+10,5);
outtext("y");
float N = (x_max-x_min)/dx;
float dy=max_y-min_y;
float M = ((max_y-min_y)/N);
if(M<1) M=1;
int koef_x = (int)(getmaxx()/N);
int koef_y = (int)(getmaxy()/((max_y-min_y)/M));
setcolor(BLUE);int i=0;
       while(!feof(datafile)&&!kbhit()){
       fscanf(datafile,"%lf\t%lf\n",&x,&y);
              if(x<0) xx=x_c-ceil(koef_x*fabs(x));
	else  xx=x_c+ceil(koef_x*fabs(x));
	if(y<0) yy=y_c-ceil(koef_y*fabs(y));
	else   yy=y_c+ceil(koef_y*fabs(y));
	if(i==0) 	moveto(xx,yy);
	else lineto(xx,yy);
	i++;
      x1=ceil(x+x/scale);
      y1=ceil(y-y/scale);
     putpixel(x1,y1,4);
   }
 
Зверху