Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

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?

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por 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;
      }
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.