// kaikixyz.java(最小2乗法) // import java.applet.Applet; import java.awt.*; import java.io.*; import java.lang.*; import java.net.URL; import java.util.*; import java.applet.*; import java.awt.event.*; public class kaikixyz extends Applet { TextArea ta1,ta2; Button b; // Button b = new Button(""); int n_data=0; int flag_com=0; int nn=9; int im; int jm; int iw; int i_tmp; int no; double z2; double a[][]; double f[]; double af[]; double x_data[]; double y_data[]; double z_data[]; double w; double aa; double bb; double p; double q; Labo_Util labo; // 初めに一度だけ実行するメソッド public void init() { setLayout(new FlowLayout(FlowLayout.LEFT)); ta1 = new TextArea("",10,60); ta2 = new TextArea("",12,60); ta2.setEditable(false); ta2.setBackground(new Color(255,255,232)); add(ta1); add(b=new Button("")); b.addActionListener(new MyListener()); // add(b); add(ta2); setBackground(new Color(147,176,255)); setLayout((LayoutManager)null); ta1.setBounds(10,40,370,150); ta2.setBounds(10,220,370,150); b.setBounds(320,10,60,20); x_data = new double[501]; y_data = new double[501]; z_data = new double[501]; a = new double[50][50]; f = new double[50]; af = new double[50]; labo = new Labo_Util(); } // Graphicsクラスを用いて文字を描画 public void paint(Graphics g) { Font f_TimesRoman; f_TimesRoman = new Font("TimesRoman",Font.ITALIC,15); g.setFont(f_TimesRoman); g.drawString("Data Window",10,35); g.drawString("Answer...",10,215); } // csv形式のStringオブジェクトから配列変数を作成(3列用) void data_aqui(String instr) { n_data=0; String s_tmp=""; boolean flag_ret=false; flag_com=0; for (int i=0; i<=instr.length()-1; i++) { if(instr.charAt(i) == '\n'){flag_ret=true;}; if((instr.charAt(i) == ',') || (instr.charAt(i) == '\t')){flag_com=flag_com+1;}; if(instr.charAt(i) == ',' || flag_ret) { if (flag_ret) { z_data[n_data+1]=labo.String2double(s_tmp); s_tmp=""; n_data++; flag_ret=false; }; if (instr.charAt(i) == ',' && flag_com == 1) { x_data[n_data+1]=labo.String2double(s_tmp); s_tmp=""; }; if (instr.charAt(i) == ',' && flag_com == 2) { y_data[n_data+1]=labo.String2double(s_tmp); s_tmp=""; flag_com=0; }; } else { s_tmp=s_tmp+instr.charAt(i); } } } // 2パラメータ最小二乗法近似 Main Engine void xyz() { // マトリックス係数の計算 for (int jj=1; jj<=3; jj++) { for (int kk=1; kk<=3; kk++) { im=3*(jj-1)+kk; f[im]=0; for (int id=1; id<=n_data; id++) { f[im]=f[im]+z_data[id]*Math.pow(x_data[id],(jj-1))* Math.pow(y_data[id],(kk-1)); } for (int j=1; j<=3; j++) { for (int k=1; k<=3; k++) { im=3*(jj-1)+kk; jm=3*(j-1)+k; a[im][jm]=0; for (int id=1; id<=n_data; id++) { a[im][jm]=a[im][jm]+Math.pow(x_data[id],(jj-1))* Math.pow(y_data[id],(kk-1))* Math.pow(x_data[id],(j-1))* Math.pow(y_data[id],(k-1)); } } } } } // マトリックス係数計算終了 // マトリックス計算 for (int k=1; k<=nn-1; k++) { w=Math.abs(a[k][k]); iw=k; for (int i=k+1; i<=nn; i++) { if (w