Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Обработка / gaus

.java
Скачиваний:
6
Добавлен:
08.03.2015
Размер:
27.39 Кб
Скачать
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

import javax.microedition.midlet.*;
import javax.microedition.midlet.MIDlet;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import java.io.IOException;
import javax.microedition.lcdui.Canvas;
import javax.microedition.lcdui.Graphics;
import java.util.*;

import java.lang.Math;



import javax.microedition.lcdui.Form;
import javax.microedition.lcdui.TextField;
import javax.microedition.lcdui.TextBox;


import ral.Real;
import ral.Real.*;

/**
 * @author Admin
 */






public class gaus extends MIDlet {

Display display;
TextBox ent;
Command enter; 
Command cancel;
Command Next1;
Command Next2;
Command Next3;
Command Next11;
Command Next21;
Command Next22;
Command Next31;
Command Next32;
Command Exit;
Command Add;
Command Del;
Command Auto;
Command Ret;
Command Dan;
Command Dan2, Dan3, RetDan;
TextField X[];
ral.Real Mx[][][];
private CommandListener cl; 
ral.Real e[][];



public void MatMul(ral.Real A[][], ral.Real B[][], int m, int n, int q, ral.Real C[][]){
 //C = new ral.Real[m][q];
 ral.Real MUL;
 MUL = new ral.Real(1);
 for(int i=0; i<m; i++){
   for(int j=0; j<q; j++){
    C[i][j] = new ral.Real();
     for(int r=0; r<n; r++){
      MUL = new ral.Real(A[i][r]);
      MUL.mul(B[r][j]);
      C[i][j].add(MUL);
     }
    
   }
 }
 
}

public ral.Real MatMax(ral.Real A[][], ral.Real B[][], int n){
ral.Real max = new ral.Real();
ral.Real Mi = new ral.Real();
for(int i=0; i<n; i++){
  Mi = new ral.Real(A[i][0]);
  Mi.sub(B[i][0]);
  Mi.abs();
  if(Mi.greaterThan(max))max = new ral.Real(Mi);
}
return max;    
}

public void MatAdd(ral.Real A[][], ral.Real B[][], int m, int n){
 for(int i=0; i<m; i++){
  for(int j=0; j<n; j++){
   B[i][j].add(A[i][j]);
  }
 }
}

    
public class gMatrix{
 ral.Real Left[][];
 ral.Real Right[];
 int n;
 
 public gMatrix(){
  Left = new ral.Real[100][100];
  Right = new ral.Real[100];
 }
 
 public gMatrix(gMatrix gm){
  Left = new ral.Real[100][100];
  Right = new ral.Real[100];
  n = gm.n;
  for(int i=0; i<n; i++){
   for(int j=0; j<n; j++){
    Left[i][j] = new ral.Real(gm.Left[i][j]);
   }
   Right[i] = new ral.Real(gm.Right[i]);
  }
 }
 
 public void ADD(){
   //добавление низа
   for(int i=0; i<=n; i++){
    Left[n][i] = new ral.Real();
   }
   //добавление права
   for(int j=0; j<n; j++){
    Left[j][n] = new ral.Real();
   }
   //добавление в Right
    Right[n] = new ral.Real();
   n++;
 }
 
 public void ADD(int k){
  for(int i=0; i<k; i++){
   ADD();
  }
 }

 public void DEL(){
   if(n>0)n--; 
 }
 
 public void Recom(int k){
  //сдвинуть к-тую строку вниз и поднять все строки вверх на 1
  ral.Real bufer[];
  bufer = new ral.Real[n+1];
  bufer[n] = new ral.Real(Right[k]);
  for(int i=0; i<n; i++){
    bufer[i] = new ral.Real(Left[k][i]);
  }
  
  for(int i=k; i<n-1; i++){
   Right[i] = new ral.Real(Right[i+1]);
   for(int j=0; j<n; j++){
   Left[i][j] = new ral.Real(Left[i+1][j]);
   }
  }
  
  Right[n-1] = new ral.Real(bufer[n]);
  for(int i=0; i<n; i++){
    Left[n-1][i] = new ral.Real(bufer[i]);
  }
  
 }
 
 public int DIV(int str, ral.Real mas[]){
  for(int i=0; i<str; i++){
   mas[i] = new ral.Real();
  }
  int ki = str;
  while(Left[str][str].isZero()){
    ki++;
    if(ki == n) return 0;
    Recom(str);
  }
  for(int r=str+1; r<n; r++){
    Left[str][r].div(Left[str][str]);
    //System.out.println("!!!!Left["+str+"]["+str+"] = "+Left[str][str].toString());
    mas[r] = new ral.Real(Left[str][r]);
  }
  Right[str].div(Left[str][str]);
  mas[n] = new ral.Real(Right[str]);
  mas[str] = new ral.Real(1);
  
  
  Left[str][str] = new ral.Real(1);
  return 1;
 }
 
