Palombo Capítulo 8. Método de Rayleigh-Ritz · 170 Grupo : Gustavo de Souza Routman; Luís...

24
170 Grupo : Gustavo de Souza Routman; Luís Fernando Hachich de Souza; Alex Pascoal Palombo Capítulo 8. Método de Rayleigh-Ritz 8.1. Introdução Nos problemas de aproximação por diferenças finitas, para aproximar a solução para um problema de valor limite (borda), nós trocamos a operação contínua de diferenciação por operações de discretização de diferenças finitas. O método Raileigh-Ritz ataca o problema de uma forma diferente. O problema de valor limite é primeiramente reformulado para um problema de escolha. Entre todo o conjunto de funções diferenciáveis que satisfazem as condições de limite, escolhe-se as funções que minimizam uma certa integral. Então, o conjunto de funções viáveis fica reduzido, para resultar em uma solução para o problema de minimização e, consequentemente, numa solução para o problema de valor limite. 8.2. Motivação Um importante problema linear com valor limite de dois pontos na análise “beam-stress” é dada pela equação diferencial (1.32) - + = d dx px dy dx qxy f x () () () para 0 1 x , com as condições limites (1.33) y y ( ) ( ) 0 1 0 = = .

Transcript of Palombo Capítulo 8. Método de Rayleigh-Ritz · 170 Grupo : Gustavo de Souza Routman; Luís...

170

Grupo : Gustavo de Souza Routman; Luís Fernando Hachich de Souza; Alex Pascoal

Palombo

Capítulo 8. Método de Rayleigh-Ritz

8.1. Introdução

Nos problemas de aproximação por diferenças finitas, para aproximar a solução

para um problema de valor limite (borda), nós trocamos a operação contínua de

diferenciação por operações de discretização de diferenças finitas.

O método Raileigh-Ritz ataca o problema de uma forma diferente. O problema de

valor limite é primeiramente reformulado para um problema de escolha. Entre todo o

conjunto de funções diferenciáveis que satisfazem as condições de limite, escolhe-se as

funções que minimizam uma certa integral. Então, o conjunto de funções viáveis fica

reduzido, para resultar em uma solução para o problema de minimização e,

consequentemente, numa solução para o problema de valor limite.

8.2. Motivação

Um importante problema linear com valor limite de dois pontos na análise

“beam-stress” é dada pela equação diferencial

(1.32) − ���

��� + =d

dxp x

dydx

q x y f x( ) ( ) ( ) para 0 1≤ ≤x ,

com as condições limites

(1.33) y y( ) ( )0 1 0= = .

171

Esta equação diferencial descreve o desvio y x( ) em um raio de extensão com

uma secção de cruzamento representada por q x( ) . Este desvio é devido às tensões

p x( ) e f x( ) .

Na discussão seguinte assumiremos p C∈ 1 0 1[ , ] e q f C, [ , ]∈ 0 1 .Mais adiante,

exigimos que lá exista uma constante δ > 0 tal como

p x( ) ≥ >δ 0 para 0 1≤ ≤x

e que q x( ) ≥ 0 para 0 1≤ ≤x .

Essas suposições são suficientes para garantir que o problema com o valor limite

(1.32) e (1.33) tenha uma solução única.

Como no caso de muitos problemas com valor limite que descrevem um

fenômeno físico, a solução para equação raio satisfaz uma propriedade variante. O

princípio variante para a equação raio é fundamental para o desenvolvimento do método

Rayleigh-Ritz e caracteriza a solução para a equação de raio como a função que minimiza

uma certa integral em todas as funções em C02 0 1[ , ] , o conjunto destas funções u em

C2 0 1[ , ] com a propriedade que u u( ) ( )0 1 0= = . O teorema seguinte dá a

caracterização. A prova deste teorema, por enquanto não difícil, é extensa; pode ser

encontrada em Schultz[77].

8.3. Método

Teorema 1.5 Seja p C q f C∈ ∈1 0 1 0 1[ , ], , [ , ] , e

172

(1.34) p x( ) ≥ >δ 0, q x( ) ≥ 0 para 0 1≤ ≤x .

A função y C∈ 02 0 1[ , ] é a única solução para a equação diferencial

(1.35) − ���

��� + =d

dxp x

dydx

q x y f x( ) ( ) ( ) , 0 1≤ ≤x

se e somente se y for a única função em C02 0 1[ , ] que minimiza a integral

(1.36) I u p x u x q x u x f x u x dx[ ] { ( )[ ( )] ( )[ ( )] ( ) ( )},

= + −�2 2

0

1

2 .

No procedimento Rayleigh-Ritz a integral I não é minimizada em todas as funções

em C02 0 1[ , ] , mas em um conjunto menor de funções consistindo de combinações

lineares de certas funções de base φ φ φ1 2, ,..., n . As funções de base { }φ i in=1 devem

ser linearmente independente e satisfazerem

φ φi i( ) ( )0 1 0= = para cada i n= 1 2, ,..., .

Uma aproximação φ φ( ) ( )x c xiin

i= =� 1 para a solução y x( ) da Eq.(1.35)

é obtida pelas constantes constantes descobertas c c cn1 2, ,..., para minimizar

I ciin

i[ ]=� 1 φ .

Da Eq.(1.36),

173

(1.37) I I ci ii

n[ ] [ ]φ φ=

=�

1 =

{ ( )[ ( )] ( )[ ( )]},p x c x q x c xi iin

i ii

nφ φ=

=� �� +1

2

10

1

e, na ordem para um mínimo ocorrer é necessário, considerando I uma função de

c c cn1 2, ,..., , ter

(1.38) ∂∂

Ic j

= 0 para cada j n= 1 2, ,..., .

Diferenciando (1.37) dá

∂∂

φ φ φ φ φIc

p x c x x q x c x x f x x dxj

i i ji

n

i i ji

n

j= + −�

� �= =

� �� 2 2 21 10

1

( ) ( ) ( ) ( ) ( ) ( ) ( ) ( ), ,

e substituindo na Eq.(1.38) produz

(1.39)

00

1

11

0

1

= +�

��

�� −�� �

={ ( ) ( ) ( ) ( ) ( ) ( )} ( ) ( ), ,p x x x q x x x dx c f x x dxi j i j

i

n

jφ φ φ φ φ

para cada j n= 1 2, ,..., .

A primeira escolha das funções de base que discutiremos envolve polinômios

lineares de intervalos convenientes. O primeiro passo é formar uma partição em [ , ]0 1

escolhendo pontos x x xn0 1 1, ,..., + com

174

0 10 1 1= < < < < =+x x x xn n... .

Permitindo h x xi i i= −+1 para cada i n= 0 1, ,..., , definimos as funções de

base φ φ φ1 2( ), ( ),..., ( )x x xn por

(1.40) φi

i

i

i

i

x

x xh

x xh

( )

,( )

( )

,

=

���

���

+

0

0

1

1

1

0

1

1

1

1

1

≤ ≤

≤ ≤

≤ ≤

≤ ≤

+

+

x x

x x x

x x x

x x

i

i i

i i

i

,

,

,

,

para cada i n= 1 2, ,..., .

A partir do momento que as funções φi são intervalos lineares convenientes, as

derivadas φi,, enquanto não contínuos são constantes no subintervalo aberto

( , )x xi i− +1 1 para cada j n= 0 1, ,..., .

Então temos

(1.41) φii

i

xh

h

,( )

,

,

=−

���

���

01

1

0

1

0

1

1

1

1

1

< <

< <

< <

< <

+

+

x x

x x x

x x x

x x

i

i i

i i

i

,

,

,

,

para cada i n= 1 2, ,..., .

175

Porque φi e φi, são não nulo somente em ( , )x xi i− +1 1 , o sistema linear (1.39)

reduz para um n n× o sistema linear tridiagonal:

(1.42) Ac b= .

As entradas não nulas em são dadas por

a p x x q x x dxii i i= +�{ ( )[ ( )] ( )[ ( )] }, ,φ φ2 2

0

1

=�

��

��� +

−���

��� +

−−

+1 1

1

2 2

1

1

hp x dx

hp x dx

ix

x

ix

x

i

i

i

i

( ) ( )

+1 1

1

2

12

2

12

1

1

hx x q x dx

hx x q x dx

ix

x

iix

x

ii

i

i

i

−− +

��

��� − +

��

��� −

+( ) ( ) ( ) ( )

para cada i n= 1 2, ,..., ;

a p x x x q x x x dxi i i i i i,, ,{ ( ) ( ) ( ) ( ) ( ) ( )}+ + += +�1 1 1

0

1φ φ φ φ

= −�

��

��� +

��

��� − −

+ +

+1 11 1

2 2

1hp x dx

hx x x x q x dx

ix

x

ix

x

i ii

i

i

i

( ) ( )( ) ( )

para cada i n= −1 2 1, ,..., ;e

a p x x x q x x x dxi i i i i i,, ,{ ( ) ( ) ( ) ( ) ( ) ( )}− − −= +�1 1 1

0

1φ φ φ φ

= −�

��

��� +

��

��� − −

−− −−

1 1

11

2

1

2

11h

p x dxh

x x x x q x dxix

x

ix

x

i ii

i

i

i

( ) ( )( ) ( )

176

para cada i n= 2,..., . As entradas em b são dadas por

b f x x dxi i= � ( ) ( )φ0

1

= � − + −�−

− +−

+1 1

11 1

1

1

hx x f x dx

hx x f x dx

ix

x

ii

ix

x

i

i

i

i

( ) ( ) ( ) ( )

para cada i n= 1 2, ,..., . As entradas em c são os coeficientes desconhecidos

c c cn1 2, ,..., da qual a aproximação Rayleigh-Ritz φ dada por

φ φ( ) ( )x c xi ii

n= �

=1

é construída.

O algoritmo seguinte estabelece o sistema linear tridiagonal e incorpora o

Algoritmo Tridiagonal 6.7 para resolver o sistema. Nos passos 3, 4 e 5 as integrações

devem ser executadas, então uma fórmula quadratura deve ser incluída. É recomenda que

a quadratura seja realizada interpolando p, q e f com os intervalos polinomiais

convenientes φ φi n,..., , a menos que estes valores possam ser avaliados facilmente.

Para a resolução de integrais foi utilizado o método de Simpson.

8.4. Algorítmo

Para aproximar a solução ao problema de valor limite

− ���

��� + =d

dxp x

dydx

q x y f x( ) ( ) ( ) para 0 1≤ ≤x , y y( ) ( )0 1 0= =

177

com a função linear

φ φ( ) ( ):x c xi ii

n= �

=1

Entrada: n, x x x xn n0 1 10 1= < < < < =+... .

Saída: coeficientes c cn1,... .

Passo 1: Para i n= 0,..., estabeleça h x xi i i= −+1

Passo 2: Para i n= 0,..., defina o intervalo conveniente base linear φi por

φi

i

i

i

i

x

x xh

x xh

( )

,( )

( )

,

=

���

���

+

0

0

1

1

1

0

1

1

1

1

1

≤ ≤

≤ ≤

≤ ≤

≤ ≤

+

+

x x

x x x

x x x

x x

i

i i

i i

i

,

,

,

,

Passo 3: Para cada i = 1, 2,..., n-1 computar

Q

hx x x x q x dxi i i

x

x

i

i

1

1

2

11 1

, ( )( ) ( )=�

��

�� − −+

+

Q

hx x q x dxi

i

i

x

x

i

i

2

1

2

121

1

, ( ) ( )=�

��

�� −

Q

hx x q x dxi

i

i

x

x

i

i

3

2

121 1

, ( ) ( )=�

��

�� −+

+

178

Q

hp x dxi

i x

x

i

i

4

1

21

1

, ( )=�

��

��

− −

Q

hx x f x dxi

i x

x

i

i

i

51

11

1

, ( ) ( )= −−

Q

hx x f x dxi

ii

x

x

i

i

6 11 1

, ( ) ( )= −+

+

Passo 4: Para cada i = 1, 2,..., n - 1 estabeleça

α i i i i iQ Q Q Q= + + ++4 4 1 2 3, , , ,

β i i iQ Q= − +1 4 1, ,

b Q Qi i i= +5 6, ,

Passo 5: Estabeleça

α n n n n nQ Q Q Q= + + ++4 4 1 2 3, , , ,

b Q Qn n n= +5 6, ,

Passo 6: Estabeleça

a1 1= α

ζβα1

1

1=

Passo 7: Para i = 2,...., n-1 estabeleça

ai i i i= − − −α β ζ1 1

179

ζβ

ii

ia=

Passo 8: Estabeleça an n n n= − − −α β ζ1 1

Passo 9: Estabeleça zba1

1

1=

Passo 10: Para i = 2,..., n estabeleça

zb z

aii i i

i=

− − −( )β 1 1

Passo 11: estabeleça

c zn n=

Saída(cn )

Passo 12: Para i = n-1,...,1 estabeleça

c z ci i i i= − +ζ 1

Saída(ci)

Passo 13: Pare

8.5. Fluxograma

180

Início

Para i = 0até n hi = xi+1 - xi

Para i = 1até n

Para cada i= 1,2...,n-1

Q1,i Q2,i Q3,1 Q4,iQ5,i Q6,i

Yes

No

Yes

No

Definição dointervalo

convenientebase linear

No

Yes

Para cada i= 1,2...,n-1

Ai = Q4,i+Q4,i+1+Q2,i+Q3,i Bi = Q1,i - Q4,i+1 bi = Q5,i + Q6,i

an = Q4,n+ Q4,n+1+ Q2,n + Q3,nbn = Q5,n + Q6,n

a1 = A1C1 = B1 / A1

Para cada i= 2...,n-1

a1 = A1 - Bi-1*Ci-1Ci = Bi / Ai

an = An- Bn-1*Cn-1

Yes

No

Yes

No

181

z1 = b1 / a1

Para cada i= 2...,n zi = (bi - Bi-1*zi-1) / ai

cn = zn

Display(cn)

Para cada i= n-1,...,1 ci = z1 - Ci*ci+1

Display(cn)

Pare

No

Yes

Yes

No

8.6. Implementação

#include <string.h>

#include <stdio.h>

#include <conio.h>

#include <trigon.h>

#include <math.h>

#include <graphics.h>

#include <stdlib.h>

#define n 9

double sqr(double);

182

double func(double x);

double simpson();

double inter;

double intsimp;

double qx,fx;

double tipofuncaos;

char tipofuncao[15],teste[10];

void Plota_Tabela(void);

void Passo1(void);

void Passo2(void);

void Passo3(void);

void Passo4(void);

void Passo5(void);

void fim (void);

void grafico(void);

typedef float vetor[n+1];

vetor h,Fii,alfa,beta,gama,b,a,z,c;

float x[]={.0,.1,.2,.3,.4,.5,.6,.7,.8,.9};

double X,IOLD1,IOLD2,INEW1,INEW2,INEW3,INEW4,INEW5,INEW6;

int i;

void main(void) {

183

clrscr();

Passo1();

Passo2();

Passo3();

Passo4();

Passo5();

if (tipofuncaos==1) {

a[1]=alfa[1];

gama[1]=beta[1]/alfa[1];

for (i=2; i<=n-1; i++) {

a[i]=alfa[i]-(beta[i-1]*gama[i-1]);

gama[i]=beta[i]/a[i];

}

a[n]=alfa[n]-(beta[n-1]*gama[n-1]);

z[1]=b[1]/a[1];

for (i=2; i<=n-1; i++)

z[i]=(b[i]-(beta[i-1]*z[i-1]))/a[i];

c[n]=z[n];

printf("%f",c[n]);

for (i=n-1; i>=1; i++) {

c[i]=z[i]-(gama[i]*c[i+1]);

printf("%f",c[i]);

}

getch();

184

Plota_Tabela();

}

}

double simpson() {

int m=50;

double result;

double valor;

qx=(sqr(3.141597));

fx=2*qx*(sin(3.141597*X));

int i;

intsimp=0;

if ((strcmp(tipofuncao,"IOLD1")==0) || (strcmp(tipofuncao,"IOLD2")==0)) {

inter=(x[1]-x[0])/m;

valor=x[0];

}

else if (strcmp(tipofuncao,"INEW5")==0) {

inter=(x[i]-x[i-1])/m;

valor=x[i-1];

}

else if (strcmp(tipofuncao,"INEW51")==0) {

inter=(x[n]-x[n-1])/m;

valor=x[n-1];

}

185

else if ((strcmp(tipofuncao,"INEW11")==0) ||

(strcmp(tipofuncao,"INEW31")==0) ||

(strcmp(tipofuncao,"INEW61")==0)) {

inter=(x[n+1]-x[n])/m;

valor=x[n];

}

else {

inter=(x[i+1]-x[i])/m;

valor=x[i];

}

for (i=0; i<m; i++) {

intsimp=(inter/6) * (func(valor) + 4*func((2*valor +inter)/2) +

func(valor+inter)) + intsimp;

valor=valor+inter;

}

return(intsimp);

}

double func(double X) {

double y;

if (strcmp(tipofuncao, "IOLD1")==0)

y=1;

186

if (strcmp(tipofuncao, "IOLD2")==0)

y=(sqr(X-x[0]))*qx;

if (strcmp(tipofuncao, "INEW1")==0)

y=1;

if (strcmp(tipofuncao, "INEW11")==0)

y=1;

if (strcmp(tipofuncao, "INEW2")==0)

y=(sqr(X-x[i]))*qx;

if (strcmp(tipofuncao, "INEW3")==0)

y=(sqr(x[i+1]-X))*qx;

if (strcmp(tipofuncao, "INEW31")==0)

y=(sqr(x[n+1]-X))*qx;

if (strcmp(tipofuncao, "INEW4")==0)

y=(x[i+1]-X)*(X-x[i])*qx;

if (strcmp(tipofuncao, "INEW5")==0)

y=(X-x[i-1])*fx;

187

if (strcmp(tipofuncao, "INEW51")==0)

y=(X-x[n-1])*fx;

if (strcmp(tipofuncao, "INEW6")==0)

y=(x[i+1]-X)*fx;

if (strcmp(tipofuncao, "INEW61")==0)

y=(x[n+1]-X)*fx;

return (y);

}

double sqr(double T) {

T=T*T;

return(T);

}

void Passo1(void) {

for (i=0; i<=n; i++)

h[i]=x[i+1]-x[i];

}

void Passo2(void) {

tipofuncaos=0;

188

for (i=1; i<=n-1; i++) {

if ((X >= 0.0) && (X <= x[i-1]))

Fii[i] = 0.0;

else if (X <= x[i])

Fii[i] = (X-x[i-1])/h[i-1];

else if (X <= x[i+1])

Fii[i]=(x[i+1]-X)/h[i];

else if (x<=(float *)1)

Fii[i]=0.0;

}

}

void Passo3(void) {

strcpy(tipofuncao,"IOLD1");

IOLD1=(sqr(1/h[0]))*simpson();

strcpy(tipofuncao,"IOLD2");

IOLD2=(sqr(1/h[0]))*simpson();

}

void Passo4(void) {

if (tipofuncaos==1) {

for (i=0; i<=n-1; i++) {

strcpy(tipofuncao,"INEW1" );

189

INEW1=(sqr(1/h[i]))*simpson();

strcpy(tipofuncao,"INEW2" );

INEW2=(sqr(1/h[i]))*simpson();

strcpy(tipofuncao,"INEW3" );

INEW3=(sqr(1/h[i]))*simpson();

strcpy(tipofuncao,"INEW4" );

INEW4=(sqr(1/h[i]))*simpson();

strcpy(tipofuncao,"INEW5" );

INEW5=(1/h[i-1])*simpson();

strcpy(tipofuncao,"INEW6" );

INEW6=(1/h[i])*simpson();

alfa[i]=IOLD1+INEW1+IOLD2+INEW3;

beta[i]=-INEW1+INEW4;

b[i]=INEW5+INEW6;

IOLD1=INEW1;

IOLD2=INEW2;

}

}

}

void Passo5(void) {

strcpy(tipofuncao,"INEW11" );

INEW1=(sqr(1/h[n]))*simpson();

strcpy(tipofuncao,"INEW31" );

190

INEW3=(sqr(1/h[n]))*simpson();

strcpy(tipofuncao,"INEW51" );

INEW5=(1/h[n-1])*simpson();

strcpy(tipofuncao,"INEW61" );

INEW6=(1/h[n])*simpson();

alfa[n]=IOLD1+INEW1+IOLD2+INEW3;

beta[n]=INEW5+INEW6;

result();

}

void Plota_Tabela(void) {

int i;

char s[20];

if (tipofuncaos==1) {

settextstyle(0,0,0);

line(460,90,460,450);

line(540,90,540,450);

line(620,90,620,450);

for (i=0;i<=30;i++)

line(460,90+12*i,620,90+12*i);

outtextxy(510,43,"Tabela");

outtextxy(210,65,"i");

191

outtextxy(465,77,"(Ton/cm2)");

outtextxy(300,65,"xi");

outtextxy(560,77,"x1000");

for (i=0;i<=29;i++) {

sprintf(s,"%2.4f",i);

outtextxy(210,93+12*i,s);

if (i<7)

sprintf(s,"%2.4f",x[i]);

else if (i<14)

sprintf(s,"%2.3f",Fii[i]);

else if (i<21)

sprintf(s,"%2.2f",fx);

else sprintf(s,"%2.1f",Fii[i]-fx);

outtextxy(300,93+12*i,s);

}

}

}

8.7. Exemplo

O exemplo seguinte usa o algoritmo acima.

Modelo: Considerar o problema de valor limite

192

− ′′+ =y y sin xπ π π2 22 ( ) 0 1≤ ≤x , y y( ) ( )0 1 0= =

Façamos h hi = = 01. tal que x ii = 01. para cada i = 0 1 9, , . . . . . As integrais são

Q i x x i dxi

i

i

12

2

01

01 01

100 01 01 0160

,

.

. .

( . . )( . )= + − − =+

� π π

Q x i dxi

i

i

22 2

2

01 01

01

100 01 0130

,

. .

.

( . . )= − + =−� π π

Q i x dxi

i

i

32 2

2

01

01 01

100 01 0130

,

.

. .

( . . )= + − =+

� π π

Q dxi

i

i

4

01 01

01

100 10,

. .

.

= =−�

Q x i sin xdxi

i

i

52

0 1 0 1

0 1

10 01 01 2,

. .

.

( . . )= − + =−� π π

= − + − −2 01 20 01 01 01π π π πcos . [ ( . ) (( . . ) )]i sin i sin i

Q i x sin xdxi

i

i

62

0 1

0 1 0 1

10 01 01 2,

.

. .

( . . )= + − =+

� π π

= − + −2 0 1 20 0 1 0 1 0 1π π π πcos . [ (( . . ) ( . )]i sin i sin i

O sistema linear Ac b= has

193

a ii i, , , ...= + =2015

1 2 92π

para cada

a ii i, , , ...+ = − + =1

2

1060

1 2 8π

para cada

a ii i, , , ...− = − + =1

2

1060

2 3 9π

para cada

bi sin i i= − =40 0 1 1 0 1 1 2 9( . )[ cos . ], , , ... .π π para cada

A solução para o sistema linear tridiagonal é

c9 0 3102866742= . c4 0 9549641893= .

c8 0 5902003271= . c3 0 8123410598= .

c 7 0 8123410598= . c2 0 5902003271= .

c 6 0 9549641893= . c1 0 3102866742= .

c5 1 004108771= .

O intervalo da aproximação linear é

φ φ( ) ( )x c xi i

i

==�

1

9

A atual solução para o problema do valor limite é

y x sin x( ) = π