Você está na página 1de 29

AULA DE REVISÃO

1. SISTEMAS NÃO LINEARES

3. Considere o sistema não linear abaixo:

Faça um gráfico para observar as raízes.


Calcule aproximações pelo método de Newton.
Solução

f<-function(x){x^2+5*x+3}
plot(f,-20,20,xlab=expression('x'[1]),
ylab=expression('x'[2]),
lwd=3,col="blue")

abline(h=0,v=0,lwd=3)

g<-function(x){-x^2-5*x+200}
plot(g,-20,20,add=T,col="red",lwd=3)
# Carregando o pacote
require(nleqslv)

# Definindo o sistema
sistema <- function(x) {
y <- numeric(2)
y[1] <- x[1]^2+5*x[1]+3-x[2]
y[2] <- -x[1]^2-5*x[1]+200-x[2]
y
}

# Primeira raiz
#Definindo a aproximação inicial
xstart <- c(10,100)
points(10,100,pch=20,lwd=3,col="black")
# Resolvendo
nleqslv(xstart,sistema,method =
c("Newton"),control=list(xtol=0.000001))

$x
[1] 7.734745 101.500000

$fvec
[1] 5.684342e-14 -5.684342e-14

$iter
[1] 4
# Plotando a solução encontrada
points(7.734745,101.500000,pch=20,lwd=3,col="green")
# Segunda raiz
#Definindo a aproximação inicial
xstart <- c(-10,100)
points(-10,100,pch=20,lwd=3,col="black")
# Resolvendo
nleqslv(xstart,sistema,method =
c("Newton"),control=list(xtol=0.000001))

$x
[1] -12.73474 101.50000

$fvec
[1] 4.187939e-11 -4.187939e-11

$iter
[1] 4
# Plotando a solução encontrada
points(-12.73474,101.500000,pch=20,lwd=3,col="green")
2. INTERPOLAÇÃO

# Inserindo o conjunto de pontos


x<-c(1,3,4,5)
y<-c(0,6,24,60)

# Fazendo o gráfico
plot(x,y,pch=20,lwd=4,col="red")

# Determinando o polinômio interpolador


require(polynom)
poly.calc(x,y)
2*x - 3*x^2 + x^3
# Inserindo o polinômio no gráfico
f<-function(x){2*x - 3*x^2 + x^3}
curve(f,1,5,add=T,lwd=3)
Calcule a área da região destacada em vermelho. Descreva o
procedimento utilizado.

# Carregue o pacote digitize


require(digitize)

# Inserindo a figura
cal <- ReadAndCal('figura.jpg')

# A Figura será aberta em uma janela.


# Precisamos clicar, na sequência em x1, x2, y1 e y2.
# Vou considerar x1 = 0, x2 = 50, y1 = 0 e y2 = 50

#Agora devemos clicar nos pontos da função superior


# Clicar com o botão direito do mouse e selecionar "parar".
f1 <- DigitData(col = 'blue')

#Calibrando os pontos clicados com os pontos x1,x2,y1 e y2.


data1 <- Calibrate(f1,cal,0,50,0,50)
# Visualizando as coordenadas
x1<-data1[,1]
x1
[1] 1.494565 4.347826 10.054348 15.081522 22.010870 28.396739 35.733696
[8] 39.945652 43.070652 47.282609

y1<-data1[,2]
y1
[1] 9.234828 12.664908 19.129288 24.670185 31.926121 37.335092 40.765172
[8] 41.820580 42.612137 43.271768

#Agora devemos clicar nos pontos da função inferior


# Clicar com o botão direito do mouse e selecionar "parar".
f2 <- DigitData(col = 'blue')

#Calibrando os pontos clicados com os pontos x1,x2,y1 e y2.


data2 <- Calibrate(f2,cal,0,50,0,50)

# Visualizando as coordenadas
x2<-data2[,1]
x2
[1] 2.581522 7.336957 11.956522 17.255435 23.233696 29.891304 36.005435
[8] 40.217391 44.565217 47.282609
y2<-data2[,2]
y2
[1] 1.846966 4.485488 7.124011 10.158311 13.720317 17.810026 22.295515
[8] 27.440633 36.015831 43.139842

# Dividindo os pontos da função superior


# em 4 grupos
a1<-x1[1:3]
b1<-y1[1:3]

a2<-x1[3:5]
b2<-y1[3:5]

a3<-x1[5:7]
b3<-y1[5:7]

a4<-x1[7:10]
b4<-y1[7:10]

plot(x1,y1,xlim=c(0,60),ylim=c(0,60),pch=20,lwd=3)
abline(h=0,v=0,lwd=3)

# Determinando o polinômio interpolador


require(polynom)

poly.calc(a1,b1)
pol1<-function(x){7.38547 + 1.249499*x - 0.008102478*x^2}
plot(pol1,0,10.054348,lwd=3,col="blue",add=T)
poly.calc(a2,b2)
pol2<-function(x){7.349237 + 1.217936*x - 0.004604851*x^2}
plot(pol2,10.05435,22.01087,lwd=3,col="blue",add=T)
poly.calc(a3,b3)
pol3<-function(x){-4.003417 + 2.241081*x - 0.02765573*x^2}
plot(pol3,22.01087,35.73370,lwd=3,col="blue",add=T)

poly.calc(a4,b4)
pol4<-function(x){104.4707 - 5.276429*x + 0.1396928*x^2 - 0.001173235*x^3}
plot(pol4,35.73370,47.28261,lwd=3,col="blue",add=T)

# Integrais
I1<-integrate(pol1,0,10.054348)
I2<-integrate(pol2,10.054348,22.01087)
I3<-integrate(pol3,22.01087,35.73370)
I4<-integrate(pol4,35.73370,47.28261)

# Área superior
A1<-I1$value+I2$value+I3$value+I4$value
A1
[1] 1438.788

# Dividindo os pontos da função inferior


# em 5 grupos
a5<-x2[1:3]
b5<-y2[1:3]

a6<-x2[3:5]
b6<-y2[3:5]

a7<-x2[5:7]
b7<-y2[5:7]

a8<-x2[7:10]
b8<-y2[7:10]

points(x2,y2,xlim=c(0,60),ylim=c(0,60),pch=20,lwd=3,add=T)

poly.calc(a5,b5)
pol5<-function(x){0.4475944 + 0.5375786*x + 0.001740686*x^2}
plot(pol5,0,11.956522,lwd=3,col="blue",add=T)

poly.calc(a6,b6)
pol6<-function(x){0.7018127 + 0.5125324*x + 0.002057192*x^2}
plot(pol6,11.95652,23.23370,lwd=3,col="blue",add=T)

poly.calc(a7,b7)
pol7<-function(x){5.937134 + 0.1179066*x + 0.009343708*x^2}
plot(pol7,23.23370,36.00543,lwd=3,col="blue",add=T)

poly.calc(a8,b8)
pol8<-function(x){81.27793 - 3.658986*x + 0.04271425*x^2 +
0.0003724855*x^3}
plot(pol8,36.00543,47.28261,lwd=3,col="blue",add=T)
# Integrais
I5<-integrate(pol5,0,11.956522)
I6<-integrate(pol6,11.956522,23.23370)
I7<-integrate(pol7,23.23370,36.00543)
I8<-integrate(pol8,36.00543,47.28261)

# Área superior
A2<-I5$value+I6$value+I7$value+I8$value
A2
[1] 736.1875

# Área final
A = A1-A2
A
[1] 702.600
3. APROXIMAÇÃO POLINOMIAL

Um estudo foi conduzido para determinar a relação entre os gastos semanais com
publicidade e as vendas.

Tabela 1: Gastos com publicidade.


Gastos com publicidade ($) Vendas ($)
40 385
20 400
25 395
20 365
30 475
50 440
40 490
20 420
50 560
40 525
25 480
50 510

Faça um diagrama de dispersão.

x<-c(40,20,25,20,30,50,40,20,50,40,25,50)
y<-c(385,400,395,365,475,440,490,420,560,525,480,510)
plot(x,y,xlim=c(0,55),ylim=c(0,600),lwd=5,pch=20)

Determine a equação da reta de regressão para prever as vendas semanais com


base nos gastos com publicidade.
reta<-lm(y~x)
reta
Call:
lm(formula = y ~ x)

Coefficients:
(Intercept) x
343.706 3.221

f<-function(x){343.706+3.221*x}
curve(f,0,55,add=T,col="red")

Estime as vendas semanais quando os gastos de publicidade são de $ 35.


f(35)
[1] 456.441
Caso não linear (exponencial)

Considere os dados para gastos de propaganda e receita de vendas.

Gasto de propaganda Receita de vendas


(X) (US$ 100) (Y) (US$ 1000)
1 1
2 1
3 2
4 2
5 4
a) Construa um diagrama de dispersão
b) Ajuste uma exponencial

x<-c(1,2,3,4,5)

y<-c(1,1,2,2,4)

plot(x,y,pch=20,lwd=6,xlim=c(0,6),ylim=c(0,6))
y<-log(y)
y
[1] 0.0000000 0.0000000 0.6931472 0.6931472 1.3862944

reta<-lm(y~x)
reta

Call:
lm(formula = y ~ x)

Coefficients:
(Intercept) x
-0.4852 0.3466
f<-function(x){exp(-0.4852)*exp(0.3466*x)}
curve(f, 1,6,add=T,col="red", pch=8)
4. DIFERENCIAÇÃO NUMÉRICA

Exercícios: Utilize a fórmula dos três pontos mais precisa para calcular
cada um dos dados de entrada nas tabelas

x f(x) f’(x)
1,1 9,025013
1,2 11,02318
1,3 13,46374
1,4 16,44465

Cálculo para x=1,1

i) Utilizando ( ) [ ( ) ( ) ( )]

(1/(2*0.1))*(-3*(9.025013)+4*(11.02318)-(13.46374))
17.76971

Cálculo para x=1,2

ii) Utilizando ( ) [( ) ( )]

{
(1/(2*0.1))*(( 13.46374)-( 9.025013))
[1] 22.19364

Cálculo para x=1,3


(igual o anterior)

Cálculo para x=1,4

iii) Utilizando ( ) [( ) ( ) ( )]

(1/(2*0.1))*((11.02318)-4*(13.46374)+3*(16.44465))
[1] 32.51085
5. INTEGRAÇÃO NUMÉRICA

Connsidere a integral abaixo:

∫ ( )

a) Esboce a área a ser calculada, a área aproximada pela regra


do trapézio e calcule o erro absoluto quando esta
aproximação é realizada.

b) Calcule uma aproximação pela regra dos trapézios repetidos


com 1000 subintervalos.

c) Calcule uma aproximação utilizando a regra 1/3 de Simpson


e calcule o erro absoluto.

# Definindo a função
f<-function(x){exp(3*x)*sin(2*x)}

# Gráfico da função
plot(f,0,0.7,lwd=6,col="blue",ylim=c(0,8),
xlim=c(0,1))
abline(h=0,v=0,lwd=6)
# Trapézio
segments(0,0,0,f(0),col="red",lwd=3,lty=2)
segments(0.7,0,0.7,f(0.7),col="red",lwd=3,lty=2)
segments(0,f(0),0.7,f(0.7),col="red",lwd=3,lty=2)

# Área aproximada
A=((f(0)+f(0.7))*(0.7-0))/2
A
[1] 2.816572

# Área real
integrate(f,0,0.7)
1.797391 with absolute error < 2e-14

# Erro absoluto
abs(1.797391-2.816572)
[1] 1.019181
# b)
# Carregando o pacote caTools
require(caTools)

# Criando uma sequência com x0= 0, xn= 0.7 e h = 0,0007


x<-seq(0,0.7,0.0007)

# Calculando o valor de f(x) para cada ponto acima.


y<-f(x)

# Regra dos trapézios repetidos


trapz(x,y)
[1] 1.79739

# Calculando a área
a=0
b = 0.7
h=(b-a)/2
x0=a
x1=x0+h
x2=x1+h

# Área
A=(h/3)*(f(x0)+4*f(x1)+f(x2))
A
[1] 1.79797
6. PROBLEMA DE VALOR INICIAL - PVI

Considere o seguinte PVI

{
( )

Esboce a solução exata ( ) ( ) no intervalo [ ]

f<-function(x){(x+1)^2 -0.5*exp(x)}
curve(f,0,2,col="blue",ylim=c(0,6),lwd=2)
abline(h=0,v=0,lwd=2)

Utilizando o método de Euler, calcule aproximações para a solução


considerando h=0,05, apresente as respostas e marque-as no gráfico
considerando pch= “+”.

#carregando o pacote
require(pracma)
f <- function(x, y){y-(x^2)+1}
a <-0
b <-2
y0<-0.5
n=40

euler<-euler_heun(f,a,b,y0,n, improved = FALSE)


euler
$t
[1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
[16] 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45
[31] 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00

$y
[1] 0.5000000 0.5750000 0.6536250 0.7358062 0.8214716 0.9105451 1.0029474
[8] 1.0985948 1.1973995 1.2992695 1.4041080 1.5118134 1.6222790 1.7353930
[15] 1.8510376 1.9690895 2.0894190 2.2118899 2.3363594 2.4626774 2.5906863
[22] 2.7202206 2.8511066 2.9831619 3.1161950 3.2500048 3.3843800 3.5190990
[29] 3.6539290 3.7886254 3.9229317 4.0565783 4.1892822 4.3207463 4.4506586
[36] 4.5786915 4.7045011 4.8277262 4.9479875 5.0648869 5.1780062

points(euler$t,euler$y,col="red",pch="+")
Utilizando o método de Euler Aperfeiçoado, calcule aproximações para a
solução considerando h=0,05, apresente as respostas e marque-as no
gráfico considerando pch= “*”.

euler_a<-euler_heun(f,a,b,y0,n, improved = TRUE)


euler_a

$t
[1] 0.00 0.05 0.10 0.15 0.20 0.25 0.30 0.35 0.40 0.45 0.50 0.55 0.60 0.65 0.70
[16] 0.75 0.80 0.85 0.90 0.95 1.00 1.05 1.10 1.15 1.20 1.25 1.30 1.35 1.40 1.45
[31] 1.50 1.55 1.60 1.65 1.70 1.75 1.80 1.85 1.90 1.95 2.00

$y
[1] 0.5000000 0.5768125 0.6573085 0.7414206 0.8290778 0.9202055 1.0147254
[8] 1.1125551 1.2136079 1.3177928 1.4250141 1.5351710 1.6481579 1.7638635
[15] 1.8821709 2.0029572 2.1260931 2.2514428 2.3788637 2.5082054 2.6393103
[22] 2.7720125 2.9061375 3.0415021 3.1779134 3.3151690 3.4530558 3.5913499
[29] 3.7298159 3.8682065 4.0062614 4.1437073 4.2802567 4.4156074 4.5494416
[36] 4.6814255 4.8112079 4.9384199 5.0626732 5.1835602 5.3006521
points(euler_a$t,euler_a$y,col="green",pch="*")

Você também pode gostar