Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Algoritmi MN
Algoritmi MN
#include <stdio.h>
#include <conio.h>
#include <math.h>
double valpol(int n,double A[10],double
x)
{
int i;
double b;
b=A[n];
for(i=n-1;i>=0;i--)
b=A[i]+x*b;
return b;
}
main()
{
int n;
double A[10];
double i,ls,ld,er,xm,*r;
printf("\neroarea:");
scanf("%lf",&er);
printf("\ngrad:");
scanf("%d",&n);
printf("\nlim st:");
scanf("%lf",&ls);
printf("\nlim dr:");
scanf("%lf",&ld);
for(i=0;i<=n;i++)
{
printf("\ndati coef[%d]:",i);
scanf("%lf",&A[i]);
printf("\nA[i]");
}
if(valpol(n,A,ls)*valpol(n,A,ld)>0)
{
printf("err");
getche();
return 0;
}
if(valpol(n,A,ls)==0)
{
*r=ls;
return 1;
}
if(valpol(n,A,ld)==0)
{
*r=ld;
return 1;
}
xm=(ls+ld)/2;
while((fabs(ldls)>er)&&(valpol(n,A,xm)!=0))
{
xm=(ls+ld)/2;
if(valpol(n,A,xm)*valpol(n,A,ls)<0)
ld=xm;
else ls=xm;
}
*r=xm;
printf("\nradacina:%lf",*r);
getche();
return 1;
}
TRIUNG INFER
#include <conio.h>
#include <math.h>
#define NrMax 10
double sol[NrMax+1];
/*Functia implementeaza metoda de
rezolvare a sistemelor inferior
triunghiulare. Functia intoarce
determinantul matricei principale. */
double TRIUNGHIINF (int or_mat,
double MAT[NrMax+1]
[NrMax+1],
double TL[],
double XX[])
{
int i,j;
double d=1;
for(i=1;i<=or_mat;i++) d*=MAT[i][i];
if (d==0) return 0;
for(i=1;i<=or_mat;i++) {
XX[i]=TL[i];
for(j=1;j<=i-1;j++)
XX[i]=XX[i]-MAT[i][j]*XX[j];
XX[i]=XX[i]/MAT[i][i];
}
return d;
}
main()
{
int i,j,n;
double mat[NrMax+1]
[NrMax+1],tl[NrMax+1];
clrscr();
printf("Calul radacinilor unui sistem de
ecuatii inferior triunghiulare\n");
printf("\nIntroduceti dimensiunea
matricei patratice a sistemului:\n\nn= ");
scanf("%d",&n);
printf("Introduceti elementele matricei
pentru sistemul inferior\
triunghiular:\n");
for(i=1;i<=n;i++)
for(j=1;j<=i;j++) {
printf("mat[%d][%d]= ",i,j);
scanf("%lf",&mat[i][j]);
}
for (i=1;i<=n;i++) {
printf("\nIntroduceti termenii
liberi ai sistemului:\n\ntl[%d]= ",i);
scanf("%lf",&tl[i]);
}
printf("Radacinile sistemului sunt:\n");
TRIUNGHIINF(n,mat,tl,sol);
for (i=1;i<=n;i++)
printf("x[%d]%lf\n",i,sol[i]);
getch();
}
GAUSS
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#define ordmat 5
void SCHIMB( float *a, float *b)
{float temp;
temp=*a;
*a=*b;
*b=temp;}
float gauss(int n,float mat[][ordmat],float
tl[],float x[])
{int i,k,j,lp;
float m,d,max;
d=1;
for (i=1;i<=n-1;i++)
{max=fabs(mat[i][i]);
lp=i;
for (k=i+1;k<=n;k++)
if (fabs(mat[k][i])>max)
{max=fabs(mat[k][i]);
lp=k;}
if(max==0) return 0;
if (i!=lp)
{for (j=1;j<=n;j++)
SCHIMB(&mat[i][j],&mat[lp][j]);
SCHIMB(&tl[i],&tl[lp]);
d=-d;}
for(k=i+1;k<=n;k++)
{m=mat[k][i]/mat[i][i];
for(j=i+1;j<=n;j++)mat[k]
[j]=mat[k][j]-m*mat[i][j];
tl[k]=tl[k]-m*tl[i] ;}}
if (mat[n][n]==0) return 0;
for (i=1;i<=n;i++) d*=mat[i]
[i];
for(i=n;i>=1;i--)
{x[i]=tl[i];
for (j=n;j>=i+1;j--)x[i]=x[i]mat[i][j]*x[j];
x[i]=x[i]/mat[i][i];}
return d;}
void main(void)
{int ord,i,j;
float a[ordmat]
[ordmat],b[ordmat],xx[ordmat];
float fct;
clrscr();
printf("\nDati ordinul
sistemului:N=");
scanf("%d",&ord);
printf("\nDati coeficientii
sistemului:\n");
for(i=1;i<=ord;i++)
{for(j=1;j<=ord;j++)
{printf("\na[%d][%d]=",i,j);
scanf("%f",&a[i][j]);}}
printf("\nDati vectorul
termenilor liberi:");
for(i=1;i<=ord;i++)
{
printf("b[%d]=",i);
scanf("%f",&b[i]);
}
fct=gauss(ord,a,b,xx);
if(!fct) printf("\nCeva e putred in
DANEMARCA!!!");
else
{
printf("Determinantul
sistemului:det=%f\n",fct);
for(i=ord;i>=1;i--)
printf("X[%d]=%.2f\n",i,xx[i]);
}
getche();
}
DER 2PCT
#include <stdio.h>
#include<conio.h>
#include<math.h>
double f(double x){
return x*x;
}
double d2p(double x0,double h){
return ((f(x0+0.5*h)-f(x0-0.5*h))/h);
}
void main(void){
double v0,h1;
clrscr();
printf("X0=");
scanf("%lf",&v0);
printf("H=");
scanf("%lf",&h1);
printf("derivata prin doua puncte este:
%lf",d2p(v0,h1));
getch();
}
DER 3PCT
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x){
return x*x*x;
}
double d3p(double x0,double h1, double
h2){
return (h1*h1*f(x0+h2)+(h2*h2h1*h1)*f(x0)-h2*h2*f(x0-h1))/
(h1*h2*(h1+h2));
}
void main(void){
double v0,h1,h2;
clrscr();
printf("X0=");
scanf("%lf",&v0);
printf("H1=");
scanf("%lf",&h1);
printf("H2=");
scanf("%lf",&h2);
printf("derivata prin trei puncte este:
%lf",d3p(v0,h1,h2));
getch();
}
DER 5PCT
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x){
return x*x*x;
}
double d5p(double x0,double h1, double
h2){
return (f(x0-2*h)-8*f(x0-h)+8*f(x0+h)f(x0+2*h))/(12*h);
}
void main(void){
double v0,h1,h2;
clrscr();
printf("X0=");
scanf("%lf",&v0);
printf("H1=");
scanf("%lf",&h1);
printf("H2=");
scanf("%lf",&h2);
printf("derivata prin cinci puncte este:
%lf",d5p(v0,h1,h2));
getch();
}
CUBATUR TRAPEZ
#include <conio.h>
double f(double x,double y)
{
return (x*x+y*y);
}
/*Functia care implementeaza metoda de
cubatura a trapezului.
Functia intoarce integrala unei functii de
doua variabile.*/
double CurbaturaTrapez(double sx,
double dx,
double sy,
double dy,
int nx,
int ny)
{
int i,j;
double suma=0,h,k;
h=(dx-sx)/nx;
k=(dy-sy)/ny;
for(i=0;i<=nx-1;i++)
for(j=0;j<=ny-1;j++)
suma+=0.25*h*k*(f(sx+i*h,sy+j*k)
+f(sx+i*h,sy+(j+1)*k)+
f(sx+(i+1)*h,sy+j*k)+f(sx+(i+1)*h,sy+
(j+1)*k));
return suma;
}
main()
{
double sx,dx,sy,dy,nx,ny;
clrscr();
printf("Introduceti limita stinga a
intervalului de integrare pe axa X.\
\rsx= ");
scanf("%lf",&sx);
printf("Introduceti limita dreapta a
inervvalului de integrare pe axa X.\
\rdx= ");
scanf("%lf",&dx);
printf("Introduceti limita stinga a
intervalului de integrare pe axa Y.\
\rsy= ");
scanf("%lf",&sy);
printf("Introduceti limita dreapta a
inervvalului de integrare pe axa Y.\
\rdy= ");
scanf("%lf",&dy);
printf("Introduceti numarul de
subintervale pe axa X.\nnx= ");
scanf("%lf",&nx);
printf("Introduceti numarul de
subintervale pe axa Y.\nny= ");
scanf("%lf",&ny);
printf("Integrala este:
%lf\n",CurbaturaTrapez(sx,dx,sy,dy,nx,ny
));
getch();
}
MET LAGRANGE
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda lui
Lagrange de interpolare.
Functia intoarce valoarea interpolata. */
double Lagrange(int n,
double x[10],
double y[10],
double point)
{
int i,j;
double suma=0,prod;
for(i=0;i<n;i++)
{
prod=1;
for(j=0;j<n;j++)
if(j!=i) prod*=(point-x[j])/(x[i]-x[j]);
suma+=y[i]*prod;
}
return suma;
}
main()
{
int n=10,i;
double x[10]={0,.1,.2,.3,.4,.5,.6,.7,.8,.9},
y[10]={70,140,175,200,225,250,265,280,
290,300},point=.45;
clrscr();
/* printf("Introduceti numaruln de
puncte.\nn= ");
scanf("%d",&n);
for(i=0;i<n;i++){
printf("Introduceti abscisa punctului
%d.\nx[%d]= ",i,i);
scanf("%lf",&x[i]);
printf("Introduceti ordonata punctului
%d.\ny[%d]= ",i,i);
scanf("%lf",&y[i]);
}
printf("Introduceti punctul in care se
calculeaza interpolarea.\npoint= ");
scanf("%lf",&point);*/
printf("Integrala este:
%lf\n",Lagrange(n,x,y,point));
getch();
}
MET NEWTON 1
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda de
interpolare a lui Newton
de speta intaia.
Functia intoarce valoarea interpolata. */
double Newton1(int n,
double vi,
double pas,
double y[10],
double point)
{
int i,j;
double suma=y[0],prod=1;
for(i=1;i<=n;i++)
{
for(j=0;j<n;j++) y[j]=y[j+1]-y[j];
prod*=(point-(vi+(i-1)*pas))/(i*pas);
suma+=y[0]*prod;
}
return suma;
}
main()
{
int n,i;
double vi,pas,
y[10]={70,140,175,200,225,250,265,280,
290,300},point=.45;
clrscr();
printf("Introduceti numarul de
puncte.\nn= ");
scanf("%d",&n);
printf("Introduceti valoarea abscisei
primului punct cunoscut.\nvi= ");
scanf("%lf",&vi);
printf("introduceti pasul intre abscisele
cunoscute.\npas= ");
scanf("%lf",&pas);/* for(i=0;i<n;i++){
printf("Introduceti ordonata punctului
%d.\ny[%d]= ",i,i);
scanf("%lf",&y[i]);
}
printf("Introduceti punctul in care se
calculeaza interpolarea.\npoint= ");
scanf("%lf",&point);*/
printf("Integrala este:
%lf\n",Newton1(n,vi,pas,y,point));
getch();
}
MET. NEWTON 2
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda de
interpolare a lui Newton
de speta a doua.
Functia intoarce valoarea interpolata. */
double Newton2(int n,
double vi,
double pas
double y[10],
double point)
{
int i,j;
double suma=y[n-1],prod=1,vf;
vf=vi+(n-1)*pas;
for(i=1;i<=n;i++)
{
for(j=n;j>=i-1;j--) y[j]=y[j]-y[j-1];
prod*=(point-(vf-(i-1)*pas))/(i*pas);
suma+=y[n-1]*prod;
}
return suma;
}
main()
{
int n,i;
double vi,pas,
y[10]={70,140,175,200,225,250,265,280,
290,300},point=.45;
clrscr();
printf("Introduceti numarul de
puncte.\nn= ");
scanf("%d",&n);
printf("Introduceti valoarea abscisei
primului punct cunoscut.\nvi= ");
scanf("%lf",&vi);
printf("introduceti pasul intre abscisele
cunoscute.\npas= ");
scanf("%lf",&pas);
/* for(i=0;i<n;i++){
printf("Introduceti ordonata
punctului %d.\ny[%d]= ",i,i);
scanf("%lf",&y[i]);
}
printf("Introduceti punctul in care se
calculeaza interpolarea.\npoint= ");
scanf("%lf",&point);*/
printf("Integrala este:
%lf\n",Newton2(n,vi,pas,y,point));
getch();
}
INTERP AITKEN
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda de
interpolare a lui Aitken
de speta a doua.
Functia intoarce valoarea interpolata. */
double Aitken(int n,
double x[],
double y[],
double point)
{
int i,j;
for(i=0;i<n;i++)
for(j=i;j<n;j++)
y[j]=y[i-1]*(point-x[j])/(x[i-1]-x[j])
+y[j]*(point-x[i-1])/(x[j]-x[i-1]);
return y[n-1];
}
main()
{
int n,i;
double x[10]={0,.1,.2,.3,.4,.5,.6,.7,.8,.9},
y[10]={70,140,175,200,225,250,265,280,
290,300},point=.45;
clrscr();
printf("Introduceti numarul de
puncte.\nn= ");
scanf("%d",&n);
/* for(i=0;i<n;i++){
printf("Introduceti abscisa
punctului %d.\nx[%d]= ",i,i);
scanf("%lf",&x[i]);
printf("Introduceti ordonata
punctului %d.\ny[%d]= ",i,i);
scanf("%lf",&y[i]);
}
printf("Introduceti punctul in care se
calculeaza interpolarea.\npoint= ");
scanf("%lf",&point);*/
/* for(i=0;i<n;i++){
printf("Introduceti ordonata
punctului %d.\ny[%d]= ",i,i);
scanf("%lf",&y[i]);
}
printf("Introduceti punctul in care se
calculeaza interpolarea.\npoint= ");
scanf("%lf",&point);*/
printf("Integrala este:
%lf\n",Aitken(n,x,y,point));
getch();
}
MET DREPTUNGHI
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda de
integrare a dreptunghiului.
Functia intoarce valoarea integralei.
*/
double DreptunghiF(double ls,
double ld,
double nrpas)
{
double i;
double suma=0,h;
h=(ld-ls)/nrpas;
for(i=0;i<=nrpas-1;i++)
suma+=h*f(ls+i*h);
return suma;
}
main()
{
double ls,ld,nrpas;
clrscr();
printf("Introduceti limita stinga a
inervvalului de integrare.\nls= ");
scanf("%lf",&ls);
printf("Introduceti limita dreapta a
inervvalului de integrare.\nld= ");
scanf("%lf",&ld);
printf("Introduceti numarul de
subintervale.\nnrpas= ");
scanf("%lf",&nrpas);
printf("Integrala este:
%lf\n",DreptunghiF(ls,ld,nrpas));
getch();
}
INTEGR RICHARD
#include <conio.h>
double f(double x)
{
return (x*x);
}
/*Functia care implementeaza metoda de
integrare a lui Richardson.
Functia intoarce valoarea integralei.
*/
double RichardsonF(double ls,
double ld,
double nrpash,
double nrpask)
{
double i;
double suma,sumah,sumak,h,k;
h=(ld-ls)/nrpash;
k=(ld-ls)/nrpask;
sumah=0.5*h*(f(ls)+f(ld));
sumak=0.5*k*(f(ls)+f(ld));
for(i=1;i<=nrpash-1;i++)
sumah+=h*f(ls+i*h);
for(i=1;i<=nrpask-1;i++)
sumak+=k*f(ls+i*k);
suma=sumah+(sumah-sumak)/((k*k)/
(h*h)-1);
return suma;
}
main()
{
double ls,ld,nrpash,nrpask;
clrscr();
printf("Introduceti limita stinga a
inervalului de integrare.\nls= ");
scanf("%lf",&ls);
printf("Introduceti limita dreapta a
inervalului de integrare.\nld= ");
scanf("%lf",&ld);
printf("Introduceti numarul de
subintervale pt.diviziunea nr:1.\nnrpash=
");
scanf("%lf",&nrpash);
printf("Introduceti numarul de
subintervale pt.diviziunea nr:2.\nnrpask=
");
scanf("%lf",&nrpask);
printf("Integrala este:
%lf\n",RichardsonF(ls,ld,nrpash,nrpask));
getch();
}
CUBATURA TRAPEZ
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x, double y)
{
return x*y;
}
double cub(double (*f)(double,double),
double sx, double dx, double sy, double
dy, int nx, int ny)
{
double sum=0, h, k;
int i, j;
h=(dx-sx)/nx;
k=(dy-sy)/ny;
for(i=0;i<=nx-1;i++)
for(j=0;j<=ny-1;j++)
sum+=0.25*h*k*(f(sx+i*h,sy+j*k)
+f(sx+i*h,sy+(j+1)*k)+f(sx+
(i+1)*h,sy+j*k)+f(sx+(i+1)*h,sy+
(j+1)*k));
return sum;}
void main(void)
{double sx, dx, sy, dy;
int nx, ny;
clrscr();
printf("Introduceti limita inf. a domeniului
x: ");
scanf("%lf",&sx);
printf("Introduceti limita sup. a
domeniului x: ");
scanf("%lf",&dx);
printf("Introduceti limita inf. a domeniului
y: ");
scanf("%lf",&sy);
printf("Introduceti limita sup. a
domeniului y: ");
scanf("%lf",&dy);
printf("Introduceti nr. pasilor pe
domeniului x: ");
scanf("%d",&nx);
printf("Introduceti nr. pasilor pe
domeniului y: ");
scanf("%d",&ny);
printf("Integrala este:%lf
",cub(f,sx,dx,sy,dy,nx,ny));
getch();
}
CUBATURA SIMSON
#include<stdio.h>
#include<conio.h>
#include<math.h>
double f(double x,double y)
{return(x+y);
}
double CubaturaS(double(*f)
(double,double),
double sx,
double dx,
double sy,
double dy,
int nx,
int ny)
{ double suma=0,h,k;
int i,j;
h=(dx-sx)/nx;
k=(dy-sy)/ny;
for(i=1;i<=nx-1;i+=2)
for(j=1;j<=ny-1;j+=2)
suma+=h*k*(f(sx+(i1)*h,sy+(j-1)*k)+f(sx+(i+1)*h,sy+(j1)*k)+f(sx+(i-1)*h,sy+(j+1)*k)+f(sx+
(i+1)*h,sy+(j+1)*k)+
4*f(sx+i*h,sy+(j+1)*k)
+4*f(sx+i*h,sy+(j-1)*k)+4*f(sx+(i1)*h,sy+j*k)+4*f(sx+(i+1)*h,sy+j*k)
+16*f(sx+i*h,sy+j*k))/9;
return suma;
}
void main()
{
double ax,bx,ay,by;
int n,m;
clrscr();
printf("Introduceti limitele
domeniului de integrare:\n");
printf("sx=");scanf("%lf",&ax);
printf("dx=");scanf("%lf",&bx);
printf("sy=");scanf("%lf",&ay);
printf("dy=");scanf("%lf",&by);
printf("Numarul pe pasi pe
Ox:");scanf("%d",&n);
printf("Numarul de pasi pe
Oy:");scanf("%d",&m);
printf("Valoarea integralei
este:
%lf",CubaturaS(*f,ax,bx,ay,by,n,m));
getche();
}
REG HYP
#include <conio.h>
/*Functia ce inplementeaza regresia
liniara */
void RegHip(int nrp,
double *x,
double *y,
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=0;i<nrp;i++)
{
sx+=x[i];
sy+=1/y[i];
sxy+=x[i]/y[i];
sxx+=x[i]*x[i];
}
*coef1=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef2=(sy*sxx-sx*sxy)/(nrp*sxx-sx*sx);
}
void main()
{
int nrp,i;
double x[10],y[10],coef1,coef2;
printf("\nIntroduceti nr de puncte:\nnrp=
");
scanf("%d",&nrp);
printf("\nIntroduceti punctele:\n");
for(i=0;i<nrp;i++) {
RegHip(nrp,x,y,&coef1,&coef2);
printf("Functia este: %lf*x+
%lf",coef1,coef2);
getch();
}
REGR EXPON
#include <conio.h>
/*Functia ce inplementeaza regresia
liniara */
void RegGeo(int nrp,
double x[],
double y[],
double *coef1,
double *coef2)
{
double sx=0,sy=0,sxx=0,sxy=0;
int i;
for (i=1;i<nrp;i++)
{
sx+=log(x[i]);
sy+=log(y[i]);
sxy+=log(x[i])*log(y[i]);
sxx+=log(x[i])*log(x[i]);
}
*coef2=(nrp*sxy-sx*sy)/(nrp*sxx-sx*sx);
*coef1=exp((sy*sxx-sx*sxy)/(nrp*sxxsx*sx));
}
void main()
{
int nrp,i;
double x[10],y[10],coef1,coef2;
printf("\nIntroduceti nr de puncte:\nnrp=
");
scanf("%d",&nrp);
printf("\nIntroduceti punctele:\n");
for(i=0;i<nrp;i++) {
RegGeo(nrp,x,y,&coef1,&coef2);
sxx+=cos(w*x[i])*cos(w*x[i]);
}
*coef2=(n*sxy-sx*sy)/(n*sxx-sx*sx);
*coef1=(sy*sxx-sx*sxy)/(n*sxx-sx*sx);
}
void main()
{
int nrp,i;
double x[10]={0,pi/6,pi/4,pi/3,pi/2,2*pi},
y[10],
coef1,coef2,w=1;
y[0]=2; y[1]=1+sqrt(3)/2;
y[2]=1+sqrt(2)/2; y[3]=3/2; y[4]=1;
y[5]=2;
printf("\nIntroduceti nr de puncte:\nnrp=
");
scanf("%d",&nrp);
printf("\nIntroduceti punctele:\n");
//for(i=0;i<nrp;i++) {
}
RegTrig(nrp,x,y,w,&coef1,&coef2);
printf("A este: %lf",coef1);
printf(" B este: %lf",coef2);
getch();
}
RK 4
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define max 100
double solutie(double x)
{
return exp(0.5*(x*x-1));
}
double f(double x , double y)
{
return x*y;
}
void RK4(double (*f)(double,double),
double x0,
double y0,
double pas,
int nrp,
double sol[])
{
int i;
double k1,k2,k3,k4;
sol[0]=y0;
for(i=1;i<nrp;i++)
{
k1=f(x0+(i-1)*pas,sol[i-1]);
k2=f(x0+(i1)*pas+0.5*pas,sol[i-1]+0.5*pas*k1);
k3=f(x0+(i1)*pas+0.5*pas,sol[i-1]+0.5*pas*k2);
k4=f(x0+i*pas,sol[i1]+pas*k3);
sol[i]=sol[i1]+pas*(k1+2*k2+2*k3+k4)/6;
}
}
void main(void)
{
int nrp,i;
double x0,y0,pas, sol[max];
clrscr();
printf("Dati conditia initiala:\n ");
printf("x0=");
scanf("%lf",&x0);
printf("y0=");
scanf("%lf",&y0);
printf("Dati numarul de puncte de
calcul:");
scanf("%d",&nrp);
printf("Dati pasul de calcul: ");
scanf("%lf",&pas);
RK4(f,x0,y0,pas,nrp,sol);
for(i=0;i<nrp;i++)
{
printf("\n%lf
%lf",sol[i],solutie(x0));
x0+=pas;
}
getch();
}
EULER IMBUNAT
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define MAX 10
double f(double x,double y)
{
return y/x;
}
void eulerimb(double(*f)(double x,double
y),double x0,double y0,double h,int
n,double y[MAX])
{
int i;
float x[MAX];
y[0]=y0;
x[0]=x0;
for(i=1;i<n;i++)
{
x[i]=x[i-1]+i*h;
y[i]=y[i-1]+h*(f(x[i1]+0.5*h,y[i-1])+0.5*h*f(x[i-1],y[i-1]));
}
}
void main()
{
int i,n;
double x0,y0,p,h;
double y[MAX];
clrscr();
printf("Introduceti x0:");
scanf("%lf",&x0);
printf("\nIntroduceti y0:");
scanf("%lf",&y0);
printf("\ndati pasul:");
scanf("%lf",&h);
printf("\n nr. de pasi:");
scanf("%d",&n);
eulerimb(f,x0,y0,h,n,y);
printf("\nsolutia este");
for(i=0;i<n;i++)
printf("\ny[%d]= %lf",i,y[i]);
getch();
}
EULER MODIF
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define max 100
double solutie(double x)
{
return exp(0.5*(x*x-1));
}
double f(double x , double y)
{
return x*y;
}
void eulmod(double (*f)(double,double),
double x0, double y0, double
pas, int nrp, double sol[])
{
int i;
sol[0]=y0;
for(i=1;i<nrp;i++)
{
sol[i]=sol[i-1]+pas*f(x0+(i1)*pas+0.5*pas,sol[i-1]+
0.5*pas*f(x0+(i-1)*pas,sol[i1]));
}
}
void main(void)
{
int nrp,i;
double x0,y0,pas, sol[max];
clrscr();
printf("Dati conditia initiala:\n ");
printf("x0=");
scanf("%lf",&x0);
printf("y0=");
scanf("%lf",&y0);
printf("Dati numarul de puncte de
calcul:");
scanf("%d",&nrp);
printf("Dati pasul de calcul: ");
scanf("%lf",&pas);
eulmod(f,x0,y0,pas,nrp,sol);
for(i=0;i<nrp;i++)
{
printf("\n%lf
%lf",sol[i],solutie(x0));
x0+=pas;
}
getch();
}