Katea monoatomiko lineal baten oszilazioak

prev.gif (1231 bytes)home.gif (1232 bytes)next.gif (1211 bytes)

Oszilazioak

Osziladore akoplatuak
Bi akoplatuta
Hiru akoplatuta
marca.gif (847 bytes)Katea monoatomikoa
Bibrazioen
modu normalak
Katea diatomikoa
Bi malgukitan
eskegitako hagatxoa
Wilberforce pendulua
Pendulu bikoitza
Malguki-Pendulua
Oszilazioetatik
uhinetara
Luzera ezberdineko
pendulu ez akoplatuak
Higiduraren ekuazioak

Bibrazioaren modu normalak

Kasu bereziak

Saiakuntza

Dispertsio erlazioa

Programazio-kodea

 

Hiru osziladore akoplatuta aztertu ondoren, azter ditzagun orokortze gisa, malgukiez eta partikulez osatutako katea luze baten oszilazio-modu normalak. Adibide honek argi erakusten ditu muturretatik lotuta dagoen soka baten bibrazio-modu normalak, uhin geldikorrak deiturikoak.

Demagun N partikuladun partikula-multzo bat: m1, m2, m3…mN-1, mN  masadunak, N+1 malgukiez lotuta: k0, k1, k2, k3, … kN-1, kN, irudiak erakusten duen bezala.

 

Higiduraren ekuazioak

Partikula bakoitzak bi indar jasaten ditu: ezkerreko malgukiak eragiten diona eta eskumakoak eragiten diona. Irudiak erakusten ditu lehenak (m1), i-garrenak (mi) eta N-garrenak (mN) jasaten dituzten indarrak:

Laburtuz, partikulen higidura-ekuazioak honela idatz daitezke:

Bila ditzagun honelako soluzioak:

xi=Aicos(ωt)

Partikulak hasieran, t=0 aldiunean pausagunean baldin badaude eta x0i posizioan, orduan hasierako faseak π/2 dira guztiak.

Eta xi posizioaren bigarren deribatua kalkulatzen badugu t denborarekiko:

Honako ekuazio-sistema homogeneoa lortzen da:

Eta matrize gisa adieraz daiteke:

Modu sinbolikoan matrizeak honela adieraz daitezke: M·X= ω2X,  eta hemen X zutabe-bektorea da,  A1, A2... AN koefiziente ezezagunek osatzen dutena.

Bibrazioen modu normalak kalkulatzen dira ondoko matrizearen determinantea zerora berdinduz: |M- ω2I|=0, eta hemen I  matrize unitatea da.

ω2-ren menpekoa den N-garren graduko polinomioaren soluzioak M matrizearen balio propioak dira. Bektore propioak berriz, maiztasun horietako bakoitzarentzat, Ai koefizienteen balioak dira.

Bestela, ωj maiztasun normal bakoitzarentzat, modu normalen Ai anplitudeak  honako errepikapen-erlazioa erabilita ere kalkula daitezke:

  • Lehen modu normalarentzat (ω1 maiztasuna), kalkulatzen dira A2, A3…. AN anplitudeak, denak A1 anplitudearen menpe, eta honela izendatuko ditugu: A11, A21, A31… AN1. Izan ere, balio horiek guztiak ω21 balio propioari dagokion bektore propioaren balioak dira.

  • j-garren modu normalarentzat (ωj maiztasuna) kalkulatzen dira A2, A3…. AN anplitudeak, denak A1 anplitudearen menpe, eta honela izendatuko ditugu: A1j, A2j, A3j… ANj. Izan ere, balio horiek guztiak ω2j balio propioari dagokion bektore propioaren balioak dira.

  • Azken modu normalarentzat (ωN maiztasuna) kalkulatzen dira A2, A3…. AN anplitudeak, denak A1 anplitudearen menpe, eta honela izendatuko ditugu: A1N, A2N, A3N… ANN. Izan ere, balio horiek guztiak ω2N balio propioari dagokion bektore propioaren balioak dira.

Partikula soilen higidurak

Partikula soil bakoitzaren higidura izango da, bibrazio-modu guztien gainezarmena:

x1=A11cos(ω1·t)+A12cos(ω2·t)+...A1N·cos(ωN·t)
x2
=A21cos(ω1·t)+A22cos(ω2·t)+....A2N·cos(ωN·t)
...........
xN
=AN1cos(ω1·t)+AN2cos(ω2·t)+....ANN·cos(ωN·t)

Hasierako baldintzetatik (t=0 aldiuneko N posizioak eta N abiadurak) koefiziente guztiak determinatzen dira: A11,A12.... A1N  Demagun partikulen posizioak honakoak direla x10, x20, x30,...xN0  eta abiadura guztiak nuluak, vi0 =0.

Bibrazio-modu normalak

  • Bibrazioaren lehen modu normala (ω1) lortzen da honako baldintzetan: A12=A13=…A1N=0 eta A11≠0

Orduan partikulen posizioak:

x1=A11cos(ω1·t)
x2
=A21cos(ω1·t)
...........

xN
=AN1cos(ω1·t)

Hemen A11, A21, ...AN1 dira ω21 balio propioari dagokion bektore propioaren osagaiak.

  • Bibrazioaren j-garren modu normala (ωj) lortzen da honako baldintzetan: A11=A13=…A1N=0 eta A1j≠0

Orduan partikulen posizioak:

x1=A1jcos(ωj·t)
x2
=A2jcos(ωj·t)
...........

xN
=ANjcos(ωj·t)

Hemen A1j, A2j, ...ANj dira ω2j balio propioari dagokion bektore propioaren osagaiak.

Orain arte planteamendu orokorra formulatu dugu, baina badaude zenbait kasu berezi eta interesgarri.

Kasu bereziak

Kasu interesgarrienetako bat da, masa guztiak berdinak direnean, m0=m1=m2=m3, …=mN-1=mN=m,

eta malguki guztiak berdinak direnean, k0=k1=k2=k3, …=kN-1=kN=k,

M matrizea simetrikoa da eta kalkulatu behar dira balio propioak (ω2) eta bektore propioak, esaterako Jacobi-ren metodoaz (ikus ezazu programazio kodea)

Adibideak:

Higiduraren ekuazioak:

Bila ditzagun itxura honetako soluzioak:

x1=A1cos(ωt), x2=A2cos(ωt)

Matrize gisa, ekuazio-sistema hori honela idazten da:

Bibrazio-modu normalen maiztasunak (ω2) matrize karratu horren balio propioak dira eta bektore propioak bibrazio-modu normalen anplitudeak:

Balio propioak, ω2

Bektore propioak

k/m

(A11, A11)

3k/m

(A12, -A12)

Azkenik, A11 eta A12 koefizienteak hasierako baldintzetatik determinatzen dira.

Hona hemen higiduraren ekuazioak:

Bila ditzagun itxura honetako soluzioak:

x1=A1cos(ωt), x2=A2cos(ωt), x3=A3cos(ωt)

Matrize gisa, ekuazio-sistema hori honela idazten da:

Bibrazio-modu normalen maiztasunak (ω2) matrize karratu horren balio propioak dira eta bektore propioak bibrazio-modu normalen anplitudeak:

Balio propioak, ω2

Bektore propioak

(A12 , 0, -A12)

Azkenik, A11, A12 eta A13 koefizienteak hasierako baldintzetatik determinatzen dira.

  • Lau partikulaz osatutako sistema, N=4

Hona hemen higiduraren ekuazioak:

Bila ditzagun itxura honetako soluzioak:

x1=A1cos(ωt), x2=A2cos(ωt), x3=A3cos(ωt), x4=A4cos(ωt)

Matrize gisa, ekuazio-sistema hori honela idazten da:

Bibrazio-modu normalen maiztasunak (ω2) matrize karratu horren balio propioak dira eta bektore propioak bibrazio-modu normalen anplitudeak:

Balio propioak, ω2

Bektore propioak

Azkenik, A11, A12, A13 eta A14 koefizienteak hasierako baldintzetatik determinatzen dira.

Saiakuntza

Finkotzat hartzen dira:

  • Partikulen masak, m=1 kg

  • Malgukien konstante elastikoak, k=1 N/m

Aukeran idatz daiteke:

  • Partikula kopurua, N , dagokion kontrolean idatziz.

Berria botoia sakatu.

Lehenik, partikula-multzoa bibratzen ikusten da, lehen bibrazio-modu normalean. Goiko eta ezkerreko erpinean maiztasun angeluarra idatziz erakusten da: ω1.

