C语言实现定积分求解方法

来源:本站
导读:目前正在解读《C语言实现定积分求解方法》的相关信息,《C语言实现定积分求解方法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言实现定积分求解方法》的详细说明。
简介:本文章是关于C语言实现定积分求解方法。

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

#define N 3

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<n; 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<n; 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<n; 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<z; 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<n; 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("随机点法积分值%fn", 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("左矩形法积分值为:%fn", sum);

sum = Trape(down, up, n);

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

sum = Simposn(down, up, n);

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

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

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

return 0;

}

提醒:《C语言实现定积分求解方法》最后刷新时间 2024-03-14 00:57:54,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言实现定积分求解方法》该内容的真实性请自行鉴别。