Exercícios Resolvidos de Cálculo Numérico

Classificado em Matemática

Escrito em em português com um tamanho de 14,82 KB

Prova A - Área 1

  • Questão 1 (2.5 pontos)

    Considere a função

    F(x, y) = e(x2+y−2) + x2ln(y)

    a) (0.9) Suponha que x = 1 ± 10% e y = 0,2 ± 10%. Calcule F e a incerteza relativa associada.

    b) (0.9) Suponha que x = 5 ± 10% e y = 0,7 ± 10%. Calcule F e a incerteza relativa associada.

    c) (0.7) Se você tivesse que diminuir a incerteza relativa de F pela metade e pudesse melhorar a medida de apenas uma das variáveis, qual delas você escolheria? Explique por quê? Analise cada um dos itens a) e b).

    Resolução:

    //Questão 1 da prova do Grupo 1 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    // Definindo a função e suas derivadas
    deff('z=dF_x(x,y)','z=2*x*exp(x^2+y-2)+2*x*log(y)')
    deff('z=F(x,y)','z=exp(x^2+y-2)+x^2*log(y)')
    deff('z=dF_y(x,y)','z=exp(x^2+y-2)+x^2/y')
    //Item a)
    //Avaliando no ponto (1,0.2)
    A1=F(1,0.2)
    A2=dF_x(1,0.2)
    A3=dF_y(1,0.2)
    //Calculando os erros
    Erroa=abs(A2)*0.1+abs(A3)*0.02
    Erro_rela=Erroa/abs(A1)
    ////////////////////////////////////////////////////////////////////////////
    //Item b)
    //Avaliando no ponto (5,0.7)
    A4=F(5,0.7)
    A5=dF_x(5,0.7)
    A6=dF_y(5,0.7)
    //Calculando os erros
    Errob=abs(A5)*0.5+abs(A6)*0.07
    Erro_relb=Errob/abs(A4)
    ///////////////////////////////////////////////////////////////////////////
    //Imprimindo os resultados
    mprintf('F(1,0.2)=%f \n Dfx=%f \n Dfy=%f \n Erro=%f \n Erro_rel=%f \n \n',A1, A2,A3,Erroa,Erro_rela)
    mprintf('F(5,0.7)=%f \n Dfx=%f \n Dfy=%f \n Erro=%f \n Erro_rel=%f \n',A4,A5,A6,Errob,Erro_relb)
  • Questão 2 (3.0 pontos)

    Considere o problema de calcular os pontos fixos da função

    Φ(x) = e(x2/5 −1)

    a) (0.5) Estime graficamente os dois pontos fixos da função.

    b) (1.0) Use o teorema do ponto fixo para classificar quanto à estabilidade cada um dos pontos fixos.

    c) (1.5) Calcule cada um dos pontos fixos com precisão de 5 × 10-6 (Dica: Use outro método numérico no ponto fixo instável).

    Resolução:

    //Questão 2 da prova do Grupo 1 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Item a)
    deff('y=phi(x)','y=exp(x^2/5-1)')
    x=[-4:0.05:4]
    plot(x,phi(x),x,x); xgrid(2)
    //Os pontos fixos são aproximadamente 0.4 e 3.3.
    //Item b
    //definindo a derivada da phi
    deff('y=dphi(x)','y=2*x*exp(x^2/5-1)')
    // use a derivada definida acima para verificar que a derivada de phi é maior do que 1 para todo x no intervalo
    //[3,3.5] e menor que 1 para todo x no intervalo
    //[0.3, 0.5]. Portanto o ponto fixo perto de 0.4 é estável e o ponto fixo perto de 3.5 é instável.
    //Item c)
    //Calculando as raízes usando o método das secantes (pois não precisamos )
    //Para usar o método da secante para calcular ponto fixos de f precisamos definir a função h(x)=phi(x)-x
    deff('y=h(x)','y=phi(x)-x')
    x1=pontofixo(phi,0.3,0.00001,50);
    x2=secante(h,3,3.5,0.00001,50);
    //Imprimindo os resulatdos
    mprintf('\n \n Os pontos fixos são: %f e %f.',x1,x2)
    //O programa responderá "Os pontos fixos são: 0.378577 e 3.315598."
  • Questão 3 (2.5 pontos)

    Calcule o retângulo de menor área que tem lados paralelos aos eixos coordenados, um vértice na origem e outro vértice sobre a curva

    y = 1/(x − 1) − (x − 5)e(−x+3) + 1, x > 1

    Resolução:

    //Questão 3 da prova do Grupo 1 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Definindo a função e sua derivada
    deff('y=A(x)','y=(1 ./(x-1)-(x-5).*exp(-x+3)+1).*x')
    deff('y=dA(x)','y=(-1 ./(x-1).^2+(x-5).*exp(-x+3)-exp(-x+3)).*x+(1 ./(x-1)-(x-5).*exp(-x+3)+1)')
    //Plotando o gráfico no intervalo [3,9], vocês podem plotar primeiro no intervalo [1.1,9] e verificar que o mínimo está
    //após o 3 e arrumar a janela para o intervalo [3,9] para ficar mais fácil de visualizar o ponto de mínimo.
    x=[3:0.1:9]
    plot(x,A(x),x,dA(x)); xgrid
    // Observando o gráfico da derivada podemos estimar que a raiz é aproximadamente 4.7.
    //Calculando o mínimo (a raiz da derivada)
    x1=bissec(dA,4,6,0.000001)
    A1=A(x1);
    //Imprimindo os resultados
    mprintf('\n \n O ponto de mínimo relativo é aproximadamente %f e a área mínima é aproximadamente %f',x1,A1)
    // O programa vai responder "O ponto de mínimo relativo é aproximadamente 4.791602 e a área mínima é aproximadamente 6.221796".
  • Questão 4 (2.5 pontos)

    Considere a função f(x) = e−x + sen(10x)/10 , x > 0.

    a) Encontre os dois primeiros máximos relativos positivos de f usando o método de Newton. Escreva a iteração do método de Newton.

    b) Encontre os dois primeiros mínimos relativos positivos de f usando o método das secantes. Escreva a iteração do método das secantes

    Resolução:

    //Questão 4 da prova do Grupo 1 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Definindo a função e esboçando o gráfico de f
    deff('y=f(x)','y=exp(-x)+sin(10*x)/10')
    x=[0:0.05:5]
    plot(x,f(x)); xgrid
    // Observando o gráfico podemos estimar que os pontos de máximo são 0.7 e 1.3 e os de mínimo são 0.5 e 1.1.
    //Para encontrar os pontos de extremo relativo precisamos procurar pelas raízes da derivada da função. Vamos, então, definir a derivada.
    deff('y=df(x)','y=-exp(-x)+cos(10*x)')
    //Item a)
    //definindo a segunda derivada (derivada da função que buscamos as raízes) para podermos usar Newton.
    deff('y=ddf(x)','y=exp(-x)+10*sin(10*x)')
    max_1=newton(df,ddf,1.6,5*10^(-5),50)
    max_2=newton(df,ddf,1.35,5*10^(-5),50)
    // O método de Newton não converge para os pontos de máximo. Vamos usar bisseção
    max_1=bissec(df,0.55,0.8,5*10^(-5))
    max_2=bissec(df,1.2,1.5,5*10^(-5))
    //Item b)
    //Calculando os mínimos
    min_1=secante(df,0.3,0.6,5*10^(-5),50);
    min_2=secante(df,1,1.2,5*10^(-5),50);
    //Imprimindo os resultados
    mprintf('\n \n Os dois primeiros pontos de máximo relativo positivos são x1=%f e x2=%f \n e os primeiros pontos de mínimo relativo positivos são x3=%f e x4=%f',max_1,max_2,min_1,min_2)
    // O programa vai responder "Os dois primeiros pontos de máximo relativo positivos são x1=0.735417 e x2=1.388503 e os primeiros pontos de mínimo relativo positivos são x3=0.533890 e x4=1.132370 ".

Prova B - Área 1

  • Questão 1 (2.5 pontos)

    Resolva cada item

    a) (1.5) Sabendo que x = 2 ± 2%, y = 10 ± 20% e F(x, y) = (2x + y)/(y2+ 11)e−x , calcule o valor de F(x, y) e seu respectivo erro relativo.

    b) (1.0) Calcule quantos dígitos binários são necessários para escrever o número (9876543210)11 na base 2.

    Resolução:

    //Questão 1 da prova do Grupo 2 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Item a)
    // Definindo a função e suas derivadas
    deff('z=F(x,y)','z=(2*x+y)*exp(-x)/(y^2+11)')
    deff('z=dF_x(x,y)','z=(2-2*x-y)*exp(-x)/(y^2+11)')
    deff('z=dF_y(x,y)','z=(-4*x*y-y^2+11)*exp(-x)/(y^2+11)^2')
    //Avaliando no ponto (2,10)
    A1=F(2,10)
    A2=dF_x(2,10)
    A3=dF_y(2,10)
    //Calculando os erros
    Erro=abs(A2)*0.04+abs(A3)*2
    Erro_rel=Erro/A1
    //Imprimindo os resultados
    mprintf('a) F(2,10)=%f e o erro relativo associado é %f.\n\n',A1,Erro_rel)
    //Item b)
    N=ceil(log2(9*11^9+8*11^8+7*11^7+6*11^6+5*11^5+4*11^4+3*11^3+2*11^2+12))
    //Imprimindo o resultado
    mprintf('b) São necessários %d dígitos.',N)
  • Questão 2 (3.0 pontos)

    Considere a função

    f(x) = (1 − x2)e(−x2) − e(−x−2)

    a) (0.6) Estime graficamente as raízes da função f(x).

    b) (1.2) Use o método de Newton com x0 = 3 e discuta sobre a convergência. Interprete geometricamente o fenômeno.

    c) (1.2) Calcule as duas raízes com precisão de 5 × 10-5

    Resolução:

    //Questão 2 da prova do Grupo 2 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Item a)
    deff('y=f(x)','y=(1-x.^2).*exp(-x.^2)-exp(-x-2)')
    x=[-2:0.1:4]
    plot(x,f(x)); xgrid
    // Observando o gráfico podemos estimar que uma das raízes é aproximadamente -0,75 e a outra aproximadamente 1.
    //Item b)
    deff('y=der_f(x)','y=(-4*x+2*x.^3).*exp(-x.^2)+exp(-x-2)')
    newton(f,der_f,3,5*10^(-5),50)
    // O método diverge, a reta tangente de f(x) em x=3 é quase paralela, ou seja, tem coeficiente angular muito próximo de
    //zero (olhe a fórmula do método iterativo de Newton se você não sabe qual o impacto da derivada no ponto ser muito próximo de zero)
    //Item c)
    x1=newton(f,der_f,-1,5*10^(-5),50);
    x2=newton(f,der_f,1,5*10^(-5),50);
    //Imprimindo os resultados
    mprintf('\n \n A primeira raiz é aproximadamente %f e a segunda é aproximadamente %f',x1,x2)
    // O programa vai responder "A primeira raiz é aproximadamente -0.725656 e a segunda é aproximadamente 0.934202".
  • Questão 3 (2.0 pontos)

    Calcule a distância entre os dois pontos de interseção da curva

    y = senh(x) − x com a elipse (x − 1)2/11 + y2 = 1.

    Use precisão de 5 × 10-5

    Resolução:

    //Questão 3 da prova do Grupo 2 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Definindo as funções e estimando as intersecções
    deff('y=f(x)','y=sinh(x)-x')
    deff('y=g(x)','y=sqrt(1-(x-1).^2/11)')
    deff('y=h(x)','y=-sqrt(1-(x-1).^2/11)')
    x=[-2:0.1:3]
    plot(x,f(x),x,h(x),x,g(x)); xgrid
    //Pelo gráfico podemos ver que a abcissa dos pontos de interseção são aproximadamente -1,5 e 1,7
    // Definindo as funções diferenças
    deff('y=z1(x)','y=sinh(x)-x-sqrt(1-(x-1).^2/11)')
    deff('y=z2(x)','y=sinh(x)-x+sqrt(1-(x-1).^2/11)')
    //Procurando pelas raízes das funções diferenças das curvas (que é equivalente a procurar pela interseção entre elas)
    r1=bissec(z2,-1.6,-1.4,0.00001);
    r2=bissec(z1,1.6,1.8,0.00001);
    //Calculando as ordenadas dos pontos de interseção
    y1=f(r1)
    y2=f(r2)
    //Calcundo a distancia entre as intersecções
    dist=sqrt((r1-r2)^2+(y1-y2)^2)
    //Imprimindo os resultados
  • Questão 4 (2.5 pontos)

    Considere a equação

    cosh(x)/x + 1 = 2 cos(x)e(−x2)/x

    a) (0.5) Estime graficamente as duas soluções da equação.

    b) (1.0) Mostre que os pontos fixos da função

    φ(x) = 2 cos(x)e(−x2) − cosh(x)

    são soluções da equação e use o teorema do ponto fixo para discutir sobre a convergência do esquema

    xn+1 = φ(xn)

    x0 = 0.4

    c) (1.0) Calcule as duas soluções com precisão de 10-6

    Resolução:

    //Questão 4 da prova do Grupo 2 - 2014-2 - Turma A Cálculo Numérico
    // Prof. Jean Carlo Pech de Moraes
    //Item a)
    deff('y=phi(x)','y=2*cos(x).*exp(-x.^2)-cosh(x)')
    x=[-2:0.05:2]
    plot(x,phi(x),x,x); xgrid(2)
    //Os pontos fixos são aproximadamente 0.4 e 0.9.
    //Item b
    pontofixo(phi,0.4,0.000001,50);
    // O método do ponto fixo não converge, observe que a phi'(0,4) é maior que 1 em valor absoluto.
    //Item c)
    //Calculando as raízes usando o método das secantes (pois não precisamos )
    //Para usar o método da secante para calcular ponto fixos de f precisamos definir a função h(x)=phi(x)-x
    deff('y=h(x)','y=2*cos(x).*exp(-x.^2)-cosh(x)-x')
    x1=secante(h,0.3,0.8,0.00001,50);
    x2=secante(h,-0.8,-0.3,0.00001,50);
    //Imprimindo os resulatdos
    mprintf('\n\n Os pontos fixos são: %f e %f.',x1,x2)
    //O programa responderá "Os pontos fixos são: 0.426256 e -0.911666."

