📄 chaos_analyser.c
字号:
mut_info(); mut_paint_proc((Canvas)NULL,window2, dpy, canvas_win_mut, (Xv_xrectlist *) NULL); }voidmut_paint_proc(canvas_mut,window, dpy, xwin, xrects)Canvas canvas_mut; /* Ignored */Xv_Window window;Display *dpy;Window xwin;Xv_xrectlist *xrects; /* Ignored */{ int i,j,start,length; double MAX_delay,min_delay,MAX_mut,min_mut,ymult,xmult; char msg[50]; XFontStruct *font; font=XLoadQueryFont(dpy, "fixed"); MAX_delay=mut_delay[MUT_NUM]; min_delay=mut_delay[1]; MAX_mut=mut[1]; min_mut=mut[MUT_NUM]; xmult=200/(MAX_delay-min_delay); ymult=200/(MAX_mut-min_mut); XSetForeground(dpy, gc, pixel_table[BLACK]); XClearWindow(dpy, xwin); XRotDrawString(dpy, font, 90. , xwin, gc, 15,180, "Mutual Information"); XRotDrawString(dpy, font, 0. , xwin, gc, 100,290, "Delay (samples)"); XDrawLine(dpy,xwin,gc,40,260,290,260); XDrawLine(dpy,xwin,gc,40,260,40,10); XDrawLine(dpy,xwin,gc,43,20,37,20); XDrawLine(dpy,xwin,gc,43,220,37,220); XDrawLine(dpy,xwin,gc,60,257,60,263); XDrawLine(dpy,xwin,gc,260,257,260,263); sprintf(msg,"%3.0lf",min_delay); XDrawString(dpy,xwin,gc,50,280,msg,strlen(msg)); sprintf(msg,"%3.0lf",MAX_delay); XDrawString(dpy,xwin,gc,250,280,msg,strlen(msg)); sprintf(msg,"%3.1lf",MAX_mut); XDrawString(dpy,xwin,gc,10,25,msg,strlen(msg)); sprintf(msg,"%3.1lf",min_mut); XDrawString(dpy,xwin,gc,10,225,msg,strlen(msg)); for (j=1;j<MUT_NUM;j++){ XDrawLine(dpy,xwin,gc,60+(mut_delay[j]-min_delay)*xmult,220-(mut[j]-min_mut)*ymult,60+(mut_delay[j+1]-min_delay)*xmult,220-(mut[j+1]-min_mut)*ymult); }}voidprint_mut(filename) char filename[100];{ int i,j,start,length,p,interval; double MAX_delay,min_delay,MAX_mut,min_mut,ymult,xmult; char msg[100],fig_file[100]; FILE *optr; MAX_delay=mut_delay[LSVD_NUM]; min_delay=mut_delay[1]; MAX_mut=mut[1]; min_mut=mut[MUT_NUM]; xmult=4000/(MAX_delay-min_delay); ymult=4000/(MAX_mut-min_mut); sprintf(fig_file,"%s.gnu_setup",filename); optr = fopen(fig_file,"w"); fprintf(optr,"set xlabel \"Delay\"\n"); fprintf(optr,"set ylabel \"Mutual Information\"\n"); fprintf(optr,"set term post port 24\n"); fprintf(optr,"set output \"%s.ps\"\n",filename); fprintf(optr,"plot \"%s.gnu_data\" notitle w l\n",filename); fprintf(optr,"set term x11\n"); fclose(optr); sprintf(fig_file,"%s.gnu_data",filename); optr = fopen(fig_file,"w"); for (j=1;j<=MUT_NUM;j++){ fprintf(optr,"%lf %lf\n",mut_delay[j],mut[j]); } fprintf(optr,"\n"); fclose(optr); sprintf(msg,"gnuplot < %s.gnu_setup",filename); system(msg); sprintf(msg,"rm %s.gnu_setup\n rm %s.gnu_data",filename,filename); system(msg);}/****************************************************************** Lyapunov Exponents********************************************************************/lya_accept(item,value) Panel_item item; int value;{ Xv_Window window=canvas_paint_window(canvas_lya); if (LYA_STOP==1){ LYA_STOP*=-1; notify_stop(); xv_set(LYA_START_STOP,PANEL_LABEL_STRING,"stop",NULL); lya_setup_proc((Canvas)NULL,window, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); } else { LYA_STOP*=-1; xv_set(LYA_START_STOP,PANEL_LABEL_STRING,"start",NULL); }}lya_print(item,value) Panel_item item; int value;{ xv_set(print_frame,XV_SHOW,TRUE,NULL); PRINT='l';}lya_zoom_inx(item,event) Panel_item item; Event *event;{ Xv_Window window=canvas_paint_window(canvas_lya); LYA_XSCALE*=1.25; lya_setup_proc((Canvas)NULL,window, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); }lya_zoom_outx(item,event) Panel_item item; Event *event;{ Xv_Window window=canvas_paint_window(canvas_lya); LYA_XSCALE*=1/1.25;lya_setup_proc((Canvas)NULL,window, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); }lya_zoom_iny(item,event) Panel_item item; Event *event;{ Xv_Window window=canvas_paint_window(canvas_lya); LYA_YSCALE*=1.25; lya_setup_proc((Canvas)NULL,window, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); }lya_zoom_outy(item,event) Panel_item item; Event *event;{ Xv_Window window=canvas_paint_window(canvas_lya); LYA_YSCALE*=1/1.25; lya_setup_proc((Canvas)NULL,window, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); }voidlya_on_off(item,value) Panel_item item; int value;{ if (value==1) xv_set(lya_frame,XV_SHOW,FALSE,NULL); else{ xv_set(lya_frame,XV_SHOW,TRUE,NULL); }}voidadjust_globdim(item,value) Panel_item item; int value;{ GLOBAL_DIM=value;}voidadjust_locdim(item,value) Panel_item item; int value;{ LOC_DIM=value;}voidadjust_reinit(item,value) Panel_item item; int value;{ REINIT=value;} voidadjust_evolve(item,value) Panel_item item; int value;{ EVOLVE=value;} voidadjust_B(item,value) Panel_item item; int value;{ B_VECT=value;} voidadjust_average(item,value) Panel_item item; int value;{ B_AVE=value;}lya_embed_choice(item,value) Panel_item item; int value;{ if (value==0){ EMBED='t'; xv_set(SVD_M_SLIDER,PANEL_LABEL_STRING,"Time Delay",NULL); xv_set(SVD_ONOFF,PANEL_VALUE,1,NULL); xv_set(SVD_M_SLIDER,PANEL_VALUE,M,NULL); xv_set(M_SLIDER,PANEL_VALUE,M,NULL); xv_set(M_SLIDER,PANEL_LABEL_STRING,"Time Delay",NULL); } else{ EMBED='s'; xv_set(SVD_M_SLIDER,PANEL_LABEL_STRING,"SVD window",NULL); xv_set(SVD_ONOFF,PANEL_VALUE,0,NULL); xv_set(SVD_M_SLIDER,PANEL_VALUE,SVD_COLS,NULL); xv_set(M_SLIDER,PANEL_VALUE,SVD_COLS,NULL); xv_set(M_SLIDER,PANEL_LABEL_STRING,"SVD window",NULL); }}lya_embed(item,value) Panel_item item; int value;{ int i,j; Xv_Window window=canvas_paint_window(canvas); MAX_VAL=0; if (EMBED=='t'){ readfile(FILENAME,GLOBAL_DIM,&NO_POINTS,M,&MAX_VAL,DATA,0); } else{ svdred(DATA,GLOBAL_DIM,FILENAME,&NO_POINTS,SVD_COLS); for (i=1;i<=NO_POINTS;i++) for (j=1;j<=GLOBAL_DIM;j++){ if (fabs(DATA[i][j])>MAX_VAL) MAX_VAL=fabs(DATA[i][j]); } } SIZE=2.5* MULT/MAX_VAL; TSIZE=45/MAX_VAL; redraw_proc((Canvas)NULL,window, dpy, canvas_win, (Xv_xrectlist *) NULL); }voidsvd_m_window(item,value) Panel_item item; int value;{ if (EMBED=='t'){ M=value; xv_set(M_SLIDER,PANEL_VALUE,value,NULL); } else{ SVD_COLS=value; xv_set(M_SLIDER,PANEL_VALUE,value,NULL); }}voidadjust_tau(item,event) Panel_item item; Event *event;{ char *test[50],str[50]; strcpy(str,(char *)xv_get(item,PANEL_VALUE)); TAU=strtod(str,test);}voidlya_drawline(item,event) Panel_item item; Event *event;{ char *test[50],str[50]; double yvalue; XSetLineAttributes(dpy,gc,1,LineOnOffDash,CapRound,JoinRound); strcpy(str,(char *)xv_get(item,PANEL_VALUE)); yvalue=strtod(str,test); if ((yvalue*LYA_YSCALE<LYA_ZERO-20) && (yvalue*LYA_YSCALE>LYA_ZERO-360)){ XDrawLine(dpy,canvas_win_lya,gc,60,(LYA_ZERO-yvalue*LYA_YSCALE),360,(LYA_ZERO-yvalue*LYA_YSCALE)); XSetLineAttributes(dpy,gc,1,LineSolid,CapRound,JoinRound); XDrawString(dpy,canvas_win_lya,gc,370,((LYA_ZERO+5)-yvalue*LYA_YSCALE),str,strlen(str)); }}voidlya_setup_proc(canvas_lya,window, dpy, xwin, xrects)Canvas canvas_lya; /* Ignored */Xv_Window window;Display *dpy;Window xwin;Xv_xrectlist *xrects; /* Ignored */{ char msg[50]; int i,j; XFontStruct *font; font=XLoadQueryFont(dpy, "fixed"); XClearWindow(dpy, xwin); XSetForeground(dpy, gc, pixel_table[BLACK]); XDrawLine(dpy,xwin,gc,60,360,360,360); XDrawLine(dpy,xwin,gc,60,360,60,20); XDrawLine(dpy,xwin,gc,60,LYA_ZERO,360,LYA_ZERO); XDrawLine(dpy,xwin,gc,63,20,57,20); XDrawLine(dpy,xwin,gc,63,360,57,360); XDrawLine(dpy,xwin,gc,360,357,360,363); XRotDrawString(dpy, font, 90. , xwin, gc, 15,225, "Lyapunov Exponents"); XRotDrawString(dpy, font, 0. , xwin, gc, 170,380, "Evolve Steps"); sprintf(msg,"%3.0lf",(300/LYA_XSCALE)); XDrawString(dpy,xwin,gc,345,375,msg,strlen(msg)); sprintf(msg,"%3.0lf",0); XDrawString(dpy,xwin,gc,50,375,msg,strlen(msg)); sprintf(msg,"%3.2lf",((LYA_ZERO-20)/LYA_YSCALE)); XDrawString(dpy,xwin,gc,20,25,msg,strlen(msg)); sprintf(msg,"%3.2lf",0); XDrawString(dpy,xwin,gc,20,LYA_ZERO+5,msg,strlen(msg)); sprintf(msg,"%3.2lf",((LYA_ZERO-360)/LYA_YSCALE)); XDrawString(dpy,xwin,gc,13,365,msg,strlen(msg)); for (i=1;i<=LOC_DIM;i++) for (j=10;j<=EV_POS;j++){ if (j*LYA_XSCALE<300) XDrawLine(dpy,xwin,gc,60+(j-1)*LYA_XSCALE,LYA_ZERO-(LYA_EXP[j-1][i]*LYA_YSCALE/(j-1)),60+j*LYA_XSCALE,LYA_ZERO-(LYA_EXP[j][i]*LYA_YSCALE/j)); }}voidlya_event_proc(window, event) Xv_Window window; Event *event;{ int width,height; Xv_Window window2=canvas_paint_window(canvas_lya); if (event_is_ascii(event)); else switch (event_action(event)){ case ACTION_SELECT: case MS_LEFT: X_SET=event_x(event); Y_SET=event_y(event); break; default: return; } width=0.01 *event_x(event); LYA_ZERO= event_y(event); lya_setup_proc((Canvas)NULL,window2, dpy, canvas_win_lya, (Xv_xrectlist *) NULL); }voidlya_paint_proc(canvas_lya,window, dpy, xwin, xrects)Canvas canvas_lya; /* Ignored */Xv_Window window;Display *dpy;Window xwin;Xv_xrectlist *xrects; /* Ignored */{ int i,j; double x,y,x_last,y_last; XSetForeground(dpy, gc, pixel_table[BLACK]); for (i=1;i<=LOC_DIM;i++){ if (EV_POS*LYA_XSCALE<300) XDrawLine(dpy,xwin,gc,60+(EV_POS-1)*LYA_XSCALE,LYA_ZERO-(LYA_EXP[EV_POS-1][i]*LYA_YSCALE/(EV_POS-1)),60+EV_POS*LYA_XSCALE,LYA_ZERO-(LYA_EXP[EV_POS][i]*LYA_YSCALE/EV_POS)); } }/******************************************************************** General procedures********************************************************************/voidsave_to_file(outfile,save_canvas,save_canvas_win) char *outfile; Canvas save_canvas; Window save_canvas_win; { XImage *xi; char command[50],pgm_outfile[50]; unsigned char pixvalue; int i,j,leave=0; unsigned int width,height; FILE *optr; height=xv_get(save_canvas,XV_HEIGHT)-2; width=xv_get(save_canvas,XV_WIDTH)-2; sprintf(pgm_outfile,"%s.pgm",outfile); optr = fopen(pgm_outfile,"wb"); if (optr == (FILE *)NULL) { xv_set(mes_frame,XV_SHOW,TRUE,NULL); leave=1; } if (leave==0){ sprintf(command,"pnmcrop %s |pnmtops -noturn > %s",pgm_outfile,outfile); fprintf(optr,"P1\n%d %d\n",width,height); xi = XGetImage(dpy,save_canvas_win,0,0,width,height,AllPlanes,XYPixmap); for (i=0;i<height;i++) for (j=0;j<width;j++) fputc('0'+XGetPixel(xi,j,i),optr); fclose(optr); system(command); sprintf(command,"rm %s",pgm_outfile); system(command); }}voidmain_print(item,value) Panel_item item; int value;{ xv_set(print_frame,XV_SHOW,TRUE,NULL); PRINT='m';}voidshow_axes(item,value) Panel_item item; int value;{ Xv_Window window=canvas_paint_window(canvas); AXES*=-1; if (AXES==1) xv_set(AXES_ON_OFF,PANEL_LABEL_STRING,"Axes off",NULL); else xv_set(AXES_ON_OFF,PANEL_LABEL_STRING,"Axes on",NULL); redraw_proc((Canvas)NULL,window, dpy, canvas_win, (Xv_xrectlist *) NULL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -