import ChaosDemos.*;
import java.awt.*;
import java.util.*;
//********************************************************************
/**
* Diagnostics for Map1D
* Shows iteration of map against map function.
* Allows region of plot to be enlarged, and displays
* sensitivity to intitial consitions.
* @version 10 October 1997
* @author Michael Cross
*/
//********************************************************************
public class Map1DTimeSeries extends Map1DDiagnostics {
/* stored x for plotting */
private double xp;
/* second x variable */
private double x1=0.;
/* stored x1 for plotting */
private double xp1=0;
/* perturbation for second trace */
private double dx=0.;
/* string for status box */
private String text;
//********************************************************************
/**
* @param inParent parent class
* @see Map1Dr
*/
//****************************************************************
public Map1DTimeSeries(Map1D inParent) {
super(inParent);
parameters = new double[parent.nParameters];
}
//********************************************************************
/**
* Updates parameters from the text controls in parent class
*/
//********************************************************************
public void updateParameters() {
int i;
iterations=0;
x0=parent.variables.parseTextField(5,x0);
x=x0;
ntrans=parent.variables.parseTextField(3,ntrans);
if(ntrans>0) runTrans=true;
curve2=false;
dx=parent.variables.parseTextField(4,dx);
if(dx!=0.) curve2=true;
nf=parent.variables.parseTextField(2,nf,true);
parent.mapFunction.setCompose(nf);
}
//*********************************************************************
/**
* Restarts plot
*/
//*********************************************************************
public void restart() {
double data[] = new double[2*functionPoints];
double data1[] = new double[6];
double data2[] = new double[6];
int i,j;
double xSave;
double tSave;
double f;
int ip=0;
// iterations=0;
parent.mapFunction.windingAdd=0;
// Eliminate transient
if(runTrans) {
for(i=0;i=xmin) && (x<=xmax) ){
data[j++] = x;
data[j++] =f;
ip++;
}
x=f;
}
if(ip > 2) {
ncurve = parent.graph.addCurve(data,ip,Color.darkGray);
}
// Plot initial point
x=xSave;
if(curve2&&(iterations==ntrans)) x1=x+dx;
runTrans=false;
xp=x;
data1[0]=x;
data1[1]=x;
x=parent.mapFunction.iterate(x);
data1[2]=xp;
data1[3]=x;
xp=x;
iterations++;
ncurve = parent.graph.addCurve(data1,2,Color.blue);
ncurve1=ncurve;
if(curve2) {
xp1=x1;
data2[0]=x1;
data2[1]=x1;
x1=parent.mapFunction.iterate(x1);
data2[2]=xp1;
data2[3]=x1;
xp1=x1;
ncurve = parent.graph.addCurve(data2,2,Color.red);
ncurve2=ncurve;
}
parent.graph.clearAll=true;
parent.graph.paintAll=true;
parent.graph.repaint();
parent.mapFunction.windingAdd=1;
}
//*********************************************************************
/**
* Iterates Map equations and updates graph
*/
//*********************************************************************
public boolean iterate() {
int i,j;
double[] moredata = new double[6];
double[] moredata1 = new double[6];
moredata[0]=xp;
moredata[1]=x;
moredata[2]=x;
moredata[3]=x;
moredata[4]=x;
x=parent.mapFunction.iterate(x);
moredata[5]=x;
if(parent.showTime) {
text="Iterations: " + iterations;
if(parent.mapFunction.showWinding && parent.mapFunction.total > 0)
text=text+" Winding: "+
String.valueOf((float) parent.mapFunction.winding/(float) parent.mapFunction.total);
parent.status.setText(text);
}
iterations++;
xp=x;
if(curve2) {
moredata1[0]=xp1;
moredata1[1]=x1;
moredata1[2]=x1;
moredata1[3]=x1;
moredata1[4]=x1;
x1=parent.mapFunction.iterate(x1);
moredata1[5]=x1;
xp1=x1;
}
parent.graph.paintAll=false;
parent.graph.clearAll=false;
parent.graph.appendToCurve(moredata,3,ncurve1);
if(curve2)
parent.graph.appendToCurve(moredata1,3,ncurve2);
parent.graph.paintAll=true;
parent.graph.repaint();
return true;
}
//**********************************************************************
/**
* Sets default values of parameters
*/
//**********************************************************************
public void setPlotDefaults() {
String[] label={"Transient","Delta-x","Start x",""};
String[] text={"0","0.","0.2",""};
parent.setPlotTextBoxes(label,text);
parent.choices.enable(0);
}
//**********************************************************************
public void respondToClick(double xcoord, double ycoord) {
x=xcoord;
restart();
parent.clicked=false;
}
}