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

chiselni1 / chiselni1 / src / thermo

.java
Скачиваний:
8
Добавлен:
02.03.2016
Размер:
3.99 Кб
Скачать
import java.util.Scanner;


public class thermo {

	/**
	 * @param args
	 */
	private double[][] m, system;
	private double h, tau;
	private int n=0,k=0;
	private double u(double x, double t) {  // функція
		return Math.exp(-x+1)/Math.sqrt(1+x+t*t);
	}
	private double ux0(double x) { // u(x,0)
		return Math.exp(-x+1)/Math.sqrt(1+x);
	}
	private double u0t(double t) { // u(0,t)
		return Math.E/Math.sqrt(1+t*t);
	}
	private double u1t(double t) { // u(1,t)
		return 1/Math.sqrt(2+t*t);
	}
	private double f(double x, double t) {
		return ((Math.exp(x+t)*(-t+1))/Math.pow(1+x+t*t, 1.5))-0.75*(Math.exp(x+t)/Math.pow(1+x+t*t, 2.5));
	}
	public void javna() {
		for(int i=1; i<=n-2; i++) {
			for(int j=0; j<=k-2; j++) {
				m[i][j+1]=m[i][j]+(tau*(m[i+1][j]-2*m[i][j]+m[i-1][j])/h*h)+f(i*h, j*tau);
			}
		}
	}
	public void setN(int value) { // X
		this.n=value;
		
		h=1.0/(n-1);	
		
		System.out.println("h="+h);
	}
	public void setK(int value) { // T
		this.k=value;
		
		tau=1.0/(n-1);	
		
		System.out.println("tau="+tau);
	}
	public void setAddend(double s) {
		tau=(h*h/2)+s;
		System.out.println("tau="+tau);
		k=(int)((1/tau)+1);
		System.out.println("k="+(k));		
		tau=1.0/(k-1);
		
	}
	private void buildBasicMatrix() {
		m=new double[n][k];
		for(int j=0; j<=k-1; j++) {
			m[0][j]=u0t(j*tau);
			m[n-1][j]=u1t(j*tau);
		}
		for(int i=0; i<=n-1; i++) {
			m[i][0]=ux0(i*h);
		}
	}
	private void  buildSystemForJplus1(int j) {
		this.system=new double[n][n+1];
		double gamma=tau/(h*h);	
		for(int i=1; i<=n-2; i++) {
			for(int q=1; q<=n-2; q++) {
				this.system[i][q]=0;
			}
		}
		for(int i=1; i<=n-2; i++) {			
					this.system[i][i-1]=gamma;
					this.system[i][i]=1-2*gamma;
					this.system[i][i+1]=gamma;
					this.system[i][n]=h*h*gamma*f(h*i,tau*j);				
			} 
		
		system[0][0]=1;
		system[0][n]=m[0][j+1];
		system[n-1][n-1]=1;
		system[n-1][n]=m[n-1][j+1];
	}
	private void makeZeroUnderiiInSystem(int i){
		system[i][i+1]=system[i][i+1]/system[i][i];
		system[i][n]=system[i][n]/system[i][i];
		system[i][i]=1;
		
		double coef=-system[i+1][i];
		
		system[i+1][i]=system[i+1][i]+system[i][i]*coef;
		system[i+1][i+1]=system[i+1][i+1]+system[i][i+1]*coef;
		system[i+1][n]=system[i+1][n]+system[i][n]*coef;
	}
	private double[] solveSystem() {
		for(int i=0; i<=n-2; i++ ) {
			makeZeroUnderiiInSystem(i);
		}
		return null;
	}
	public static void readMatrix() {
		Scanner s= new Scanner(System.in);
		System.out.print("n=");
		int n=s.nextInt();
		System.out.print("m=");
		int m=s.nextInt();
		double[][] a=new double[n][m];
		for(int i=0; i<=n-1; i++) {
			for(int j=0; j<=m-1; j++) {
				System.out.print(i+", "+j);
				a[i][j]=s.nextDouble();
			}
		}
		for(int i=0; i<=n-1; i++) {
			System.out.println();
			for(int j=0; j<=m-1; j++) {
				System.out.print(a[i][j]+"\t");
			}
		}
		s.close();
	}
	public void printMatrix() {
		
		System.out.print(" "+"\t");
		for(int j=0; j<=k; j=j+1) {
			System.out.print(j+"\t");			
		}
		System.out.println();
		System.out.print(" "+"\t");
		for(int j=0; j<=k; j=j+1) {
			System.out.print("-----"+"\t");			
		}		
		for(int i=0; i<=n-1; i++) {
			System.out.println();
			System.out.print(i+"|"+"\t");
			for(int j=0; j<=k; j=j+1) {
				//System.out.printf("%10,10f", m[i][j]);
				//System.out.print(String.format("%.3f", Math.abs(m[i][j]-u(h*i, tau*j)))+"\t");
				System.out.print(String.format("%.3f", system[i][j])+"\t");
		
				
			}
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		thermo t= new thermo();
		Scanner s=new Scanner(System.in);
		System.out.print("N=");
		t.setN(s.nextInt());
		t.setK(t.n);
		
		t.buildBasicMatrix();
		t.buildSystemForJplus1(0);
		System.out.println("do peretv");
		t.printMatrix();
		System.out.println("pisla peretv");
		t.solveSystem();
		t.printMatrix();
		s.close();
	}

}