Hurrengoa>> izeneko botoia sakatuz hurrengo bibrazio-modu normala ikusten da,  ω2, eta behin eta berriz sakatuz, ω3 4 , … etab.

Aurrekoa<< izeneko botoia sakatuz aurreko bibrazio-modu normala ikusten da.

Modu normalen kopurua eta partikula-kopurua beti dira berdinak.

                  

 

Dispertsio-erlazioa

Ondorengo irudiak erakusten ditu N partikula, m masadunak, N+1 malgukiekin lotuta, denak k konstantedunak k, eta bi muturrak finko. Demagun oreka-posizioan partikulen arteko separazioa a dela.

Demagun t aldiune jakin batean 1. partikula x1 distantzia desplazatzen dela, 2. partikula x2 distantzia desplazatzen dela eta i-garren partikula xi distantzia desplazatzen dela, eta abar.

i-garren partikularen higidura-ekuazioa honela idazten da:

Demagun sistema oszilatzen ari dela w maiztasuneko bibrazio-modu batean. Partikula guztiek H.H.S deskribatzen dute, w maiztasun berarekin, baina Ai anplitudeak kalkulatzea falta zaigu:

xi=Ai·cos(w t)

Adierazpen hori ordezkatzen badugu partikula horren higidura-ekuazio diferentzialean, erlazio bat lortzen da i+1, i, eta i-1 partikulen anplitudeen artean.

Bila dezagun itxura honetako soluzio bat:

Ai=A·sin(K·ia)

hemengo K uhin zenbakia da, K=2p/l, eta orduan:

sin(Kia+Ka)+ sin(Kia-Ka)= sin(Kia)(2-2/k)

Ekuazio horrek erlazionatzen ditu bibrazio-moduaren w maiztasuna eta K uhin zenbakia, eta dispertsio-erlazio deritzo.

Ondoko irudiak erakusten du nola aldatzen den ω  maiztasun angeluarra, K uhin zenbakiaren menpe eta (-π/a, +π/a) tartean.

 

Programazio-kodea