Prova 2 - Grupo 1

  • Questão 1

    Considere o sistema de equações lineares:

    (2j)x_j-x_{j+1}+3x_{j+1}-5x_{j+3}=10ln(j+1) para j=1...30

    x_{31}=3x_{30}-2x_{29}

    x_{32}=3x_{31}-2x_{30}

    x_{33}=3x_{32}-2x_{31}

    a) Escreva uma rotina que monte a matriz dos coeficientes desse sistema. Calcule o número de condicionamento dessa matriz.

    b) Use o método de Gauss-Seidel para calcular uma solução aproximada do sistema usando 30 passos. Justifique se é possível garantir a convergência.

    c) Escreva uma rotina que calcule a norma 1 do vetor que contém todos os pivôs da matriz escalonada, usando pivotamento parcial, do sistema. Dica: você pode usar a rotina elimgausspp para determinar a matriz escalonada.

    A=zeros(33,33)
    for i=1:30
    A(i,i)=2*i;
    A(i,i+1)=2;
    A(i,i+3)=-5;
    end
    A(31,29)=2;
    A(31,30)=-3;
    A(31,31)=1;
    A(32,30)=2;
    A(32,31)=-3;
    A(32,32)=1;
    A(33,31)=2;
    A(33,32)=-3;
    A(33,33)=1;
    c=cond(A)
    mprintf('O número de condiconamento é %f',c)
    C=zeros(33,34);
    C(:,1:33)=A(:,1:33)
    for i=1:30
    C(i,34)=10*log(i+1)
    end
    chute=zeros(33,1)
    x=gauss_siedel(C,chute,0.001,30)
    mprintf('b)')
    mprintf('%f',x)

P3 - Grupo 1

  • Questão 1 (Problema de Contorno)

    Considere o seguinte problema de contorno não linear de segunda ordem:

    -u'' +uu'/100 = e-x, 0<x<3

    u(0) = 100

    u'(3) = -5

    Usando a malha Xj = (j-1)h e j = 1,...,31. Aproxime a derivada segunda por um esquema de segunda ordem, a derivada primeira no interior do domínio por um esquema de segunda ordem e a derivada na fronteira por um esquema de primeira ordem para transformar a equação diferencial em um sistema de equações não lineares. Resolva o sistema usando o método de Newton. Calcule o valor de u(x) nos pontos x = 0.5 e x = 1.5 e apresente sua resposta com seis dígitos significativos.

    //N=31
    h=3/30;
    x=zeros(31,1);
    for i=1:31
    x(i)=0+(i-1)*h
    end
    function y=F(u)
    y=zeros(31,1)
    y(1)=u(1)-100;
    for i=2:30
    y(i)=-u(i-1)+2*u(i)-u(i+1)+h*u(i)*u(i+1)/200-h*u(i)*u(i-1)/200-h^2*exp(-x(i))
    end
    y(31)=u(31)-u(30)+5*h
    endfunction
    function y=JF(u)
    y=zeros(31,31)
    y(1,1)=1;
    for i=2:30
    y(i,i-1)=-1-h*u(i)/200
    y(i,i)=2+h*(u(i+1)-u(i-1))/200
    y(i,i+1)=-1+h*u(i)/200
    end
    y(30,31)=-1
    y(31,31)=1
    endfunction
    chute=zeros(31,1)
    xatual=chute
    xseg=zeros(31,1)
    for i=1:125
    xseg=xatual-inv(JF(xatual))*F(xatual)
    xatual=xseg
    end
    mprintf('\nu(0,5)=%f e u(1,5)=%f\n',xseg(6),xseg(16))
    plot2d(x,xseg,0)
  • Questão 2 (PVI)

    Considere a equação:

    4y' + 10y = 4cos(t)

    y(0) = 2

    A) Aproximações de y(t) com Euler ou Runge Kutta

    function z=F(y,t)
    z=cos(t)-5/2*y
    endfunction
    y_0=2
    t0=0
    tf=6
    N=120
    sol1=Euler(F,t0,tf,N,y_0)
    sol2=RK2(F,t0,tf,N,y_0)
    mprintf('\nUsando Euler, temos que y(1)=%f, y(2)=%f, y(3)=%f, y(4)=%f, y(5)=%f, y(6)=%f.\nUsando RK2, temos que y(1)=%f, y(2)=%f, y(3)=%f, y(4)=%f, y(5)=%f, y(6)=%f.',sol1(21),sol1(41), sol1(61), sol1(81), sol1(101), sol1(121), sol2(21),sol2(41), sol2(61), sol2(81), sol2(101), sol2(121))

    B) Valor e Ponto de Mínimo no Intervalo [0,6]

    //b)
    cont=1
    minimo=sol1(1)
    for i=2:N
    if minimo>sol1(i) then cont=i
    minimo=sol1(i)
    end
    end
    t_min=0+0.05*cont
    valor_min=sol1(cont)
    mprintf('\nO valor mínimo é %f e o ponto de mínimo é t=%f]',valor_min, t_min)

Entradas relacionadas: