Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Обработка / gaus
.java/*
* 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);
}
}
}
}
Соседние файлы в папке Обработка