30 de junho de 2010

Runge-Kutta ordem 4

Boa tarde Galera!!!

bom quero neste post atualizar o metodo de runge kutta, pois o primeiro que postei estava faltando algumas linhas de comando e outras linhas estavam incorretas... entao quero agradecer aos meus amigos da eng eletrica q ajudaram a corrigir o codigo!!!
ate onde testei o metodo funciona para qualquer funcao.

syms x y
f  = input ('Entre com a equação: ');
x0 = input ('Entre com o valor inicial para x: ');
xf = input ('entre com o valor final para x');
y0 = input ('Entre com o valor inicial y: ');
h  = input ('Entre com o passo desejado: ');
n  = (xf - x0)/h;

for i= 1:n
    k1 = h * subs(f,{x,y}, {x0,y0});
    k2 = h * subs(f,{x,y},{x0 + h/2, y0 +k1/2});
    k3 = h * subs(f,{x,y},{x0 + h/2, y0 +k2/2});
    k4 = h * subs(f,{x,y},{x0 + h, y0 +k3});
    ya= y0+ (1/6) * (k1+(2*k2)+(2*k3)+k4);
    x0 = x0 + h;
    y0 = ya;
    fprintf('y%.0f= %.10f.\n',n,ya)
   
end


Entao esta ai... agora certinhu... este projeto valeu 10 pro prof de cal numerico, e espero que ajude vcs...

beijinhus
adoro vcs

4 de junho de 2010

Metodo de Newton Raphson


Hoje vou postar aqui o primeiro trabalho de calculo numerico que fiz sobre o metodo de newton raphson, como estava aprendendo a usar o matlab a estrutura ficou extenção e sem muita opção de escolha pro usuario quanto as funções porem acredito que posso ajudar a galera que esta começando o estudo de calculo numerico pra entender como se faz o algoritmo... so lembrando nao copie e cole apenas pra ganhar nota... assim vc estara enganando a vc mesmo...

 % metodo_newton_raphson 2.0

    disp('Para FUNÇÃO   x^2 + x - 6     digite: 1');
    disp('Para FUNÇÃO   x^5 - 2x        digite: 2');
    disp('Para FUNÇÃO   x^2 + 15        digite: 3');
    disp('Para SAIR digite: 0');
    disp(' ');
  
    % interação com o usuario:
    oper = input('Digite o numero correspondente a funcao: ');
    a0 = input('   Entre com o limite inferior da funcao: ');
    b0 = input('   Entre com o limite superior da funcao: ');
    a  = input('   Entre com o numero de iteracoes a serem feitas: ' );
    b = 0;
    c = 0;
  
    % media dos limites:
    x = (a0 + b0)/2 ;
 
 
    if  oper==1 %funçao x^2+x-6
             n=0;
             while n
             form1 = x^3 - 2*x^2 - 3*x + 10;
             form2 = 3*x^2 - 4*x -3 ;
             raiz = x - (form1/form2);
             x = raiz;
             n = n+1;
                if n==a
                % disp ('raiz aproximada da função'); raiz;
                str = ['O valor aproximado da raiz é ' num2str(raiz)];
                disp(' ');
                disp (str);
                disp(' ');
                disp(' ');
                disp(' ');
                end
             end
 
    else if oper == 2 %x^5 - 2x
             n=0;
             while n
             form12 = x^5 - 2*x;
             form22 = 5* x^4 - 2;
             raiz2 = x - (form12/form22);
             x = raiz2;
             n = n+1;
                if n==a
                str = ['O valor aproximado da raiz é ' num2str(raiz2)];
                disp(' ');
                disp (str);
                disp(' ');
                disp(' ');
                disp(' ');
                end
             end
     else if oper == 3 %x^2 + 15
           
             n=0;
             while n
             form13 = x^2 + 15;
             form23 = 2* x;
             raiz3 = x - (form13/form23);
             x = raiz3;
             n = n+1;
                if n==a
                str = ['O valor aproximado da raiz é ' num2str(raiz3)];
                disp(' ');
                disp (str);
                disp(' ');
                disp(' ');
                disp(' ');
                end
             end
          end
        end
    end

beijo pra vcs
otimo feriado galera
adoro muitoo