public class Jacobi {
//el vector d son los valores propios
//Las columnas de la matriz v son los vectores propios
//devuelve el número de iteraciones
static int calcula(double[][] a, int n, double[] d, double[][] v) {
//Computes all eigenvalues and eigenvectors of a real symmetric matrix a[1..n][1..n]. On
//output, elements of a above the diagonal are destroyed. d[1..n] returns the eigenvalues of a.
//v[1..n][1..n] is a matrix whose columns contain, on output, the normalized eigenvectors of
//a. nrot returns the number of Jacobi rotations that were required.

	int j,iq,ip,i;
	double tresh,theta,tau,t,sm,s,h,g,c;
	double[] b=new double[n]; //b=vector(1,n);
	double[] z=new double[n]; //z=vector(1,n);
	for (ip=0;ip<n;ip++) { //Initialize to the identity matrix.
		for (iq=0;iq<n;iq++) v[ip][iq]=0.0;
		v[ip][ip]=1.0;
	}
	for (ip=0;ip<n;ip++) { //Initialize b and d to the diagonal of a.
		b[ip]=d[ip]=a[ip][ip];
		z[ip]=0.0; //This vector will accumulate terms of the form tapq as in equation (11.1.14).
	}
	int nrot=0;
	for (i=1;i<=50;i++) {
		sm=0.0;
		for (ip=0;ip<=n-2;ip++) { //Sum o -diagonal elements.
			for (iq=ip+1;iq<n;iq++)
				sm += Math.abs(a[ip][iq]);
		}
		if (sm == 0.0) { 
//The normal return, which relies on quadratic convergence to machine underflow.
			return nrot;
		}
		if (i < 4)
			tresh=0.2*sm/(n*n);// ...on the rst three sweeps.
		else
			tresh=0.0; //...thereafter.
		for (ip=0;ip<n-1;ip++) {
			for (iq=ip+1;iq<n;iq++) {
				g=100.0*Math.abs(a[ip][iq]);
//After four sweeps, skip the rotation if the o -diagonal element is small.
				if (i > 4 && (float)(Math.abs(d[ip])+g) == (float)Math.abs(d[ip]) 
					&& (float)(Math.abs(d[iq])+g) == (float)Math.abs(d[iq]))
					a[ip][iq]=0.0;
				else if (Math.abs(a[ip][iq]) > tresh) {
					h=d[iq]-d[ip];
					if ((float)(Math.abs(h)+g) == (float)Math.abs(h))
						t=(a[ip][iq])/h; // t = 1=(2 )
					else {
						theta=0.5*h/(a[ip][iq]); //Equation (11.1.10).
						t=1.0/(Math.abs(theta)+Math.sqrt(1.0+theta*theta));
						if (theta < 0.0) t = -t;
					}
					c=1.0/Math.sqrt(1+t*t);
					s=t*c;
					tau=s/(1.0+c);
					h=t*a[ip][iq];
					z[ip] -= h;
					z[iq] += h;
					d[ip] -= h;
					d[iq] += h;
					a[ip][iq]=0.0;
					for (j=0;j<=ip-1;j++) { //Case of rotations 1 j < p.
						g=a[j][ip];
						h=a[j][iq];
						a[j][ip]=g-s*(h+g*tau);
						a[j][iq]=h+s*(g-h*tau);
					}
					for (j=ip+1;j<=iq-1;j++) { //Case of rotations p < j < q.
						g=a[ip][j];
						h=a[j][iq];
						a[ip][j]=g-s*(h+g*tau);
						a[j][iq]=h+s*(g-h*tau);
					}
					for (j=iq+1;j<n;j++) { //Case of rotations q < j n.
						g=a[ip][j];
						h=a[iq][j];
						a[ip][j]=g-s*(h+g*tau);
						a[iq][j]=h+s*(g-h*tau);
					}
					for (j=0;j<n;j++) {
						g=v[j][ip];
						h=v[j][iq];
						v[j][ip]=g-s*(h+g*tau);
						v[j][iq]=h+s*(g-h*tau);
					}
					++nrot;
				}
			}
		}
		for (ip=0;ip<n;ip++) {
			b[ip] += z[ip];
			d[ip]=b[ip]; //Update d with the sum of tapq,
			z[ip]=0.0; //and reinitialize z.
		}
	}
	return nrot;
}
}
//Valores y vectores propios de la matriz  M
	double N=3;	
	double[] k=new double[N+1];
	double[] m=new double [N+1];
	for(int i=0; i<k.length; i++){
		k[i]=1.0;
		m[i]=1.0;
	}
	double[][] matrix=new double[N][N];
	for(int i=0; i<N; i++)
		for(int j=0; j<N; j++)
			matrix[i][j]=0.0;

	matrix[0][0]=(k[0]+k[1])/m[1];
	matrix[0][1]=-k[1]/m[1];
	for(int i=1; i<N-1; i++){
		matrix[i][i-1]=-k[i]/m[i+1];
		matrix[i][i]=(k[i]+k[i+1])/m[i+1];
		matrix[i][i+1]=-k[i+1]/m[i+1];
	}
	matrix[N-1][N-1]=(k[N-1]+k[N])/m[N];
	matrix[N-1][N-2]=-k[N-1]/m[N];
	double[] valores=new double[N];
	double[] vectores=new double[N][N];
	Jacobi.calcula(matrix, N, valores, vectores);
	ordenar(valores, vectores); 
	System.out.println("valores y vectores propios");
	for(int i=0; i<N; i++){
		System.out.print(valores[i]+"\t");
	}
	System.out.println();
	for(int i=0; i<N; i++){
		System.out.println();
		for(int j=0; j<N; j++)
		System.out.print(vectores[i][j]+"\t");
	} 
private void ordenar(double[] x, double[][] mat){
	double aux;
	double[] vAux=new double[x.length];
	for(int i=0; i<x.length-1; i++){
		for(int j=i+1; j<x.length; j++){
			if(x[i]>x[j]){
				aux=x[j];
				for(int k=0; k<x.length; k++)
					vAux[k]=mat[k][j];
				x[j]=x[i];
				for(int k=0; k<x.length; k++)
					mat[k][j]=mat[k][i];
				x[i]=aux;
				for(int k=0; k<x.length; k++)
					mat[k][i]=vAux[k];
			}
		}
	}
}

Press W. H., Teukolsky S. A., Vetterling W. T., Flannery B. P. Numerical Recipes in C, Second edition,  Eigensystems. Jacobi Transformations of a Symmetric Matrix, Chapter 11º. pp. 463-469. Cambridge University Press.

OHARRA: Orri honen autoreak erreferentzia horretako kodea (C lengoaian) Java lengoaiara egokitu du.