« ようやく、パート1。 | Main | 一息つくまで、パート1。 »

August 19, 2007

A simple example of coding and simulating a little problem in Java

  Here we can visually understand the convergence of Cauchy sequence by entering the value of x and N.
  Definition: The function f(x,N,i) of two positive
integers x, i and a rational number N is defined by
          f\left(x,N,i\right)=\frac{\left[N\exp\left(0.01i-10\right){}r\left(x\right)\right]}{N\exp\left(0.01i-10\right)}.
  The function g(N,i) of a positive integer i and a
rational number N is defined by
          g\left(N,i\right)=\log\left\{N\exp\left(0.01i-10\right)\right\}.
  [•] is Gauss' symbol and r(x) is a positive square root of x. The vertical axis shows a sequence of values on the function of (x,N,i). The horizontal axis shows a sequence of values on the function of (N,i). The function of (x,N,i) has a minimum value in the assigned (i=1) condition and a maximum value in the assigned (i=1000) condition when the domain of i is between 1 and 1000.
  The domain of x is over 0 and below 10^8, and the domain of N is over 0.1^16 and below 10^16. When you enter the numerical values of x and N, please push the enter key each time you enter x or N in the text box.
  If you enter the value of x and N in other domains, the program automatically sets the variables such as x=10^5 and N=10^5.

              source code: CauchySequence.java

import java.math.BigDecimal;
import java.math.BigInteger;
import java.awt.*;
import java.awt.event.*;
import java.applet.Applet;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class CauchySequence extends Applet implements ActionListener{

private static final long serialVersionUID = -6724959421340457497L;
JTextField yx = new JTextField("100000");
JTextField yn = new JTextField("100000");
JLabel label1 = new JLabel("Convergence of Cauchy sequence",
JLabel.CENTER);
JLabel label2 = new JLabel("A natural number, 0<x<10^8",
JLabel.CENTER);
JLabel label3 = new JLabel("A rational number, 0.1^16<N<10^16",
JLabel.CENTER);

// variable set
double x = 100000;
double n = 100000;

public void init(){
label1.setPreferredSize(new Dimension(416,24));
label1.setFont(new Font("Serif",Font.BOLD,14));
add(label1);
label2.setPreferredSize(new Dimension(170,23));
label2.setFont(new Font("Serif",Font.BOLD,11));
add(label2);
yx.setPreferredSize(new Dimension(80,23));
add(yx);
label3.setPreferredSize(new Dimension(210,23));
label3.setFont(new Font("Serif",Font.BOLD,11));
add(label3);
yn.setPreferredSize(new Dimension(120,23));
add(yn);
yx.addActionListener(this);
yn.addActionListener(this);
}

public void actionPerformed(ActionEvent e){
if(e.getSource()==yx){
x=Double.valueOf(yx.getText()).doubleValue();
if(x <= 0 || x >= Math.pow(10.0,8) || x!=(long)x){
x=100000;
}
}
if(e.getSource()==yn){
n = Double.valueOf(yn.getText()).doubleValue();
BigDecimal n0 = new BigDecimal(yn.getText());
BigDecimal n1 = new BigDecimal(Math.pow(0.1,16));
BigDecimal n2 = new BigDecimal(Math.pow(10.0,16));
int d1 = n0.compareTo(n1);
int d2 = n0.compareTo(n2);
if(d1==-1 || d1==0 || d2==0 || d2==1){
n=100000;
}
}
yx.setText(""+(long)x);
yn.setText(""+n);
repaint();
}

public void paint(Graphics g){

// variable set
int i;
double b, m, p, y, minp, maxp, minb, maxb;
BigDecimal a0, a2, b0, n0, p0, p1, x0;
BigInteger a1;
double[] pp = new double[1000];
double[] bb = new double[1000];
int[] xxx = new int[1000];
int[] yyy = new int[1000];

for(i=1;i<=1000;i++){
p = Math.exp(10-0.01*i);
m = n/p;
p0 = new BigDecimal(p);
n0 = new BigDecimal(n);
p1 = n0.divide(p0,30,BigDecimal.ROUND_HALF_EVEN);
pp[i-1] = Math.log(m);
y = Math.sqrt(x);
x0 = new BigDecimal(y);
a0 = x0.multiply(p1);
a1 = a0.toBigInteger();
a2 = new BigDecimal(a1);
b0 = a2.divide(p1,30,BigDecimal.ROUND_HALF_EVEN);
b = b0.doubleValue();
bb[i-1] = b;
}

minp = pp[0];
maxp = pp[0];
minb = bb[0];
maxb = bb[0];

for(i=0;i<=999;i++){
if(pp[i]>maxp){
maxp = pp[i];
}
}

for(i=0;i<=999;i++){
if(pp[i]<minp){
minp = pp[i];
}
}

for(i=0;i<=999;i++){
if(bb[i]>maxb){
maxb = bb[i];
}
}

for(i=0;i<=999;i++){
if(bb[i]<minb){
minb = bb[i];
}
}

for (i=0;i<=999;i++){
double xx = maxp-minp;
double yy = maxb-minb;
xxx[i] = (int)((pp[i]-minp)*(351/xx))+33;
yyy[i] = 441-(int)((bb[i]-minb)*(351/yy));
}

Graphics2D g2 = (Graphics2D)g;
GradientPaint gp1 = new GradientPaint(0, 0,
new Color(154,181,228), 0,470,new Color(225,232,245), true);
g2.setPaint(gp1);
g2.fillRect(0,0,416,470);
super.paint(g);
GradientPaint gp2 = new GradientPaint(0, 33,
new Color(225,232,245), 0,351,new Color(154,181,228), true);
g2.setPaint(gp2);
g2.fillRect(33,90,354,351);
g2.setColor (Color.black);
g2.setFont(new Font ("Serif",Font.PLAIN,11));
g2.drawString("f",15,95);
g2.drawString("(x,N,i)",1,108);
g2.drawString("g(N,i)",365,455);
for (i=0;i<=998;i++){
g.drawLine(xxx[i], yyy[i], xxx[i+1], yyy[i+1]);
}
}
}

  I have recently begun to code the examples of numerical computation in Java and hope to make better use of the computational power and the graphical user interface.

  August 19, 2007 in  パソコン・インターネット , 学問・資格 , 雑記 , 

spaceトラックバックspace

このページのトラックバックURL :
http://app.cocolog-nifty.com/t/trackback/93074/16168761

このページへのトラックバック一覧 A simple example of coding and simulating a little problem in Java:


コメントを投稿






TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/93074/16168761

spacer01

Post a comment






spacer01