Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import javax.swing.JOptionPane;
- import javax.swing.JTextField;
- import java.io.*;
- import java.text.DecimalFormat;
- public class Main {
- public static void main(String[] args) throws Exception{
- Scanner scan=new Scanner(System.in);
- DecimalFormat df=new DecimalFormat();
- df.applyPattern("0.0000");
- boolean loop=true;
- //caso eu precise quebrar o while mais pra frente.
- while(loop==true){
- int menu=printMenu();
- switch(menu){
- default:{
- Encerrar();
- break;
- }
- case 0:{
- Object n = JOptionPane.showInputDialog(null, "Por favor digite o número de pontos no gráfico:");
- String argn=((String) n);
- int contador_n=Integer.parseInt(argn);
- double x[]=new double[contador_n];
- double y[]=new double[contador_n];
- JTextField entrada_y=new JTextField();
- JTextField entrada_x=new JTextField();
- Object[] entrada={
- "X:",entrada_x,
- "Y:",entrada_y
- };
- double sumx=0,sumy=0;
- for(int i=0;i<contador_n;i++){
- int option = JOptionPane.showConfirmDialog(null, entrada, "Valor ("+(i+1)+"/"+contador_n+")", JOptionPane.OK_CANCEL_OPTION);
- if(option!=JOptionPane.OK_OPTION) Encerrar();
- String texto_x = entrada_x.getText();
- String texto_y = entrada_y.getText();
- x[i]=Double.parseDouble(texto_x);
- y[i]=Double.parseDouble(texto_y);
- sumx+=x[i];
- sumy+=y[i];
- sumx=Round(sumx);
- sumy=Round(sumy);
- JOptionPane.showMessageDialog(null,texto_x+" "+texto_y+"\n"+x[i]+" "+y[i]
- +"\n"+sumx+" "+sumy);
- entrada_x.setText("");
- entrada_y.setText("");
- }
- double sumx2=somatorio_x2(contador_n,x);
- double sumlny=somatorio_lny(contador_n,y);
- double sumxlny=somatorio_xlny(contador_n,x,y);
- double a1=calc_a1(contador_n,sumx,sumx2,sumlny,sumxlny);
- double a0=calc_a0(contador_n,sumx,sumx2,sumlny,sumxlny);
- double ymed=sumlny/contador_n;
- double erro=erroExp(contador_n,x,y,a0,a1,ymed);
- JOptionPane.showMessageDialog(null,"sumx="+sumx+"\nsumx2="+sumx2+"\nsumlny="+sumlny+
- "sumxlny="+sumxlny+"\n"+a0+" "+a1);
- double a=Math.pow(Math.E,a0);
- double b=a1;
- a=Round(a);
- b=Round(b);
- JOptionPane.showMessageDialog(null,"Y = "+a+"e^"+b+"x\n\n"+"R² = "+erro+"\nr = "+Math.sqrt(erro));
- }
- case 1:{
- Object n = JOptionPane.showInputDialog(null, "Por favor digite o número de pontos no gráfico:");
- String argn=((String) n);
- int contador_n=Integer.parseInt(argn);
- double x[]=new double[contador_n];
- double y[]=new double[contador_n];
- JTextField entrada_y=new JTextField();
- JTextField entrada_x=new JTextField();
- Object[] entrada={
- "X:",entrada_x,
- "Y:",entrada_y
- };
- double sumx=0,sumy=0;
- for(int i=0;i<contador_n;i++){
- int option = JOptionPane.showConfirmDialog(null, entrada, "Valor ("+(i+1)+"/"+contador_n+")", JOptionPane.OK_CANCEL_OPTION);
- if(option!=JOptionPane.OK_OPTION) Encerrar();
- String texto_x = entrada_x.getText();
- String texto_y = entrada_y.getText();
- x[i]=Double.parseDouble(texto_x);
- y[i]=Double.parseDouble(texto_y);
- sumx+=x[i];
- sumy+=y[i];
- sumx=Round(sumx);
- sumy=Round(sumy);
- JOptionPane.showMessageDialog(null,texto_x+" "+texto_y+"\n"+x[i]+" "+y[i]
- +"\n"+sumx+" "+sumy);
- entrada_x.setText("");
- entrada_y.setText("");
- }
- double sumx2=somatorio_x2(contador_n,x);
- double sumlnx=somatorio_lnx(contador_n,y);
- double sumlnxy=somatorio_lnxy(contador_n,x,y);
- double a1=calc_a1(contador_n,sumx,sumx2,sumlnx,sumlnxy);
- double a0=calc_a0(contador_n,sumx,sumx2,sumlnx,sumlnxy);
- double ymed=sumlnx/contador_n;
- double erro=erroLog(contador_n,x,y,a0,a1,ymed);
- JOptionPane.showMessageDialog(null,"sumx="+sumx+"\nsumx2="+sumx2+"\nsumlny="+sumlnx+
- "sumxlny="+sumlnxy+"\n"+a0+" "+a1);
- double a=a0;
- double b=a1;
- a=Round(a);
- b=Round(b);
- JOptionPane.showMessageDialog(null,"Y = "+a+"+"+b+"lnx\n\n"+"R² = "+erro+"\nr = "+Math.sqrt(erro));
- break;
- }
- case 2:{
- File file = new File("C:\\Users\\Lucas\\Desktop\\test.txt");
- BufferedReader br = new BufferedReader(new FileReader(file));
- String st;
- int cont=1,cont_x=0,cont_y=0;
- double sumx=0;
- int contador_n=0;
- double sumy=0;
- double x[]=new double[99999];
- double y[]=new double[99999];
- while ((st = br.readLine()) != null){
- cont++;
- contador_n++;
- double valor=Double.parseDouble(st);
- if(cont%2==0){
- x[cont_x]=valor;
- sumx+=valor;
- System.out.println("X = "+x[cont_x]);
- cont_x++;
- }else{
- y[cont_y]=valor;
- sumy+=valor;
- System.out.println("Y = "+y[cont_y]);
- cont_y++;
- }
- }
- contador_n=contador_n/2;
- double sumx2=somatorio_x2(contador_n,x);
- double sumlny=somatorio_lny(contador_n,y);
- double sumxlny=somatorio_xlny(contador_n,x,y);
- double a1=calc_a1(contador_n,sumx,sumx2,sumlny,sumxlny);
- double a0=calc_a0(contador_n,sumx,sumx2,sumlny,sumxlny);
- double ymed=sumlny/contador_n;
- double erro=erroExp(contador_n,x,y,a0,a1,ymed);
- JOptionPane.showMessageDialog(null,"sumx="+sumx+"\nsumx2="+sumx2+"\nsumlny="+sumlny+
- "sumxlny="+sumxlny+"\n"+a0+" "+a1);
- double a=Math.pow(Math.E,a0);
- double b=a1;
- a=Round(a);
- b=Round(b);
- JOptionPane.showMessageDialog(null,"Y = "+a+"e^"+b+"x\n\n"+"R² = "+erro+"\nr = "+Math.sqrt(erro));
- break;
- }
- case 3:{
- File file = new File("C:\\Users\\Lucas\\Desktop\\test.txt");
- BufferedReader br = new BufferedReader(new FileReader(file));
- String st;
- int cont=1,cont_x=0,cont_y=0;
- double sumx=0;
- int contador_n=0;
- double sumy=0;
- double x[]=new double[99999];
- double y[]=new double[99999];
- while ((st = br.readLine()) != null){
- cont++;
- contador_n++;
- double valor=Double.parseDouble(st);
- if(cont%2==0){
- x[cont_x]=valor;
- sumx+=valor;
- System.out.println("X = "+x[cont_x]);
- cont_x++;
- }else{
- y[cont_y]=valor;
- sumy+=valor;
- System.out.println("Y = "+y[cont_y]);
- cont_y++;
- }
- }
- contador_n=contador_n/2;
- double sumx2=somatorio_x2(contador_n,x);
- double sumlnx=somatorio_lnx(contador_n,y);
- double sumlnxy=somatorio_lnxy(contador_n,x,y);
- double a1=calc_a1(contador_n,sumx,sumx2,sumlnx,sumlnxy);
- double a0=calc_a0(contador_n,sumx,sumx2,sumlnx,sumlnxy);
- double ymed=sumlnx/contador_n;
- double erro=erroLog(contador_n,x,y,a0,a1,ymed);
- JOptionPane.showMessageDialog(null,"sumx="+sumx+"\nsumx2="+sumx2+"\nsumlny="+sumlnx+
- "sumxlny="+sumlnxy+"\n"+a0+" "+a1);
- double a=a0;
- double b=a1;
- a=Round(a);
- b=Round(b);
- JOptionPane.showMessageDialog(null,"Y = "+a+"+"+b+"lnx\n\n"+"R² = "+erro+"\nr = "+Math.sqrt(erro));
- break;
- }
- case 4:{
- Encerrar();
- break;
- }
- }
- }
- }
- public static double somatorio_lny(int contador_n, double y[]){
- double somatorio_lny=0;
- for(int i=0;i<contador_n;i++){
- somatorio_lny+=Math.log(y[i]);
- }
- somatorio_lny=Round(somatorio_lny);
- return somatorio_lny;
- }
- public static double somatorio_lnx(int contador_n, double x[]){
- double somatorio_lnx=0;
- for(int i=0;i<contador_n;i++){
- somatorio_lnx+=Math.log(x[i]);
- }
- somatorio_lnx=Round(somatorio_lnx);
- return somatorio_lnx;
- }
- public static double somatorio_x2(int contador_n, double x[]){
- double somatorio_x2=0;
- for(int i=0;i<contador_n;i++){
- somatorio_x2+=(x[i]*x[i]);
- }
- somatorio_x2=Round(somatorio_x2);
- return somatorio_x2;
- }
- public static double somatorio_xlny(int contador_n, double x[], double y[]){
- double somatorio_xlny=0;
- for(int i=0;i<contador_n;i++){
- somatorio_xlny+=(x[i]*(Math.log(y[i])));
- }
- somatorio_xlny=Round(somatorio_xlny);
- return somatorio_xlny;
- }
- public static double somatorio_lnxy(int contador_n, double x[], double y[]){
- double somatorio_lnxy=0;
- for(int i=0;i<contador_n;i++){
- somatorio_lnxy+=(x[i]*(Math.log(y[i])));
- }
- somatorio_lnxy=Round(somatorio_lnxy);
- return somatorio_lnxy;
- }
- public static double calc_a0(int n,double x,double x2,double lny,double xlny){
- double a0 = (x2*lny - xlny*x)/(n*x2 - x*x);
- return a0;
- }
- public static double calc_a1(int n, double x, double x2, double lny, double xlny){
- double a1 = (n*xlny - x*lny)/(n*x2 - x*x);
- return a1;
- }
- public static int printMenu(){
- Object[] options = { "Exponencial", "Logarítmico"};
- Object selected = JOptionPane.showOptionDialog(null, "Escolha o método desejado: ", "Menu",
- JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
- null, options, options[0]);
- int menu=((Integer) selected);
- if(menu==0){
- Object[] options2 = { "Manual", "Importar arquivo"};
- Object selected2 = JOptionPane.showOptionDialog(null, "Escolha o método desejado: ", "Menu",
- JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
- null, options2, options[0]);
- int menu2=((Integer) selected2);
- if(menu2==0){
- return 0;
- } if(menu2==1) return 2;
- else return 10;
- }if(menu==1){
- Object[] options2 = { "Manual", "Importar arquivo"};
- Object selected2 = JOptionPane.showOptionDialog(null, "Escolha o método desejado: ", "Menu",
- JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE,
- null, options2, options[0]);
- int menu2=((Integer) selected2);
- if(menu2==0){
- return 1;
- } if(menu2==1) return 3;
- } else return 10;
- return 10;
- }
- public static void Encerrar(){
- JOptionPane.showMessageDialog(null,"Adeus!");
- System.exit(0);
- }
- public static double Round(double valor){
- valor=valor*100000;
- valor = Math.round(valor);
- valor=valor/100000;
- return valor;
- }
- public static double erroExp(int n, double x[], double y[], double a0, double a1, double ymed){
- double St=0,Sr=0,erro,t,r;
- for(int i=0; i<n;i++){
- t=(Math.log(y[i])-ymed)*(Math.log(y[i])-ymed);
- r=(Math.log(y[i])-a0-a1*x[i])*(Math.log(y[i])-a0-a1*x[i]);
- St+=t;
- Sr+=r;
- System.out.println(St+"\t"+Sr+"\t"+y[i]+"\t"+a0+"\t"+a1);
- }
- erro=St-Sr;
- erro=erro/St;
- System.out.println(erro);
- return erro;
- }
- public static double erroLog(int n, double x[], double y[], double a0, double a1, double ymed){
- double St=0,Sr=0,erro,t,r;
- for(int i=0; i<n;i++){
- t=(y[i]-ymed)*(y[i]-ymed);
- r=(y[i]-a0-a1*Math.log(x[i]))*(y[i]-a0-a1*Math.log(x[i]));
- St+=t;
- Sr+=r;
- System.out.println(St+"\t"+Sr+"\t"+y[i]+"\t"+a0+"\t"+a1);
- }
- erro=St-Sr;
- erro=erro/St;
- System.out.println(erro);
- return erro;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement