Você está na página 1de 24

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

d dy
(1.32) − p(x ) + q (x ) y = f (x ) para 0 ≤ x ≤ 1 ,
dx dx
com as condições limites

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

170
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≤ x≤1

e que q (x ) ≥ 0 para 0 ≤ x ≤ 1.
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

C 2 [ 0,1] com a propriedade que u ( 0) = u (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 1 [ 0,1], q , f ∈ C[ 0,1] , e

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

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

d dy
(1.35) − p(x ) + q (x ) y = f (x ) , 0≤ x≤1
dx dx

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


1
,
(1.36) I [u] = { p( x )[u ( x )]2 + q ( x )[u( x )]2 − 2 f ( x )u( x )}dx .
0

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 (0) = φ i (1) = 0 para cada i = 1,2,..., n .


n
Uma aproximação φ ( x) = c φ ( x ) para a solução
i =1 i i
y( x) da Eq.(1.35)

é obtida pelas constantes constantes descobertas c1 , c2 ,..., cn para minimizar

n
I[ c φ ].
i =1 i i

Da Eq.(1.36),

172
n
(1.37) I [φ ] = I [ ciφ i ] =
i =1

1 n
n
{ p( x )[ c φ , ( x )]2
i =1 i i
+ q ( x )[ ciφ i ( x )]}
0 i =1

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

c1 , c2 ,..., cn , ter

∂I
(1.38) =0 para cada j = 1,2,..., n .
∂c j
Diferenciando (1.37) dá

∂I 1 n
, ,
n
= 2 p( x ) ciφ i ( x )φ j ( x ) + 2q ( x ) ciφ i ( x )φ j ( x ) − 2 f ( x )φ j ( x ) dx
∂c j 0 i =1 i =1

e substituindo na Eq.(1.38) produz

(1.39)

n 1 1
, ,
0= { p( x )φ i ( x )φ j ( x ) + q ( x )φ i ( x )φ j ( x )}dx c1 − f ( x )φ j ( x )dx
i =1 0 0

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


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 x0 , x1 ,..., xn +1 com

173
0 = x0 < x1 <... < xn < xn +1 = 1 .

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

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

0, 0 ≤ x ≤ xi −1 ,
( x − xi −1 )
xi −1 ≤ x ≤ xi ,
hi −1
(1.40) φi ( x) =
( xi +1 − x )
xi ≤ x ≤ xi +1 ,
hi
0, xi +1 ≤ x ≤ 1,
para cada i = 1,2,..., n .
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

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


Então temos

0, 0 < x < xi −1 ,
1
xi −1 < x < xi ,
hi −1
(1.41) φi , ( x) =
1
− xi < x < xi +1 ,
hi
0, xi +1 < x < 1,
para cada i = 1,2,..., n .

174
Porque φi e φ i , são não nulo somente em ( xi −1 , xi +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

1
aii = { p( x )[φ i , ( x )]2 + q ( x )[φ i , ( x )]2 }dx
0

xi 2 xi +1 2
1 −1
= p( x )dx + p( x )dx +
xi −1 hi −1 xi hi

xi 2 xi +1 2
1 2 1
+ ( x − xi −1 ) q ( x )dx + ( xi +1 − x ) 2 q ( x )dx
xi −1 hi −1 xi hi

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


1
ai ,i +1 = { p( x )φ i , ( x )φ ,i +1 ( x ) + q ( x )φ i ( x )φ i +1 ( x )}dx
0

xi +1 2 xi +1 2
1 1
= − p( x )dx + ( xi +1 − x )( x − xi )q ( x )dx
xi hi xi hi

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


1
ai ,i −1 = { p( x )φ i , ( x )φ ,i −1 ( x ) + q ( x )φ i ( x )φ i −1 ( x )}dx
0

xi 2 xi 2
1 1
= − p( x )dx + ( xi − x )( x − xi −1 )q ( x )dx
x i −1 hi −1 xi −1 hi −1

175
para cada i = 2,..., n . As entradas em b são dadas por
1
bi = f ( x )φ i ( x )dx
0

xi xi +1
1 1
= ( x − xi −1 ) f ( x )dx + ( x − x ) f ( x )dx
xi −1 hi −1 xi hi i +1

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

c1 , c2 ,..., cn da qual a aproximação Rayleigh-Ritz φ dada por

n
φ ( x) = ci φ i ( x )
i =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 dy
− p(x ) + q (x ) y = f (x ) para 0 ≤ x ≤ 1, y (0) = y (1) = 0
dx dx

176
com a função linear

n
φ ( x) = ci φ i ( x ):
i =1

Entrada: n, x0 = 0 < x1 <... < xn < xn +1 = 1.


Saída: coeficientes c1 ,... cn .

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


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

0, 0 ≤ x ≤ xi −1 ,
( x − xi −1 )
xi −1 ≤ x ≤ xi ,
hi −1
φi ( x) =
( xi +1 − x )
xi ≤ x ≤ xi +1 ,
hi
0, xi +1 ≤ x ≤ 1,
Passo 3: Para cada i = 1, 2,..., n-1 computar

2 xi +1
1
Q1, i = ( xi + 1 − x )( x − xi ) q ( x ) dx
h1 xi

2 xi
1
Q2, i = ( x − xi − 1) 2 q ( x ) dx
hi −1 xi −1

2 xi +1
1
Q 3, i = ( xi + 1 − x ) 2 q ( x ) dx
hi xi

177
2 xi
1
Q4 , i = p( x )dx
hi −1 xi −1

xi
1
Q 5, i = ( x − xi − 1) f ( x ) dx
hi − 1 xi −1

x i +1
1
Q 6, i = ( x i + 1 − x ) f ( x ) dx
hi xi

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

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

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

bi = Q 5, i +Q 6, i

Passo 5: Estabeleça

α n = Q 4 , n + Q 4 , n + 1 + Q 2 , n + Q 3, n
bn = Q 5 , n + Q 6 , n

Passo 6: Estabeleça

a1 = α 1

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

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

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

b1
Passo 9: Estabeleça z1 =
a1
Passo 10: Para i = 2,..., n estabeleça

(bi − β i −1zi −1 )
zi =
ai
Passo 11: estabeleça

cn = zn
Saída( cn )

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

ci = zi − ζ i ci +1
Saída( ci )

Passo 13: Pare

8.5. Fluxograma

179
Início

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

No

Definição do
Para i = 1 intervalo
Yes
até n conveniente
base linear

No

Para cada i
Yes
Q1,i Q2,i Q3,1 Q4,i
= 1,2...,n-1 Q5,i Q6,i

No

Ai = Q 4,i+Q4,i+1 +Q2,i+Q3,i
Para cada i
= 1,2...,n-1
Yes Bi = Q 1,i - Q 4,i+1
bi = Q 5,i + Q 6,i

No

an = Q 4,n+ Q 4,n+1+ Q 2,n + Q 3,n


bn = Q 5,n + Q 6,n

a1 = A 1
C1 = B 1 / A1

Para cada i
Yes
a1 = A 1 - B i-1 *Ci-1
= 2...,n-1 Ci = B i / A i

No

an = A n- Bn-1*Cn-1

180
z 1 = b1 / a 1

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

No

c n = zn

Display
(cn)

Para cada i Display


Yes ci = z1 - Ci*ci+1
= n-1,...,1 (cn)

No

Pare

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);

181
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) {

182
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();

183
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];

184
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;

185
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;

186
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;

187
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" );

188
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" );

189
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");

190
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

191
− y′′+π 2 y = 2π 2 sin(πx ) 0 ≤ x ≤ 1, y (0) = y (1) = 0
. tal que xi = 0.1i para cada i = 0 ,1, ....9 . As integrais são
Façamos hi = h = 01

. i +01
01 .
π2
Q1, i = 100 . i + 01
(01 . i)π dx =
. − x)(x − 01 2

01
.i
60
01
.i
π2
Q2, i = 100 (x − 01 . ) π dx =
. i + 012 2

. i −01
01 .
30
. i +01
01 .
π2
Q3, i = 100 (01 . − x) π dx =
. i + 01 2 2

01
.i
30
01
.i

Q4, i = 100 dx = 10
. i −01
01 .

0.1i

Q5, i = 10 ( x − 01 . )2π 2 sinπxdx =


. i + 01
0.1i −0.1

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


0.1i +0.1

Q6, i = 10 . − x)2π 2 sinπxdx =


. i + 01
(01
0.1i

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


O sistema linear Ac = b has

192
π2
a i , i = 20 + para cada i = 1,2 ,...9
15

π2
a i , i + 1 = − 10 + para cada i = 1,2 ,...8
60

π2
a i , i − 1 = − 10 + para cada i = 2 ,3,...9
60

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


A solução para o sistema linear tridiagonal é

c 9 = 0.3102866742 c 4 = 0.9549641893
c 8 = 0 .5902003271 c 3 = 0.8123410598
c 7 = 0.8123410598 c 2 = 0.5902003271
c 6 = 0.9549641893 c 1 = 0.3102866742
c 5 = 1.004108771
O intervalo da aproximação linear é

9
φ ( x) = c iφ i ( x )
i =1

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

y ( x ) = sin π x

193