Você está na página 1de 14

UNIVERSIDADE DE CAXIAS DO SUL

LICENCIATURA EM MATEMÁTICA – INTRODUÇÃO AOS MÉTODOS NUMÉRICOS


ACADÊMICOS: César Bublitz e Michel Michelon

E.01) Escreva um programa que permita ao usuário digitar um valor x aleatório e obter a
imagem de x pela função f(x)= 2x-3 se x<0 | 4 se 0<=x<=3 | sqrt(x-3) se x>=3

M-File pp1.m

function pp1
disp 'Pré-Prova 1';
disp 'Exercício 1';
disp 'F(x) = 2x-3, x<0';
disp ' 4, 0<=x<3';
disp ' sqrt(x-3), x>=3';
x=input('Digite um valor para x\nx=');

if x<0
disp 'como x<0, y=2*x-3'
y=2*x-3
elseif x>=0 & x<3
disp 'como x 0<=x<4, y=4'
y=4
else
disp 'como x>=3, y=sqrt(x-3)'
y=sqrt(x-3)
end

Testando no MATLAB:

>> pp1

Pré-Prova 1

Exercício 1

F(x) = 2x-3, x<0

4, 0<=x<3

sqrt(x-3), x>=3

Digite um valor para x

x=-2

como x<0, y=2*x-3

y=

-7

>> pp1

Pré-Prova 1
Exercício 1

F(x) = 2x-3, x<0

4, 0<=x<3

sqrt(x-3), x>=3

Digite um valor para x

x=0

como x 0<=x<4, y=4

y=

>> pp1

Pré-Prova 1

Exercício 1

F(x) = 2x-3, x<0

4, 0<=x<3

sqrt(x-3), x>=3

Digite um valor para x

x=2

como x 0<=x<4, y=4

y=

>> pp1

Pré-Prova 1

Exercício 1

F(x) = 2x-3, x<0

4, 0<=x<3

sqrt(x-3), x>=3

Digite um valor para x


x=3

como x>=3, y=sqrt(x-3)

y=

>> pp1

Pré-Prova 1

Exercício 1

F(x) = 2x-3, x<0

4, 0<=x<3

sqrt(x-3), x>=3

Digite um valor para x

x=4

como x>=3, y=sqrt(x-3)

y=

E.06) Obtenha a menor raíz positiva da equação 2cosx=(e^x)/2, construindo o algoritmo da


bissecção para 10^(-4) de tolerância.

% FASE 1 - Localização do Zero

% Método utilizado - Gráfico

x=0:0.01:10;

y=4*cos(x)-exp(x);

plot(x,y),grid
4
x 10
0.5

-0.5

-1

-1.5

-2

-2.5
0 1 2 3 4 5 6 7 8 9 10

>> axis([0 1 -3 3])

-1

-2

-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

>> % O que me permite concluir que a raiz existe para x entre [0.8,1]
Construo então a MFile com tolerância setada para tol=10^(-4)

function pp6

disp 'Esse programa encontra a menor raiz positiva de


2*cos(x)=exp(x)/2 com tol=10^(-4)'
disp 'DICA: Pelo gráfico pode-se observar que ela está para x entre
o.8 e 1.'
a=input('Defina o intervalo inicial\na=');
b=input('Defina o intervalo final\nb=');
tol=10^(-4);
C=[];
n=0;

% Enquanto o módulo da diferença dos intervalos for maior que a


tolerância
while abs(a-b)>=tol
% Encontro o ponto médio do intervalo de a até b
c=(a+b)/2;
C=[C;c];
n=n+1;
% Encontro o resultado das duas imagens (de f(a) e f(b))
fa=4*cos(a)-exp(a); % MUDAR AQUI A FUNÇÃO
fc=4*cos(c)-exp(c); % MUDAR AQUI A FUNÇÃO
% Tenho que descobrir se o intervalo está para (a,c) ou (c,b), então
% verifico se a intersecção está entre a e c ou c e b
if fa*fc<0;
b=c;
else
a=c;
end
end
disp 'Número de Iterações Necessárias'
n
disp ' '
disp 'Iterações executadas'
C
disp ' '
disp 'Aproximação numérica da raiz'
c
erro=abs(a-b);

E, executando o algoritmo, tenho que:

>> pp6

Esse programa encontra a menor raiz positiva de 2*cos(x)=exp(x)/2 com tol=10^(-4)

DICA: Pelo gráfico pode-se observar que ela está para x entre o.8 e 1.

Defina o intervalo inicial

a=0.8

Defina o intervalo final

b=1
Número de Iterações Necessárias

n=

11

Iterações executadas

C=

0.900000000000000

0.950000000000000

0.925000000000000

0.912500000000000

0.906250000000000

0.903125000000000

0.904687500000000

0.905468750000000

0.905078125000000

0.904882812500000

0.904785156250000

Aproximação numérica da raiz

c=

0.904785156250000

Desse modo, concluo que a menor raiz positiva da equação, com tol=10^(-4) é
0.904785156250000.

E.07) Seja a função f(x)=((x^2)/2)+x(ln(x)-1).

a) Construa seu gráfico em um intervalo adequado, colocando título, grade e nomeando os


eixos coordenados.

>> % Como ln(x) não existe para x<=0, o domínio é (0,inf]

x=0:0.01:10;

y=((x.^2)/2)+x.*(log(x)-1);

plot(x,y),grid,title('Gráfico da Função'),xlabel('Eixo das abcissas'),ylabel('Eixo das Ordenadas')


Gráfico da Função
70

60

50
Eixo das Ordenadas

40

30

20

10

-10
0 1 2 3 4 5 6 7 8 9 10
Eixo das abcissas

b) Obtenha os pontos críticos com auxílio de um método numérico.

Como os pontos críticos são dados onde a derivada da função é tem imagem zero. Calculo,
analiticamente, a derivada da função e encontro pela bissecção quais são suas raízes.

>> syms x y

>> f=((x.^2)/2)+x.*(log(x)-1);

>> diff(f)

ans =

x + log(x)

>> x=0:0.01:10;

dx=x+log(x);

plot(x,dx),grid
14

12

10

-2

-4

-6
0 1 2 3 4 5 6 7 8 9 10

>> axis ([0 1 -3 3])

-1

-2

-3
0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1

>> % A raiz se encontra entre 0.5 e 0.6


>> % Uso o algoritmo bi1 para encontrar a raiz para tolerância tol=10^(-4)

MFile

function [c,C,n,erro] = bi1(a,b,tol)


% Crio uma matriz que guardará os resultados

C=[];
n=0;

% Enquanto o módulo da diferença dos intervalos for maior que a


tolerância
while abs(a-b)>=tol
% Encontro o ponto médio do intervalo de a até b
c=(a+b)/2;
C=[C;c];
n=n+1;
% Encontro o resultado das duas imagens (de f(a) e f(b))
fa=a+log(a); % MUDAR AQUI A FUNÇÃO
fc=c+log(c); % MUDAR AQUI A FUNÇÃO
% Tenho que descobrir se o intervalo está para (a,c) ou (c,b), então
% verifico se a intersecção está entre a e c ou c e b
if fa*fc<0;
b=c;
else
a=c;
end
end
erro=abs(a-b);

Com a=0.5, b=0.6 e tol=1e-004, obtendo:

>> [c,C,n]=bi1(0.5,0.6,1e-004)

c=

0.567089843750000

C=

0.550000000000000

0.575000000000000

0.562500000000000

0.568750000000000

0.565625000000000

0.567187500000000

0.566406250000000

0.566796875000000

0.566992187500000
0.567089843750000

n=

10

Logo, o ponto crítico fica onde x= 0.567089843750000, para a tolerância estabelecida.

c) Indique, graficamente, os pontos encontrados.

x=0:0.01:10;

y=((x.^2)/2)+x.*(log(x)-1);

plot(x,y),grid,title('Gráfico da Função'),xlabel('Eixo das abcissas'),ylabel('Eixo das Ordenadas');

hold on

dx=x+log(x);

plot(x,dx,'r');

x=0.567089843750000;

y=((x.^2)/2)+x.*(log(x)-1);

plot(x,y,'m*')

Gráfico da Função
70

60

50
Eixo das Ordenadas

40

30

20

10

-10
0 1 2 3 4 5 6 7 8 9 10
Eixo das abcissas
Onde o gráfico azul representa a f(x), o gráfico vermelho, sua derivada e o ponto rosa é o
ponto crítico.

