#3 27.06.06 08:58
Re: метод симпсона...
Если метод симпсона по вычмату, то вот код, мы лабу делали (здесь метод симпсона и метод прямоугольников), разберешься:
#include <stdio.h>
#include <math.h>
#include <conio.h>
//#define x0 1.2
//#define xn 5.3
#define e 0.01
float func(float x);
float chorda(float x0,float xn)
{
float xp=x0-func(x0)*(xn-x0)/(func(xn)-func(x0));
if(func(xp)>-e&&func(xp)<e)
return xp;
else if(func(xp)*func(x0)<0) return chorda(x0,xp) ;
else return chorda(xp,xn);
}
float deriv(float x)
{
return (logl(2)*pow(2,x)-4*x);
}
float func(float x)
{
return (pow(2,x)-2*x*x+1);
}
float tangent(float x1)
{
float xp=x1-func(x1)/deriv(x1);
if(func(xp)>-e&&func(xp)<e)
return xp;
else return tangent(xp);
}
/*float M_Simpson(float n)
{
float s=0,x=x0;
float h=(xn-x0)/n;
for(int i=0; i<n; i++)
if(i==0 || i==n)
s+=func(x+i*h);
else
if (i%2)
s+=2*func(x+i*h);
else
s+=4*func(x+i*h);
s*=h/3;
return s;
}
float M_rect(float n)
{
float s=0,x=x0;
float h=(xn-x0)/n;
for(int i=0; i<n; i++)
if(i==0 || i==n)
s+=func(x+i*h);
else
s+=2*func(x+i*h);
s*=h/2;
return s;
}*/
void main()
{
/* int n=1;
while(M_rect(n)-M_rect(n+1)>e) n++;
printf("rect H=%f, S=%f,N=%d\n",(xn-x0)/n,M_rect(n+1),n);
n=2;
while(M_Simpson(n)-M_Simpson(n+2)>e) n+=2;
printf("Simpson H=%f,S=%f,N=%d",(xn-x0)/n,M_Simpson(n+2),n);*/
printf("\n\n x=%f \n\n",chorda(0,5));
printf("\n\n x=%f \n\n",tangent(2));
getch();
return ;
}
Offline
#5 27.06.06 09:09
Re: метод симпсона...
у меня на фтп по численным методам есть куча книг
и методы по лабам (метод Симпсона там тоже есть)
ftp://simplex.hostel.nstu.ru/Docs/%D7%E … %EE%E4%FB/
ftp://simplex.hostel.nstu.ru/Docs/NSTU/ … landovsky/
Offline

