700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > c语言怎样写积分程序 C语言实现定积分求解方法

c语言怎样写积分程序 C语言实现定积分求解方法

时间:2021-08-02 17:27:16

相关推荐

c语言怎样写积分程序 C语言实现定积分求解方法

求定积分的方法有很多种,下面是我总结的几种比较常用的方法。

#include

#include

#include

#include

#define N3

double fun(double x)

{

double y;

y = sqrt(4-(x)*(x));

//y = sin(x);

return y;

}

/*随机点法求定积分*/

double Darts(int n)

{

double x, y;

time_t t;

int i = 0;

int count = 0;

srand((unsigned)time(&t));

for (i=0; i

{

x = rand()%100/100.0;

y = rand()%100/100.0;

if (y <= 1-pow(x,2))

{

count++;

}

}

return (double)count/(double)n;

}

/*左矩形法求定积分*/

double LeftRect(double down, double up, int n)

{

double h, s;

int i;

/*计算步长*/

h = (up-down)/n;

s = fun(down)*h;

for (i=1; i

{

s = s + fun(down+i*h)*h;

}

return s;

}

/*梯形公式求定积分*/

double Trape(double down, double up, int n)

{

double h, s;

int i = 0;

/*计算步长*/

h = (up-down)/n;

s = 0.5*(fun(down)+fun(down+h))*h;

for (i=1; i

{

s = s + 0.5 * (fun(down+i*h) + fun(down+(i+1)*h))*h;

}

return s;

}

/*复合梯形公式*/

double T(double x, double y, int z)

{

double h, Tn;

int i = 0;

h = (y-x)/z;

Tn = (fun(x)+fun(y))/2;

for (i=0; i

{

Tn = Tn+fun(x+i*h);

}

Tn = Tn*h;

return Tn;

}

/*辛普生公式求定积分,公式为:S[n]=(4*T[2*n]-T[n])/3,其中T[2n],T[n]为梯形公式计算结果*/

double Simposn(double down, double up, int n)

{

double s;

/*辛普生公式*/

s = (4*T(down, up, 2*n) - T(down, up, n))/3;

return s;

}

/*高斯公式求定积分*/

double Gass(double (*func)(double x), double a, double b, int n)

{

int i = 0;

//高斯点及其求积系数列表

float x1[1]={0.0};

float A1[1]={2};

float x2[2]={-0.5573503,0.5573503};

float A2[2]={1,1};

float x3[3]={-0.7745967,0.0,0.7745967};

float A3[3]={0.555556,0.888889,0.555556};

float x4[4]={0.3399810,-0.3399810,0.8611363,-0.8611363};

float A4[4]={0.6521452,0.6521452,0.3478548,0.3478548};

float x5[5]={0.0,0.5384693,-0.5384693,0.9061799,-0.9061799};

float A5[5]={0.5688889,0.4786287,0.4786287,0.2369269,0.2369269};

float *p, *t;

switch (n)

{

case 1:

p = x1;

t = A1;

break;

case 2:

p = x2;

t = A2;

break;

case 3:

p = x3;

t = A3;

break;

case 4:

p = x4;

t = A4;

break;

case 5:

p = x5;

t = A5;

break;

default :

printf("intput wrong!");

}

float g = 0;

for (i=0; i

{

g += (*func)((b-a)*p[i]/2+(a+b)/2)*t[i];

}

g *= (b-a)/2;

return g;

}

int main(int argc, char *argv[])

{

printf("随机点法积分值%f\n", Darts(10000));

double down, up;

int n;

double sum = 0;

printf("积分下限:\n");

scanf("%lf", &down);

printf("积分上限:\n");

scanf("%lf", &up);

printf("分隔数目:\n");

scanf("%d", &n);

sum = LeftRect(down, up, n);

printf("左矩形法积分值为:%f\n", sum);

sum = Trape(down, up, n);

printf("梯形公式积分值为:%f\n", sum);

sum = Simposn(down, up, n);

printf("辛普生公式积分值为:%f\n", sum);

sum = Gass(fun, down, up, N);

printf("高斯公式积分值为:%f\n", sum);

return 0;

}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。