E.11) Um cano de comprimento L = 25 m e diâmetro d = 10 cm conduzindo vapor perde


calor para o ar ambiente e para as superfícies em sua vizinhança por convecção e
radiação. Se o fluxo total de calor por unidade de tempo Q emanando da superfície do
cano for medida, então a temperatura superficial Ts do cano pode ser determinada
pela seguinte equação:

( )
Q =πdL[h(Ts -Tar ) + εσSB Ts^4 –Tviz^4 ]
onde + ε = 0,8 é a emissividade da superfície do cano, e + σSB = 5,67*10^8 W/m2/K4 é a
constante de Stefan-Boltzmann. Se Q = 18405W, h =10W/m2/K e Tar = Tviz = 298K ,
determine a temperatura superficial do cano, Ts .

Substituindo os valores na equação, e tomando Ts = x, temos a seguinte equação, no


matlab:

>>x=-10000:0.01:10000;

>> d=0.1;

>> L=25;

>> h=10;

>> TAR=298;

>> TVIZ=TAR;

>> E=0.8;

>> QSB=5.67e-008;

>> Q=18405;

>> y=pi*d*L*((h*(x-TAR))+(E*QSB*((x.^4)-(TVIZ^4))))-Q;

>> plot(x,y),grid

>> axis([-800 500 -10000 10000])


4
x 10
1

0.8

0.6

0.4

0.2

-0.2

-0.4

-0.6

-0.8

-1
-800 -600 -400 -200 0 200 400

Observando o gráfico, podemos perceber que a função formada apresenta duas raízes. Mas
como a temperatura é dada na escala Kelvin, logicamente descartamos a raiz negativa (entre
-800 e -700).

Em seguida usamos um intervalo menor, focando a raiz que será resolução de nosso problema:

>> axis([410 430 -100 100]

100

80

60

40

20

-20

-40

-60

-80

-100
410 412 414 416 418 420 422 424 426 428 430

Usando uma adaptação do algoritmo tipo A de bissecção, encontramos, com uma tolerância
de 10^(-5), a solução de nosso problema.

MFile Bi1.m

function [c,C,n,erro] = bi1(a,b,tol)


% Crio uma matriz que guardará os resultados
C=[];
n=0;

% Defino as variáveis da função


d=0.1;
L=25;
h=10;
TAR=298;
TVIZ=TAR;
E=0.8;
QSB=5.67e-008;
Q=18405;

% Enquanto o módulo da diferença dos intervalos for maior que a


tolerância
while abs(a-b)>=tol
% Encontro o ponto médio do intervalo de a até b
c=(a+b)/2;
C=[C;c];
n=n+1;
% Encontro o resultado das duas imagens (de f(a) e f(b))
fa=pi*d*L*((h*(a-TAR))+(E*QSB*((a.^4)-(TVIZ^4))))-Q; % MUDAR
AQUI A FUNÇÃO
fc=pi*d*L*((h*(c-TAR))+(E*QSB*((c.^4)-(TVIZ^4))))-Q; % MUDAR
AQUI A FUNÇÃO
% Tenho que descobrir se o intervalo está para (a,c) ou (c,b), então
% verifico se a intersecção está entre a e c ou c e b
if fa*fc<0;
b=c;
else
a=c;
end
end
erro=abs(a-b);

Aplicando no Matlab, tenho:

>> format long


>> [c,C,n,erro] = bi1(300,500,1e-005)

c =

4.229530632495880e+002

C =

1.0e+002 *

4.000000000000000
4.500000000000000
4.250000000000000
4.125000000000000
4.187500000000000
4.218750000000000
4.234375000000000
4.226562500000000
4.230468750000000
4.228515625000000
4.229492187500000
4.229980468750000
4.229736328125000
4.229614257812500
4.229553222656250
4.229522705078125
4.229537963867188
4.229530334472656
4.229534149169922
4.229532241821289
4.229531288146973
4.229530811309815
4.229530572891235
4.229530692100525
4.229530632495880

n =

25

erro =

5.960464477539063e-006

Ou seja, a temperatura Ts do cano é aproximadamente 422.953K.

Você também pode gostar