Pessoal, eu preciso de ajuda, tenho trabalhos pra entregar de Calculo Numérico e tenho que escrever o pseudocódigo, não só pra inserir no relatório mas tbm pro pessoal do meu grupo entender, pois eles não sabem programar e pra facilitar eu uso java e um que quis começar a aprender programação, escolheu Python, então por favor me ajudem a escrever o pseudocodigo:
Eu ainda tenho mais 4 trabalhos pra fazer o pseudocodigo mas, se me ajudarem nesse, acredito que consigo fazer os outros tranquilo.
package calculonumerico;
import static java.lang.Math.cos;
import static java.lang.Math.log;
import static java.lang.Math.pow;
import static java.lang.Math.sin;
import java.util.Scanner;
public class AproximacaoDeRaizes {
static double xA, xB, tolerancia, nDeIteracoes;
static double[] resultadoBissecao = new double[3];
static double[] resultadoNewton = new double[3];
static Scanner input = new Scanner(System.in);
private static double funcao(double x) {
//retorna o resultado da função com o valor x inserido
double y = pow(x,2)/4 - cos(x);
return y;
}
private static double funcaoI(double x) {
//retorna o resultado da derivada da função com o valor x inserido
return x/2 + sin(x);
}
public static void main(String[] args) {
//inicia o código
//caso em a = 1 e b = 1.5
//caso em a = 1.1 e b = 1.3
definirIntervalo();
System.out.println("Numero de Iterações minimas: " + nDeIteracoes);
System.out.println("f(a) = " + funcao(xA));
System.out.println("f(b) = " + funcao(xB));
System.out.println("-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-@-");
metodoDaBissecao();
metodoNewtonRaphson();
System.out.println("_______________Resultados_________________");
System.out.println("Método da Bisseção");
resultadoFinal((int)resultadoBissecao[0], resultadoBissecao[1], resultadoBissecao[2]);
System.out.println("__________________________________________");
System.out.println("Método Newton-Raphson");
resultadoFinal((int)resultadoNewton[0], resultadoNewton[1], resultadoNewton[2]);
}
private static void definirIntervalo() {
//Define um intervalo (A,B)
System.out.println("Defina um valor A: ");
xA = input.nextDouble();
System.out.println("Defina um valor B: ");
xB = input.nextDouble();
if (condicaoDasEstimativas(funcao(xA), funcao(xB))) {
tolerancia = pow(10,-5);
nDeIteracoes = (int)(log((xB - xA)/tolerancia)/log(2) + 1);
} else {
erroDeValores(funcao(xA), funcao(xB));
definirIntervalo();
}
}
private static void metodoDaBissecao() {
//Aplica o método da Bissecao e guarda o numero de iterações feitas, o x encontrado e o valor da f(x);
double x, xUm, xDois;
int iteracao = 0;
xUm = xA;
xDois = xB;
System.out.println("Começo da Bissecao:_____");
do {
System.out.println("@Entrada----------------------");
System.out.println("x1 = " + xUm);
System.out.println("x2 = " + xDois);
iteracao++;
x = estimativaX(xUm, xDois);
if(funcao(x) > 0) {
if(funcao(xUm) < 0) {
xDois = xUm;
}
} else {
if(funcao(xUm) > 0) {
xDois = xUm;
}
}
xUm = x;
valoresDaIteracao(x, iteracao, funcao(x));
} while(criterioDeParada(funcao(xUm)));
resultadoBissecao[0] = iteracao;
resultadoBissecao[1] = x;
resultadoBissecao[2] = funcao(x);
}
private static void metodoNewtonRaphson() {
//Aplica o método de Newton-Raphson e guarda o numero de iterações, o x encontrado e o valor de f(x);
double xM, xUm, xDois;
int interacao = 0;
xUm = xA;
xDois = xB;
System.out.println("Começo de Newton-Raphson:_____");
do {
System.out.println("@Entrada----------------------");
System.out.println("x1 = " + xUm);
System.out.println("x2 = " + xDois);
if(interacao > 0) {
xUm = xDois;
} else if(interacao == 0) {
xUm = estimativaX(xUm, xDois);
}
interacao++;
xDois = estimativaX(xUm);
valoresDaIteracao(xDois, interacao, funcao(xDois));
} while(criterioDeParada(funcao(xDois)));
resultadoNewton[0] = interacao;
resultadoNewton[1] = xDois;
resultadoNewton[2] = funcao(xDois);
}
private static boolean condicaoDasEstimativas(double yUm, double yDois) {
//Retorna true se a raiz estiver entre os dois y;
return yUm*yDois < 0;
}
private static double estimativaX(double a, double b) {
//Realiza a estimativa de x
return (a+b)/2;
}
private static double estimativaX(double xM) {
//Realiza a estimativa de x para o método de Newton-Raphson;
return xM - funcao(xM)/funcaoI(xM);
}
private static boolean criterioDeParada(double y) {
//Verifica se o y encontrado é menor que a tolerancia;
if(y < 0) {
y = y*(-1);
}
return y >= tolerancia;
}
private static void valoresDaIteracao(double x, int iteracoes, double y) {
//Imprime a iteração atual e seus valores de x e f(x);
System.out.println("@Saída------------------------");
System.out.println("x = " + x);
System.out.println("interação = " + iteracoes);
System.out.println("f(x) = " + y);
}
private static void erroDeValores(double yUm, double yDois) {
//Alerta se entre os pontos a e b não se tem certeza de existir uma raiz;
System.out.println("f(a) = " + yUm);
System.out.println("f(b) = " + yDois);
System.out.println("Mude o A ou o B!");
}
private static void resultadoFinal(int iteracoes, double x, double y) {
//imprime o valor aproximado da raiz e o valor da f(x);
System.out.println("Estimativa x" + iteracoes + " = " + x);
System.out.println("f(x"+ iteracoes+") = " + y);
}
}