 public void SUB(int str, ral.Real mas[]){
   ral.Real b;
   for(int i=str+1; i<n; i++){
    for(int j=str+1; j<n; j++){
      b = new ral.Real(Left[i][str]);
      b.mul(mas[j]);
      Left[i][j].sub(b);
    }
      b = new ral.Real(Left[i][str]);
      b.mul(mas[n]);
      Right[i].sub(b);
    Left[i][str] = new ral.Real();
   }
 }
 
 public int Gaus(){
  ral.Real M[];
  M = new ral.Real[n+1];
  
  for(int i=0; i<n-1; i++){
   int h = DIV(i,M);
   
   if(h==0) return 0;
   SUB(i,M);
  }
  return DIV(n-1, M);
 }
 
 public String BackWay(){
  ral.Real Result[];
  ral.Real K;
  Result = new ral.Real[n];
  
  for(int i=n-1; i>=0; i--){
   Result[i] = Right[i];
   for(int j=i+1; j<n; j++){
     K = new ral.Real(Left[i][j]);
     K.mul(Result[j]);
     Result[i].sub(K);
   }
 }
 String res = "Результат:\n";
 for(int i=0; i<n; i++){
  res += "X"+i+" = "+Result[i].toString()+"\n";
 }
 
 return res;
 }
 
  public void BackWay2(ral.Real Result[]){
  //ral.Real Result[];
  ral.Real K;
  //Result = new ral.Real[n];
  
  for(int i=n-1; i>=0; i--){
   Result[i] = Right[i];
   for(int j=i+1; j<n; j++){
     K = new ral.Real(Left[i][j]);
     K.mul(Result[j]);
     Result[i].sub(K);
   }
 }
 
 //
 }
 
  private void DIVP(int stl, ral.Real mas[]){
    for(int i=0; i<n; i++){
     Left[i][stl].div(Left[stl+1][stl]);
     //System.out.println("s "+i);
     mas[i] = new ral.Real(Left[i][stl]);
    }
    
  }
  private void SUBP(int stl, ral.Real mas[]){
    ral.Real s1 = new ral.Real();
    for(int i=0; i<n; i++){//перебор столбцов
     if(i!=stl){
      for(int j=0; j<n; j++){
        s1 = new ral.Real(mas[j]);
        s1.mul(Left[j][i]);
        Left[j][i].sub(s1);
      }
     }
    }
  }
  
  public int getMk1(int k){
    ral.Real M[] = new ral.Real[n];
    int L2 = k-1;
    while(Left[k][L2].isZero()){
     L2--;
     if(L2==0)return 0;
    }
    
    if(L2!=(k-1)){
     ral.Real buf = new ral.Real();
     //менять строки
      for(int i=0; i<n; i++){
       buf = new ral.Real(Left[k-1][i]);
       Left[k-1][i] = new ral.Real(Left[L2][i]);
       Left[L2][i] = new ral.Real(buf);
      }
     //менять столбцы
      for(int i=0; i<n; i++){
       buf = new ral.Real(Left[i][k-1]);
       Left[i][k-1] = new ral.Real(Left[i][L2]);
       Left[i][L2] = new ral.Real(buf);
      }
    }
    
    DIVP(k-1, M);
    SUBP(k-1,M);
    
    return 1;
  }
  
  public void getMk2(int k, ral.Real result[][]){
   for(int i=0; i<n; i++){
    for(int j=0; j<n; j++){
     result[i][j] = new ral.Real();
     if(i==j) result[i][j] = new ral.Real(1);
    }
   }
   
   for(int s=0; s<n; s++){
    
    if(s==k-1){
     result[k-1][s] = new ral.Real(1);
     result[k-1][s].div(Left[k][k-1]);
    }
    else{
     result[k-1][s] = new ral.Real(Left[k][s]);
     result[k-1][s].div(Left[k][k-1]);
     result[k-1][s].neg();
    }
   }
  }
  
  public ral.Real LFUNC(ral.Real Lam){
   ral.Real fun = new ral.Real(Lam);
   ral.Real s1 = new ral.Real();
   fun.pow(n);
   for(int i=1; i<=n; i++){
    s1 = new ral.Real(Lam);
    s1.pow(n-i);
    s1.mul(Left[0][i-1]);
    fun.sub(s1);
   }
   s1 = new ral.Real("-1");
   s1.pow(n);
   fun.mul(s1);
   return fun;
  }
  
  public void Danil(){
   ral.Real Ms1[][] = new ral.Real[n][n];
   ral.Real Ms2[][] = new ral.Real[n][n];
   ral.Real MP[][] = new ral.Real[n][n];
   ral.Real MT[][] = new ral.Real[n][n];
   
   Mx = new ral.Real[n-1][n][n];
   
     for(int kr = n-1; kr>=1; kr--){
         
     //Получить матрицу M(k-1)    
     getMk2(kr, Ms1); 
     //Нахождение обратеой м-цы
     AMAtr(Ms1, MP, n);
     Trans(MP, MT, n);
     //M^-1*A*M
     MatMul(MT, Left, n, n, n, Ms2);
     MatMul(Ms2, Ms1, n, n, n, MT);
     
     for(int i=0; i<n; i++){
      for(int j=0; j<n; j++){
       Left[i][j] = new ral.Real(MT[i][j]);
       Mx[kr-1][i][j] = new ral.Real(Ms1[i][j]);
      }
     }
         
         
         
     }
   
     
     
    
    
   
      
     
   
   
  }
  
  public ral.Real DanKor(ral.Real A, ral.Real B, ral.Real Eps){
 ral.Real e11 = LFUNC(A);
  
 ral.Real xxx = new ral.Real(A);
 xxx.add(B);
 ral.Real yyy = new ral.Real("2.0");
 xxx.div(yyy);
 e11 = new ral.Real(xxx);//e11 = (A+B)/2
 xxx = new ral.Real(B);
 xxx.sub(A);
 if( xxx.greaterThan(Eps)){//(B-A)>Epsilon
   ral.Real fe = LFUNC(e11);
   ral.Real fb = LFUNC(B);
   fe.mul(fb);
   if(fe.lessThan(0)){//fe*fb<0
    A = e11;
   }
   else{
    B = e11;
   }
   xxx = new ral.Real(A);
   xxx.sub(B);
   xxx.div(yyy);
   e11 = xxx;//e11 = (a-b)/2
   return DanKor(A,B,Eps);
 }
    
    return e11;
  }
  
 
 
}
    
public void AMATr(gMatrix in, ral.Real Result[][]){
 System.out.println("AMATR Called");
 int N = in.n;
 gMatrix AMAT[];
 AMAT = new gMatrix[N];
 //Result = new ral.Real[N][N];
 
 for(int i=0; i<N; i++){
  System.out.println("Create System #"+i);
  AMAT[i] = new gMatrix();
  AMAT[i].ADD(N);
  for(int k1=0; k1<N; k1++){
   for(int k2=0; k2<N; k2++){
    AMAT[i].Left[k1][k2] = new ral.Real(in.Left[k1][k2]);
   }
  AMAT[i].Right[k1] = new ral.Real();
  }
  AMAT[i].Right[i] = new ral.Real(1);
  AMAT[i].Gaus();
  AMAT[i].BackWay2(Result[i]);
  
 }
 
 
}

public void Trans(ral.Real In[][], ral.Real Out[][], int n){
  for(int i=0; i<n; i++){
   for(int j=0; j<n; j++){
    Out[i][j] = new ral.Real(In[j][i]);
   }
  }
}

public void AMAtr(ral.Real in[][], ral.Real Result[][], int n){
 System.out.println("AMATR Called");
 int N = n;
 gMatrix AMAT[];
 AMAT = new gMatrix[N];
 //Result = new ral.Real[N][N];
 
 for(int i=0; i<N; i++){
  System.out.println("Create System #"+i);
  AMAT[i] = new gMatrix();
  AMAT[i].ADD(N);
  for(int k1=0; k1<N; k1++){
   for(int k2=0; k2<N; k2++){
    AMAT[i].Left[k1][k2] = new ral.Real(in[k1][k2]);
   }
  AMAT[i].Right[k1] = new ral.Real();
  }
  AMAT[i].Right[i] = new ral.Real(1);
  AMAT[i].Gaus();
  AMAT[i].BackWay2(Result[i]);
  
 }
 
 
}



  gMatrix Init;
  gMatrix Gau;
  int reGim = 0;
  int enterx = 0, entery = 0;
  
 public class GUI extends Canvas{
  gMatrix mat;
  
     public void paint(Graphics g){
       int height = g.getClipHeight();
       int width = g.getClipWidth();
       g.setColor(200, 200, 255);
       g.fillRect(0, 0, width, height);
       
       if(reGim==0) mat = new gMatrix(Init);
       else mat = new gMatrix(Gau);
       
       int hk = height/mat.n;
       int wk = width/(mat.n+2);
       
       g.setColor(200,0,0);
       g.fillRect(enterx*wk, entery*hk, wk, hk);
       
       
       g.setColor(50, 50, 50);
       for(int i=0; i<height; i+=hk){
        g.drawLine(0, i, wk*(mat.n), i);
        g.drawLine(wk*(mat.n+1), i, wk*(mat.n+2), i);
       }
       for(int j=0; j<width; j+=wk){
        g.drawLine(j, 0, j, hk*(mat.n));
       }
       
       for(int i=0; i<mat.n; i++){
          if(mat.Right[i].toString().length()>3) g.drawString(mat.Right[i].toString().substring(0, 4), wk*(mat.n+1)+wk/2, hk*i+hk/2-5, g.TOP|g.HCENTER);
          else g.drawString(mat.Right[i].toString(), wk*(mat.n+1)+wk/2, hk*i+hk/2-5, g.TOP|g.HCENTER);
         for(int j=0; j<mat.n; j++){
          if(mat.Left[i][j].toString().length()>3) g.drawString(mat.Left[i][j].toString().substring(0, 4), wk*j+wk/2, hk*i+hk/2-5, g.TOP|g.HCENTER);
          else g.drawString(mat.Left[i][j].toString(), wk*j+wk/2, hk*i+hk/2-5, g.TOP|g.HCENTER);
         }
       }
    
       
     }
     
   public void keyPressed(int KeyCode){
     switch(KeyCode){
         case -1:
             entery--;
             if(entery<0) entery = mat.n-1;
         break;
         case -2:
             entery++;
             if(entery == mat.n) entery = 0;
         break;
         case -3:
             enterx--;
             if(enterx<0) enterx = mat.n+1;
             if(enterx == mat.n) enterx--;
         break;
         case -4:
             enterx++;
             if(enterx == mat.n) enterx++;
             if(enterx == mat.n+2) enterx = 0;
         break;
         case -5:
             if(reGim == 0){
               ral.Real Z = new ral.Real();
               if(enterx<mat.n){
                   Z = new ral.Real(Init.Left[entery][enterx]);
               }
               else{
                   Z = new ral.Real(Init.Right[entery]);
               }
               ent = new TextBox("Введите значение", Z.toString() ,50, TextField.ANY);
               ent.addCommand(enter);
               ent.addCommand(cancel);
               ent.setCommandListener(cl);
               display.setCurrent(ent);
             }
         break;
     }
     repaint();
   }  
 }   
  
 GUI gui;
  
  
    public void startApp() {
       gui = new GUI();
       Init = new gMatrix();
       Init.ADD(2);
       enter = new Command("ввод",Command.OK, 1);
       cancel = new Command("отмена",Command.BACK, 1);
       Next1 = new Command("Мет. Гаусса",Command.SCREEN, 3);
       Next2 = new Command("Мет. Якоби",Command.SCREEN, 4);
       Next3 = new Command("Мет. Зейделя",Command.SCREEN, 5);
       Auto = new Command("заполнить",Command.SCREEN, 7);
       Exit = new Command("выход",Command.BACK, 1);
       Add = new Command("n++",Command.SCREEN, 1);
       Del = new Command("n--",Command.SCREEN, 2);
       Dan = new Command("Мет. Данил.",Command.SCREEN, 6);
       
       //Init.Left[3][5] = new ral.Real(18);
       cl = new MyCommandListener();
       display = Display.getDisplay(this);
       gui.addCommand(Exit);
       gui.addCommand(Add);
       gui.addCommand(Del);
       gui.addCommand(Next1);
       gui.addCommand(Next2);
       gui.addCommand(Next3);
       gui.addCommand(Auto);
       gui.addCommand(Dan);
       gui.setCommandListener(cl);
       display.setCurrent(gui);
    }
    
    public void pauseApp() {
    }
    
    public void destroyApp(boolean unconditional) {
        gui = null;
        Init = null;
        Gau = null;
        notifyDestroyed();
    }
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
    
     private class MyCommandListener implements CommandListener { 
public void commandAction(Command c, Displayable d) {

if (c == enter){
       System.out.println("Entered");
       if(enterx<Init.n){
         Init.Left[entery][enterx] = new ral.Real(ent.getString()); 
       }
       else{
         Init.Right[entery] = new ral.Real(ent.getString());
       }
       display.setCurrent(gui);
} 

if (c == cancel){
       display.setCurrent(gui);
}

if(c == Exit){
 gui = null;
 Init = null;
 Gau = null;
 notifyDestroyed();
}

if(c == Add){
 Init.ADD();
 enterx = 0;
 entery = 0;
 display.setCurrent(gui);
}

if(c == Del){
 Init.DEL();
 enterx = 0;
 entery = 0;
 display.setCurrent(gui);
}

if(c == Auto){
 Init = new gMatrix();
 Init.ADD(5);
 /*
 Init.Left[0][0] = new ral.Real(6);
 Init.Left[0][1] = new ral.Real(6);
 Init.Left[0][2] = new ral.Real(5);
 Init.Left[0][3] = new ral.Real(18);
 Init.Left[0][4] = new ral.Real(20);
 Init.Left[1][0] = new ral.Real(10);
 Init.Left[1][1] = new ral.Real(9);
 Init.Left[1][2] = new ral.Real(7);
 Init.Left[1][3] = new ral.Real(24);
 Init.Left[1][4] = new ral.Real(30);
 Init.Left[2][0] = new ral.Real(12);
 Init.Left[2][1] = new ral.Real(12);
 Init.Left[2][2] = new ral.Real(13);
 Init.Left[2][3] = new ral.Real(27);
 Init.Left[2][4] = new ral.Real(35);
 Init.Left[3][0] = new ral.Real(8);
 Init.Left[3][1] = new ral.Real(6);
 Init.Left[3][2] = new ral.Real(6);
 Init.Left[3][3] = new ral.Real(15);
 Init.Left[3][4] = new ral.Real(20);
 Init.Left[4][0] = new ral.Real(4);
 Init.Left[4][1] = new ral.Real(5);
 Init.Left[4][2] = new ral.Real(4);
 Init.Left[4][3] = new ral.Real(15);
 Init.Left[4][4] = new ral.Real(15);
 
 Init.Right[0] = new ral.Real(14);
 Init.Right[1] = new ral.Real(18);
 Init.Right[2] = new ral.Real(32);
 Init.Right[3] = new ral.Real(16);
 Init.Right[4] = new ral.Real(11);
 */
 
 Init.Left[0][0] = new ral.Real("3.5");
 Init.Left[0][1] = new ral.Real(5);
 Init.Left[0][2] = new ral.Real(4);
 Init.Left[0][3] = new ral.Real(1);
 Init.Left[0][4] = new ral.Real(21);
 Init.Left[1][0] = new ral.Real(1);
 Init.Left[1][1] = new ral.Real(3);
 Init.Left[1][2] = new ral.Real(0);
 Init.Left[1][3] = new ral.Real(1);
 Init.Left[1][4] = new ral.Real(11);
 Init.Left[2][0] = new ral.Real(2);
 Init.Left[2][1] = new ral.Real(12);
 Init.Left[2][2] = new ral.Real(9);
 Init.Left[2][3] = new ral.Real(7);
 Init.Left[2][4] = new ral.Real(36);
 Init.Left[3][0] = new ral.Real(3);
 Init.Left[3][1] = new ral.Real(8);
 Init.Left[3][2] = new ral.Real(9);
 Init.Left[3][3] = new ral.Real(2);
 Init.Left[3][4] = new ral.Real(27);
 Init.Left[4][0] = new ral.Real("6.4");
 Init.Left[4][1] = new ral.Real(0);
 Init.Left[4][2] = new ral.Real(4);
 Init.Left[4][3] = new ral.Real(-1);
 Init.Left[4][4] = new ral.Real(5);
 
}

if(c == Next1){
 Next11 = new Command("далее",Command.OK, 1);
 Gau = new gMatrix(Init);
 int res = Gau.Gaus();
 if(res == 1){
 reGim = 1;
 gui = new GUI();
 gui.addCommand(Next11);
 gui.setCommandListener(cl);
 }
 display.setCurrent(gui);
}

if(c == Dan){
 Dan2 = new Command("далее",Command.OK, 1);
 Gau = new gMatrix(Init);
 //int res = Gau.Gaus();
 Gau.Danil();
 //if(res == 1){
 reGim = 1;
 gui = new GUI();
 gui.addCommand(Dan2);
 gui.setCommandListener(cl);
 //}
 display.setCurrent(gui);
}


if(c == Next2){
 System.out.println("YAKOBI");
 Next11 = new Command("далее",Command.OK, 1);
  Gau = new gMatrix(Init);
 gMatrix G2 = new gMatrix(Init);
 ral.Real Ya[][] = new ral.Real[Gau.n][Gau.n];
 
 AMATr(G2, Ya);
 ral.Real d1 = new ral.Real("0.01");
 e = new ral.Real[Gau.n][Gau.n];
 ral.Real aYa[][] = new ral.Real[Gau.n][Gau.n];
 
 for(int i=0; i<Gau.n; i++){
  for(int h=0; h<Gau.n; h++){
    Random random = new Random();
    int rand = Math.abs(random.nextInt());
    //rand = rand/100000000;
    //rand = rand/10;
    //d1 = new ral.Real(rand);
    d1.div(1000);
    aYa[i][h] = new ral.Real(Ya[h][i]);
    aYa[i][h].sub(d1);
    e[i][h] = new ral.Real(d1);
    //d1.sub("");
    //System.out.print(""+ Ya[i][h]+" ");
  }
  //System.out.println();
 }
 
 
 
 
 MatMul(Init.Left, aYa, Gau.n, Gau.n, Gau.n, Gau.Left);
 ral.Real R1[][] = new ral.Real[Gau.n][1];
 ral.Real R2[][] = new ral.Real[Gau.n][1];
 
 for(int i=0; i<Gau.n; i++){
  R1[i][0] = new ral.Real(Gau.Right[i]);
  R2[i][0] = new ral.Real();
  System.out.println("!!!!!!!!!!!");
 }
 
 MatMul(aYa, R1, Gau.n, Gau.n, 1, R2);
 
 for(int i=0; i<Gau.n; i++){
  Gau.Right[i] = new ral.Real(R2[i][0]);
 }
 
 reGim = 1;
 //Gau = new gMatrix(G2);
 gui = new GUI();
 Next21 = new Command("Далее",Command.OK, 1);
 gui.addCommand(Next21);
 gui.setCommandListener(cl);
 //}
 display.setCurrent(gui);
}


if(c == Next3){
System.out.println("ZEIDEL");
 Next11 = new Command("далее",Command.OK, 1);
  Gau = new gMatrix(Init);
 gMatrix G2 = new gMatrix(Init);
 ral.Real Ya[][] = new ral.Real[Gau.n][Gau.n];
 
 AMATr(G2, Ya);
 ral.Real d1 = new ral.Real("0.01");
 e = new ral.Real[Gau.n][Gau.n];
 ral.Real aYa[][] = new ral.Real[Gau.n][Gau.n];
 
 for(int i=0; i<Gau.n; i++){
  for(int h=0; h<Gau.n; h++){
    //Random random = new Random();
    //int rand = Math.abs(random.nextInt());
    //rand = rand/100000000;
    //rand = rand/10;
    //d1 = new ral.Real(rand);
    d1.div(1000);
    aYa[i][h] = new ral.Real(Ya[h][i]);
    aYa[i][h].sub(d1);
    e[i][h] = new ral.Real(d1);
    //d1.sub("");
    //System.out.print(""+ Ya[i][h]+" ");
  }
  //System.out.println();
 }
 
 
 
 
 MatMul(Init.Left, aYa, Gau.n, Gau.n, Gau.n, Gau.Left);
 ral.Real R1[][] = new ral.Real[Gau.n][1];
 ral.Real R2[][] = new ral.Real[Gau.n][1];
 
 for(int i=0; i<Gau.n; i++){
  R1[i][0] = new ral.Real(Gau.Right[i]);
  R2[i][0] = new ral.Real();
  System.out.println("!!!!!!!!!!!");
 }
 
 MatMul(aYa, R1, Gau.n, Gau.n, 1, R2);
 
 for(int i=0; i<Gau.n; i++){
  Gau.Right[i] = new ral.Real(R2[i][0]);
 }
 
 reGim = 1;
 //Gau = new gMatrix(G2);
 gui = new GUI();
 Next31 = new Command("Далее",Command.OK, 1);
 gui.addCommand(Next31);
 gui.setCommandListener(cl);
 //}
 display.setCurrent(gui);
}


if(c== Dan2){
 Form form = new Form("Введите границы отрезка");
 Ret = new Command("вернуться",Command.OK, 1);
 
 X = new TextField[3];
 X[0] = new TextField("A=", "0", 10, TextField.ANY); 
 X[1] = new TextField("B=", "0", 10, TextField.ANY); 
 X[2] = new TextField("E=", "0.0001", 10, TextField.ANY); 
 for(int i=0; i<3; i++){
  form.append(X[i]);
 }
 
 Dan3 = new Command("вычислить",Command.OK, 1);
 form.addCommand(Exit);
 form.addCommand(Ret);
 form.addCommand(Dan3);
 form.setCommandListener(cl);
 display.setCurrent(form);
}

if(c==Next11){
 String Res = Gau.BackWay();
 Form form = new Form("Результат");
 Ret = new Command("вернуться",Command.OK, 1);
 form.append(Res);
 form.addCommand(Exit);
 form.addCommand(Ret);
 form.setCommandListener(cl);
 display.setCurrent(form);
}




if(c==Next21){
 Form form = new Form("Введите начальные приближения");
 Ret = new Command("вернуться",Command.OK, 1);
 
 X = new TextField[Gau.n+1];
 for(int i=0; i<Gau.n; i++){
  X[i] = new TextField("X"+i, "0.002", 10, TextField.ANY);
  form.append(X[i]);
 }
 X[Gau.n] = new TextField("E=", "0.0001", 10, TextField.ANY); 
 form.append("\n");
 form.append(X[Gau.n]);
 Next22 = new Command("вычислить",Command.OK, 1);
 form.addCommand(Exit);
 form.addCommand(Ret);
 form.addCommand(Next22);
 form.setCommandListener(cl);
 display.setCurrent(form);
}



if(c == Next31){
 Form form = new Form("Введите начальные приближения");
 Ret = new Command("вернуться",Command.OK, 1);
 
 X = new TextField[Gau.n+1];
 for(int i=0; i<Gau.n; i++){
  X[i] = new TextField("X"+i, "0.002", 10, TextField.ANY);
  form.append(X[i]);
 }
 X[Gau.n] = new TextField("E=", "0.0001", 10, TextField.ANY); 
 form.append("\n");
 form.append(X[Gau.n]);
 Next32 = new Command("вычислить",Command.OK, 1);
 form.addCommand(Exit);
 form.addCommand(Ret);
 form.addCommand(Next32);
 form.setCommandListener(cl);
 display.setCurrent(form);
}



if(c==Next22){
 //МЕТОД ЯКОБИ
 int k =0;
 ral.Real Epsilon = new ral.Real(X[Gau.n].getString());
 ral.Real x[][] = new ral.Real[Gau.n][1];
 ral.Real xk[][] = new ral.Real[Gau.n][1];
 ral.Real beta[][] = new ral.Real[Gau.n][1];
 for(int i=0; i<Gau.n; i++){
  beta[i][0] = new ral.Real(Gau.Right[i]);
  xk[i][0] = new ral.Real(X[i].getString());
  x[i][0] = new ral.Real(X[i].getString());
 }
 
 //System.out.println(""+beta[0][0]+" "+beta[1][0]);
 
 ral.Real eA[][] = new ral.Real[Gau.n][Gau.n];
 MatMul(e, Init.Left, Gau.n, Gau.n, Gau.n, eA);
 
 do{
  for(int i=0; i<Gau.n; i++){
   x[i][0] = new ral.Real(xk[i][0]);
  }
  MatMul(eA, x, Gau.n, 1, 1, xk);
  MatAdd(beta, xk, Gau.n, 1);
  //System.out.println(""+xk[0][0]+" "+xk[1][0]);
  k++;
 }while(MatMax(xk, x, Gau.n).greaterEqual(Epsilon));
 //ВЫВОД
 Form form = new Form("Результат");
 for(int i=0; i<Gau.n; i++){
  form.append("X("+i+")= "+xk[i][0].toString()+"\n");
 }
  form.append("k= "+k);
  form.addCommand(Exit);
  form.addCommand(Ret);
  form.setCommandListener(cl);
  display.setCurrent(form);
}



if(c==Next32){
 //МЕТОД ЗЕЙДЕЛЯ
 int k =0;
 ral.Real Epsilon = new ral.Real(X[Gau.n].getString());
 ral.Real x[][] = new ral.Real[Gau.n][1];
 ral.Real xk[][] = new ral.Real[Gau.n][1];
 ral.Real beta[][] = new ral.Real[Gau.n][1];
 for(int i=0; i<Gau.n; i++){
  beta[i][0] = new ral.Real(Gau.Right[i]);
  xk[i][0] = new ral.Real(X[i].getString());
  x[i][0] = new ral.Real(X[i].getString());
 }
 
 //System.out.println(""+beta[0][0]+" "+beta[1][0]);
 
 ral.Real eA[][] = new ral.Real[Gau.n][Gau.n];
 //5MatMul(e, Init.Left, Gau.n, Gau.n, Gau.n, eA);
 
 for(int i=0; i<Gau.n; i++){
  for(int j=0; j<Gau.n; j++){
    eA[i][j] = Gau.Left[i][j];
  }
 }
 
 
 do{
  for(int i=0; i<Gau.n; i++){
   x[i][0] = new ral.Real(xk[i][0]);
  }
  
  for(int i=0; i<Gau.n; i++){
   ral.Real SUM1 = new ral.Real();
   ral.Real SUM2 = new ral.Real();
   
   for(int j=0; j<i; j++){
    ral.Real S1 = new ral.Real(eA[i][j]);
    S1.div(eA[i][i]);
    S1.mul(xk[j][0]);
    SUM1.add(S1);
   }
   
   for(int j=i+1; j<Gau.n; j++){
    ral.Real S2 = new ral.Real(eA[i][j]);
    S2.div(eA[i][i]);
    S2.mul(x[j][0]);
    SUM2.add(S2);
   }
   
  
   
   
   
   
   xk[i][0] = new ral.Real(beta[i][0]);
   xk[i][0].div(eA[i][i]);
   xk[i][0].add(SUM1);
   xk[i][0].sub(SUM2);
  }
  System.out.println(""+xk[0][0]+" "+xk[1][0]);
  k++;
 }while(MatMax(xk, x, Gau.n).greaterEqual(Epsilon));
 //ВЫВОД
 Form form = new Form("Результат");
 for(int i=0; i<Gau.n; i++){
  form.append("X("+i+")= "+xk[i][0].toString()+"\n");
 }
  form.append("k= "+k);
  form.addCommand(Exit);
  form.addCommand(Ret);
  form.setCommandListener(cl);
  display.setCurrent(form);
}

    
    
    
    
  if(c == Dan3){
  Form form = new Form("Результат");
  ral.Real Rals[] = new ral.Real[3];
  for(int i=0; i<3; i++){
   Rals[i] = new ral.Real(X[i].getString());
  }
  ral.Real lam = Gau.DanKor(Rals[0], Rals[1], Rals[2]);
  form.append("Lambda: "+lam+"\n");
  form.append("Собственный вектор матрицы А: \n");
  
  ral.Real MulMatrix[][] = new ral.Real[Gau.n][Gau.n];
  ral.Real Mm2[][] = new ral.Real[Gau.n][Gau.n];
  
  for(int i=0; i<Gau.n; i++){
   for(int j=0; j<Gau.n; j++){
    Mm2[i][j] = new ral.Real(Mx[Gau.n-2][i][j]);
   // 
   }
  }
  
  for(int k=Gau.n-3; k>=0; k--){
   MatMul(Mm2, Mx[k], Gau.n, Gau.n, Gau.n, MulMatrix);
  // System.out.println("Yes");
        for(int i=0; i<Gau.n; i++){
         for(int j=0; j<Gau.n; j++){
          Mm2[i][j] = new ral.Real(MulMatrix[i][j]);
         }
        }
        
  }
  
  ral.Real Result[] = new ral.Real[Gau.n];
  ral.Real Prob[][] = new ral.Real[Gau.n][1];
  
  Prob[Gau.n-1][0] = new ral.Real(1);
  for(int h=Gau.n-2; h>=0; h--){
   Prob[h][0] = new ral.Real(lam);
   Prob[h][0].pow(Gau.n-h-1);
  }
  //System.out.println("Yes1111111");
  
  ral.Real Mm23[][] = new ral.Real[Gau.n][1];
  
  MatMul(MulMatrix, Prob, Gau.n, Gau.n, 1, Mm23);
  
  for(int i=0; i<Gau.n; i++){
   form.append("X["+i+"] = "+ Mm23[i][0]+"\n");
  }
  
  
  
  if(RetDan == null) RetDan = new Command("новый интервал",Command.SCREEN, 1);
  form.addCommand(Exit);
  form.addCommand(Ret);
  form.addCommand(RetDan);
  form.setCommandListener(cl);
  display.setCurrent(form);
  }  
    
    
    
if(c==RetDan){
 Form form = new Form("Введите границы отрезка");
 Ret = new Command("вернуться",Command.OK, 1);
 
 X = new TextField[3];
 X[0] = new TextField("A=", "0", 10, TextField.ANY); 
 X[1] = new TextField("B=", "0", 10, TextField.ANY); 
 X[2] = new TextField("E=", "0.0001", 10, TextField.ANY); 
 for(int i=0; i<3; i++){
  form.append(X[i]);
 }
 
 Dan3 = new Command("вычислить",Command.OK, 1);
 form.addCommand(Exit);
 form.addCommand(Ret);
 form.addCommand(Dan3);
 form.setCommandListener(cl);
 display.setCurrent(form);
}  

    
    
    
    
if(c==Ret){
       reGim = 0;
       gui = new GUI();
       gui.addCommand(Exit);
       gui.addCommand(Add);
       gui.addCommand(Del);
       gui.addCommand(Next1);
       gui.addCommand(Next2);
       gui.addCommand(Next3);
       gui.addCommand(Auto);
       gui.addCommand(Dan);
       gui.setCommandListener(cl);
       display.setCurrent(gui);
}

}

}
    
    
    
    
    
    
    
    
    
    
    
    
    
}
Соседние файлы в папке Обработка