Jump to content

Archived

This topic is now archived and is closed to further replies.

Ignotum Peverel

cálculo de integrais em pyton

Recommended Posts

Como posso realizar um programa capaz de calcular uma integral pelo método de monte carlo?

Iniciei o programa dessa maneira:

from __future__ import print_function, division
import numpy as np
import matplotlib.pyplot as plt

%matplotlib inline

#imagem
a = -1
b = 1

#função
xr = np.linspace(a,b,1000)
yr = xr

c = np.min(yr)
d = np.max(xr)

n = int(input("Insira o número de pontos que deseja gerar aleatoriamente: "))

#número de rodadas
r = int(input("Insira o número de rodadas: "))

xa = np.random.random(n)*(b-a)+a
xb = np.random.random(n)*(d-c)+c

if #adicionar a condição para o cálculo da integral

print("O número total de pontos gerados é: ",(len(xa)))
print("O número de pontos contidos na área desejada é: ",(j))

plt.plot(xr,yr)
plt.plot(xa,xb,"+")
plt.show()

 

preciso fazer de modo com que o programa se repita um numero r de vezes para poder calcular a integral dada pela média das estimativas, o desvio padrão das estimativas, o desvio padrão da média para a estimativa, lembrando que a integral nada mais é que a área desejada da função. Como posso criar a condição "if" para que ele realize o cálculo e repita o programa r vezes?

Share this post


Link to post
Share on other sites

  • Similar Content

    • By Thay Andrade
      então, queria uma ajuda, se ela existir, é que estou com um código para uma apresentação de cálculo II, ele funciona "normal". Entretanto, gostaria de saber se tem alguma forma de entrar com a função que se deseja integrar direto pelo console/prompt de comando, pois toda vez que quero colocar uma nova função, tenho que adicionar ela mexendo no código...desde ja obrigada, e se coloquei algo errado por a que  é que sou nova a que e não sei como funciona, desculpa qualquer coisa. Segue o código:
       
      #include<iostream>
      #include<iomanip>
      //#include<stdlib.h>
      #include<math.h>
      #include<locale.h>
      #define PI 3.14159265
      using namespace std;
      int main(){
          setlocale(LC_ALL,"portuguese");
          cout<<"-------CÁLCULO DE ÁREA POR INTREGRAL---------\n";
          cout<<"\n---------REGRA DO PONTO MÉDIO----------\n\n";
          float a,b,n,d,x[100],v[101];
          int o,i;
          char op;
          do{
              do{
                  do{
                      cout<<"\tDigite o intervalo [a,b]:\n\n";
                      cout<<"***********************";
                      cout<<"\n\tOBS: a <= b.\n";
                      cout<<"***********************\n";
                      cout<<"a = ";
                      cin>>a;
                      cout<<"\nb = ";
                      cin>>b;
                  }while(a > b);
       cout<<"\n\nOscs[a,b] = " <<fixed <<setprecision(2)<<a<<"e" <<setprecision(2)<<b<<"Digit  ou[n]\n";
                  fflush(stdin);op = getchar(); system ("cls");
              }while(op == 'n' || op == 'N');
              
              do{
                  do{
                      cout<<"\nDIGITE O NÚMERO DE RETÂNGULOS(subintervalos) (n = 100max)?\n\n";
                      cout<<"=> ";
                      cin>>n;
                      if(n>100){
                          cout<<"Valor inválido";
                          return op;
                      }
                      }while(n<1);
          
                  cout<<"\nDigite uma das opcões de funcão que deseja resolver: \n";
                  cout<<"[1] Raiz de x";
                  cout<<"\n[2] -1/x²";
                  cout<<"\n[3] 3x² + 2";
                  cout<<"\n[4] 5*x/(5*x^4+3)^(1/4)";
                  cout<<"\n[5] (3*x² + 3*x - 6)/(x² + 2*x -3)";
                  cout<<"\n[6] sin (x*PI/180)";
                  cout<<"\n[7] cos ( x * PI / 180.0 )";
                  cout<<"\n[8] tan ( x * PI / 180.0 )";
                  cout<<"\n[9] (3x²-4)\n\n";
                  cout<<"opcão: ";
                  cin>>o;
                  if(o>9){ // verifica o numero da função digitada
                      cout<<"valor inválido";
                      return op;
                  }else if(o==0){
                      cout<<"valor inválido";
                      return op;
                  }
                  cout<<"\n\nEstá tudo correto? ( para sim e [n] para não) ";
                  fflush(stdin);
                  op = getchar();
                  system ("cls");
                  
              }while(op == 'n' || op == 'N');
              d = (b - a)/n;
              ///Cálculando as extremidades
              cout<<"\nAs extremidades são:\n";
              for(i=0;i!=n+1;i++){
                  
                  if(i==0){
                      
                      v = a;
                      cout<<fixed<<setprecision(2)<<v<<endl;
                      
                  }else if(i==n){
                      
                      v=b;
                      cout<<fixed<<setprecision(2)<<v<<endl;
                      
                  }else{
                      
                      v=v[i-1]+d;
                      cout<<fixed<<setprecision(2)<<v<<endl;
                      
                  }
              }
              //Calculando os pontos médios
              cout<<"\nOs pontos médios são:\n";
              for(i=0;i!=n;i++){
                  v=(v+v[i+1])/2;
                  cout<<fixed<<setprecision(2)<<v<<endl;
              }
              
              cout<<"\nOs pontos médios dentro da funcão resultam em:";
              //a que está o problema, toda vez tenho que adicionar mais um "case", para uma nova função.
              switch (o)
              {
                  case 1:
                  for(i=0;i!=n;i++){
                      x = sqrt((v));///raiz de x
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }
                  break;
                  case 2:
                  for(i=0;i!=n;i++){
                      x = -1/((v)*(v));///-1/(x^2)
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }
                  break;
                  case 3:
                  for(i=0;i!=n;i++){
                      x = 3*(v*v)+2;///3x^2+2
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }
                  break;
          
                  case 4:
                  for(i=0;i!=n;i++){
                      x = 5*v/pow(((pow(5*v,4))+3),(1/4));/// 5*x/(5*x^4+3)^(1/4)
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }
                  break;
                  
                  case 5:
                  for(i=0;i!=n;i++){
                      x = ((3*(pow(v,2)))+(3*v)-6)/((pow(v,2))+(2*v)-3);/// (3*x^2 + 3*x - 6)/(x^2 + 2*x -3)
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }break;
                  
                  case 6:
                  for(i=0;i!=n;i++){
                      x = sin((v*PI)/180) ;/// sin (x*PI/180)
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }break;
                  case 7:
                      for(i=0;i!=n;i++){
                      x = cos ((v*PI)/180.0) ;/// cos ( x * PI / 180.0 )
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }break;
                  case 8:
                      for(i=0;i!=n;i++){
                      x = tan ((v*PI)/180.0) ;/// tan ( x * PI / 180.0 )
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }break;
                  
                  case 9:
                      for(i=0;i!=n;i++){
                      x = ((3*(pow(v,2)))-4) ;///(3x^2-4)
                      cout<<fixed<<setprecision(2)<<"\nf("<<v<<")"<<setprecision(2)<<" = "<<x;
                  }break;
                  default:
                  cout<<"opcão = ?"<<o;
              }
              
              ///Cálculando a soma dos resultados da função e exibindo na tela
              for(i=1;i!=n;i++){
                  x = x + x[i-1];
                  if(i==n-1){
                      x = d*(x);
                      cout<<"\n\nO resultado da Integral é: "<<fixed<<setprecision(2)<<x;
                  }
              }
                  
              cout<<"\n\nDeseja fazer outra integral? ( para Sim e [n] para Não) ";
              fflush(stdin);
           op = getchar(); 
           system ("cls");
          }while(op == 's' || op == 'S');
          system("pause");
          return 0;
      }
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.