Simulation d'un circuit rc

Description

Dans la serie simulation je voudrai le circuit RC.
Vous en reviez Nefraal l'a fait.
Pour la visualisation de resultats je vous conseille toujours et encore gnuplot ou xmgr.

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define RC 1.0
#define q0 0.0
#define U0 1.0

double w1=1;
double *vecteur (int n);
double f(double t,double q);
double f2(double t,double q,double epsilon);
void ecrire_vecteur(double *v,int n);
FILE *reponse_impultionnelle, *fopen();

main()
{
  double *t, *q;
  double h,b,epsilon;
  double A1,A2,A3,A4;
  int k,n;
  
  h=0.01;
  b=5*RC;
  n=(int)(b/h)+1;
  t=vecteur(n);
  epsilon=RC/100;
  
  q=calloc(n,sizeof(double));
  t=calloc(n,sizeof(double));
  
  t[0]=-1;
  q[0]=q0;
  
  reponse_impultionnelle=fopen("reponse_impultionnelle.dat","w");
  for(k=0;k<n-1;k++)
    {
      fprintf(reponse_impultionnelle,"%lg\t%lg\n",t[k],q[k]);
      t[k+1]=(double)(k+1)*h;
      A1=f2(t[k],q[k],epsilon);
      A2=f2(t[k]+h/2,q[k]+h/2*A1,epsilon);
      A3=f2(t[k]+h/2,q[k]+h/2*A2,epsilon);
      A4=f2(t[k]+h,q[k]+h*A3,epsilon);
      q[k+1]=q[k]+h*(A1+2*A2+2*A3+A4)/6.0;
      //printf("%lg \t %lg \n",t[k],q[k]-exp(-t[k]/RC));
    }
  fclose(reponse_impultionnelle);
}

double *vecteur(int n) 
{
  double *v;
  v=(double*)calloc(n,sizeof(double));
  return (v); 
}

void ecrire_vecteur(double *v,int n)
{
  int i;
  for(i=0;i<n;i++)
    printf("%lg \n",v[i]);
}

double f(double t,double q)
{
  return (-q/RC);
}

double f2(double t, double q,double epsilon)
{
  return ((-q/RC)+1/(sqrt(2*3.1415*epsilon*epsilon))*exp(-(t*t)/(2*epsilon*epsilon)));
}

Conclusion :


Code pas tres complique que je vous laisse decouvrir par vous meme.
Un indice tout de meme chez vous: Runge-Kutta a l'ordre 4 pour la methode d'integration (comme une methode d'Euler mais en un peu plus raffinee).

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.