Bel. Ciências da Computação
#include
#include
float f(float x) { return pow(x,2)-5*x+6;
}
float der(float x) { return 2*x-5; // derivada de f(x).
}
int main() { float eps, x0, *iter; // erro, ponto inicial, vetor iterações. int i, numiter; // iteração atual, número de iterações. printf("Método de Newton-Rhapson para o zero da função f(x).\n"); printf("Digite o erro: \n"); scanf("%f",&eps); printf("Digite o número máximo de iterações?\n"); scanf("%d", &numiter); printf("Digite o X0 inicial? \n"); scanf("%f", &x0); // Alocar dinâmicamente memória para o vetor das iterações. iter = malloc(sizeof(float) * numiter); // Condições iniciais. iter[0] = x0; i = 0; // Iterações. while(f(iter[i]) > eps) { // Excedeu o nosso limite de iterações. if(i > numiter) { printf("Não convergiu em %d iterações!!!\n", numiter); printf("Provavelmente f'(x) está errada.\n");
} iter[i+1] = iter[i] - f(iter[i])/der(iter[i]); i++; } printf("X ~= %f ", iter[i]); printf("\nForam feitas %d iterações.\n",i);
}
Método de Iteração Linear
Código para Matlab
g=inline('(5*x-1).^(1/3)'); x=2.1; for i=1:10 x=g(x); display(['x(', num2str(i),')= ', num2str(x,8)]); end display('Após 10 iterações a aproximação encontrada é'); x r=x-g(x) norm_residuo=norm(r) %Jacob Gauss
format short;
% Dados de entrada
A=[10 1 -1; 1 10 1; 2 -1 10] b=[10 12 11]' x0=[0 0 0]' % solução inicial
% Metodo de Jacobi
D=diag(diag(A)) % matriz com elementos da diagonal de A
C =A-D % A= D + L + U -> C = L + U = A - D
Gj=-inv(D) * C % matriz de iteração de Jacobi cj= inv(D) * b x1 = Gj * x0 + cj x2 = Gj * x1 + cj x3 = Gj * x2 + cj x4 = Gj * x3 + cj x5 = Gj * x4 + cj maxit=5 display (['Após k=', num2str(maxit),' iterações a solução aproximada pelo método de Jacobi é'])
x=x5