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