Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.ComponentModel;
- using System.Data;
- using System.Drawing;
- using System.Linq;
- using System.Text;
- using System.Windows.Forms;
- namespace v0._1
- {
- public partial class Form1 : Form
- {
- public Form1()
- {
- InitializeComponent();
- }
- /*
- -1/h^2(G[i+1,j]-2G[i,j]+G[i-1,j])
- -1/(h*r[i])(G[i+1,j]-G[i-1,j])
- -1/(k^2r[i]^2)(G[i,j+1]-2G[i,j]+G[i,j-1])
- -cot(t[j])/(2kr[i])(G[i,j+1]-G[i,j-1])+V[i,j]G[i,j]
- =Em(M,N)G[i,j]
- h=R/(M+1) k=pi/(2N+2)
- r[i]=(i-1)h t[j]=(j-1)k; 1=<i=<M+2, 1=<j=<N;
- formula se moze zapisati kao
- Em(M,N)G[i,j]=A[i,j]*G[i,j] + B[i,j]*G[i-1,j] + C[i,j]*G[i+1,j]
- + D[i,j]*G[i,j-1] + F[i,j]*G[i,j+1]
- A[i,j]= 2/h^2+2/(k^2r[i]^2)+V[i,j]
- B[i,j]= -1/h^2+1/(h*r[i])
- C[i,j]= -1/h^2-1/(h*r[i])
- D[i,j]= -1/(k^2r[i]^2)+cot(t[j])/(2kr[i])
- F[i,j]= -1/(k^2r[i]^2)-cot(t[j])/(2kr[i])
- V[i,j]= m*gama+m^2/(r[i] sin(t[j]))^2+(gama/2)^2 (r[i] sin(t[j]))^2-2/r[i]
- */
- private void Form1_Load(object sender, EventArgs e)
- {
- }
- private void button1_Click(object sender, EventArgs e)
- {
- double R = Convert.ToDouble(textBox1.Text); //poluprecnik QODa
- double gama=Convert.ToDouble(textBox4.Text); //jacina magnetnog polja
- double m=Convert.ToDouble(textBox5.Text); //magnetni kvantni broj
- int N = Convert.ToInt32(textBox2.Text);
- int M = Convert.ToInt32(textBox3.Text); //dimenzije
- double h = R / (M + 1); // korak za r
- double k = Math.PI / (2 * N + 2); // korak za k
- double[] r = new double[M];
- double[] t = new double[N];
- for (int i = 1; i < M+3; i++)
- {
- r[i]=(i-1)*h;
- }
- for (int j = 1; j < N+3; j++)
- {
- t[j] = (j - 1) * k;
- }
- //Clanovi: V, A, B, C, D, F
- double[,] V = new double[M, N];
- for (int i = 1; i < M+3; i++)
- {
- for (int j = 1; j < N+3; j++)
- {
- V[i, j] = m * gama + Math.Pow(m, 2) / Math.Pow((r[i] * Math.Sin(t[j])), 2) + Math.Pow((gama * r[i] * Math.Sin(t[j]) / 2), 2) - 2 / r[i];
- j++;
- }
- i++;
- }
- double[,] A = new double[M, N];
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- A[i, j] = 2 / Math.Pow(h, 2) + 2 / Math.Pow(k * r[i], 2) + V[i, j];
- j++;
- }
- i++;
- }
- double[,] B = new double[M, N];
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- B[i, j] = -1 / Math.Pow(h, 2) + 1 / (h * r[i]);
- j++;
- }
- i++;
- }
- double[,] C = new double[M, N];
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- C[i, j] = -1 / Math.Pow(h, 2) - 1 / (h * r[i]);
- j++;
- }
- i++;
- }
- double[,] D = new double[M, N];
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- D[i, j] = -1 / Math.Pow(k * r[i], 2) + 1 / (Math.Tan(t[j]) * 2 * k * Math.Pow(r[i], 2));
- j++;
- }
- i++;
- }
- double[,] F = new double[M, N];
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- D[i, j] = -1 / Math.Pow(k * r[i], 2) - 1 / (Math.Tan(t[j]) * 2 * k * Math.Pow(r[i], 2));
- j++;
- }
- i++;
- }
- // Matrica Lambda L
- double[,] L = new double[M * N, M * N];
- //postavljanje na 0
- for (int i = 1; i < M + 3; i++)
- {
- for (int j = 1; j < N + 3; j++)
- {
- L[i, j] = 0;
- j++;
- }
- i++;
- }
- //metoda za invernzne koordinate
- //postavljanje clanova
- {
- for (int i = 1; i < M+3; i++)
- {
- int p = 0; int q = 0;
- L[i, i] = A[i, i];
- L[i, i - 1] = B[p, q];
- L[i, i + 1] = C[p, q];
- L[i, i - N] = D[p, q];
- L[i, i + N] = F[p, q];
- }
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement