当前位置:首页 » 编程语言 » c语言积分公式

c语言积分公式

发布时间: 2022-08-25 15:45:00

‘壹’ c语言 求定积分的通用函数

对于一重定积分来说其求解可以使用梯形法进行求解,计算公式如下所示:

#include<stdio.h>
#include<stdlib.h>
#include<math.h>

//功能:返回f(x)在积分区间[a,b]的值
//参数:FunCallBack指向用于计算f(x)的函数
//a积分区间的起始值
//b积分区间的结束值
//dx横坐标的间隔数,越小计算结果越准确
doubleCalculate(double(*FunCallBack)(doublex),
doublea,doubleb,doubledx)
{
doubledoui;
doubletotal=0;//保存最后的计算结果

for(doui=a;doui<=b;doui+=dx)
{
total+=FunCallBack(doui)*dx;
}
returntotal;
}

doublef2(doublex)
{
returnx*x;
}

doublef(doublex)
{
returnx;
}

doublef3(doublex)
{
returnx*x*x;
}

intmain()
{
doubletotal;
total=(Calculate(f,2,3,0.000001));
printf("total=%lf ",total);

total=(Calculate(f2,2,3,0.000001));
printf("total=%lf ",total);

total=(Calculate(f3,2,3,0.000001));
printf("total=%lf ",total);

return0;
}
其中,函数f,f2,f3为自行编写的关于x的被积函数。
运行结果:
total=2.500000
total=6.333331
total=16.249991

‘贰’ 用C语言求积分

基本是这样的,用梯形发求定积分,对应于一个积分式就要有一段程序,不过你可以改变程序的一小部分来改变你所要求的积分式。
以c为例:求f(x)=xsinx从1到2的积分
#include <math.h>
float integral(float(*fun)(float x),float a,float b,int,n)
{float s,h,y;
int i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n; /*积分步长*/
for(i=1;i<n;i++)
s=s+fun(a+i*h);
y=s*h;
return y;/*返回积分值*/
}

float f(float x)
{return(x*sinx) /*修改此处可以改变被积函数*/
}

main()
{float y;
y=integral(f,1.0,2.0,150);/*修改此处可以改变积分上下限和步长*/
printf("y=%f\n",y);
}

‘叁’ 怎样编写c语言积分函数

积分分为两种,数值积分,公式积分。

  1. 公式积分:部分函数可以直接用公式求得其不定积分函数。C语言中可以直接用积分公式写出其积分函数。

  2. 数值积分:按照积分的定义,设置积分范围的步长,用梯形面积累加求得其积分。

    以【f(x)=x*sin(x) 从1到2的积分】为例:

    #include<math.h>
    #include<stdio.h>
    doubleintegral(double(*fun)(doublex),doublea,doubleb,int,n){
    doubles,h,y;
    inti;
    s=(fun(a)+fun(b))/2;
    h=(b-a)/n;/*积分步长*/
    for(i=1;i<n;i++)
    s=s+fun(a+i*h);
    y=s*h;
    returny;/*返回积分值*/
    }
    doublef(doublex){
    return(x*sinx)/*修改此处可以改变被积函数*/
    }
    intmain(){
    doubley;
    y=integral(f,1.0,2.0,150);/*修改此处可以改变积分上下限和步数,步长=(上限-下限)/步数*/
    printf("y=%f ",y);
    return0;
    }

‘肆’ C语言求定积分的问题。

根据梯形法求积分的原理,设间隔h= (b-a)/n,则积分近似计算公式为:

s = h/2 *[f(a)+f(a+h)] +h/2 *[f(a+h)+f(a+2h)] +...+h/2 *[f(b-h)+f(b)]

=h/2 *[f(a)+f(b)] + h*[ f(a+h) + f(a+2h) +f(a+3h) + ... +f(b -h)]

令积分s初始值为h/2 *[f(a)+f(b)] ,后面令i=1,...,n-1来迭代s = s+h*f(a+ih)。

‘伍’ 用c语言编程计算积分

#include #include float f1(float x) { return(1.0+x); } float f2(float x) { return(2.0*x+3.0); } float f3(float x) { return(exp(x)+1); } float f4(float x) { return(pow(1+x,2)); } float f5(float x) { return(pow(x,3)); } float fsimp(float a,float b,float (*p)(float)) { float c,s; c=(a+b)/2; s=(b-a)/6*(p(a)+4*p(c)+p(b)); return s; } int main() { float a,b; printf("请输入积分下限a的值:"); scanf("%f",&a); printf("请输入积分上限b的值:"); scanf("%f",&b); printf("%f\n",fsimp(a,b,f1)); printf("%f\n",fsimp(a,b,f2)); printf("%f\n",fsimp(a,b,f3)); printf("%f\n",fsimp(a,b,f4)); printf("%f\n",fsimp(a,b,f5)); }

‘陆’ 用C语言计算微积分

我给一楼加的注释以及修改:
#include<stdio.h>
#include<math.h>
#define ARRAYBOUND 10001

void main()
{
int i = 0; //辅助变量,最常见那种
int n = 0; //将所求定积分函数曲线在x轴方向,平均分成n等分;n越大,结果越精确;不过限于此算法限制n<ARRAYBOUND,否则溢出.
float x[ARRAYBOUND];//ARRAYBOUND维浮点数组,存放离散的x坐标值
float y[ARRAYBOUND];//ARRAYBOUND维浮点数组,存放每个x坐标对应的函数值;x[i],y[i]满足y[i]=f(x[i]),f是你要求定积分的函数
float x0 = 0.0; //定积分下限
float xn = 0.0; //定积分上限
float h = 0.0; //面积微元宽度
float J = 0.0; //辅助变量

/*f=x^3*/ //这里说明要求定积分的是函数f(x)=x*x*x;(y等于x的立方,x^3是vb的写法)
// printf("input x0,xn,n:");
printf("请分别输入下限(x0),上限(xn),精度(n):");
scanf("%f",&x0);
scanf("%f",&xn);
scanf("%d",&n);

h=(xn-x0)/n;//将函数图形在x方向平分成n份,h是每个面积微元的宽度
x[0]=x0; //将积分下限赋值给x[0]

for(i=0;i<=n && n<ARRAYBOUND;i++)
{
x[i]=x[0]+i*h; //计算n个离散的横坐标值,存入x[]数组
y[i]=(float)pow(x[i],3);//计算n个横坐标对应的函数值,存入y[]数组。在此可以改变要求积分的函数
}

// J=0.0;
for(i=0;i<n;i++)
{
//J=J+y[i]+y[i+1];
J+=y[i];//将所有纵坐标值代数相加,存入J
}
//J=J*h/2.0;
J=J*h;//所有微元面积一次求解,因为∑h*y[i]=h*∑y[i];
printf("\nn=%d \n所求定积分值是: %f\n",n,J);
}

我将//J=J+y[i]+y[i+1]改为J+=y[i];将//J=J*h/2.0;改为J=J*h只是帮助lz理解
其实,这两种表达在理论上是等价的,不过我发现修改后,在n同样大小的情况下,结果的精度有一点点下降,还真不知为什么???

这样的话lz应该能理解了吧,其实一楼的算法还有不少值得改进的地方,希望lz能有所突破!!

‘柒’ C语言如何求定积分

4.龙贝格求积公式,求解定积分
C/C++ code
#include<stdio.h>
#include<math.h>
#define f(x) (sin(x)/x)
#define N 20
#define MAX 20
#define a 2
#define b 4
#define e 0.00001
float LBG(float p,float q,int n)
{ int i;
float sum=0,h=(q-p)/n;
for (i=1;i<n;i++)
sum+=f(p+i*h);
sum+=(f(p)+f(q))/2;
return(h*sum);
}
void main()
{ int i;
int n=N,m=0;
float T[MAX+1][2];
T[0][1]=LBG(a,b,n);
n*=2;
for(m=1;m<MAX;m++)
{ for(i=0;i<m;i++)
T[i][0]=T[i][1];
T[0][1]=LBG(a,b,n);
n*=2;
for(i=1;i<=m;i++)
T[i][1]=T[i-1][1]+(T[i-1][1]-T[i-1][0])/(pow(2,2*m)-1);
if((T[m-1][1]<T[m][1]+e)&&(T[m-1][1]>T[m][1]-e))
{ printf("Answer=%f\n",T[m][1]); getch();
return ;
}
}
}
6. 牛顿-科特斯求积公式,求定积分
C/C++ code
#include<stdio.h>
#include<math.h>
int NC(a,h,n,r,f)
float (*a)[];
float h;
int n,f;
float *r;
{ int nn,i;
float ds;
if(n>1000||n<2)
{ if (f)
printf("\n Faild! Check if 1<n<1000!\n",n);
return(-1);
}
if(n==2)
{ *r=0.5*((*a)[0]+(*a)[1])*(h);
return(0);
}
if (n-4==0)
{ *r=0;
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
if(n/2-(n-1)/2<=0)
nn=n;
else
nn=n-3;
ds=(*a)[0]-(*a)[nn-1];
for(i=2;i<=nn;i=i+2)
ds=ds+4*(*a)[i-1]+2*(*a)[i];
*r=ds*(h)/3;
if(n>nn)
*r=*r+0.375*(h)*((*a)[n-4]+3*(*a)[n-3]+3*(*a)[n-2]+(*a)[n-1]);
return(0);
}
main()
{
float h,r;
int n,ntf,f;
int i;
float a[16];
printf("Input the x[i](16):\n");
for(i=0;i<=15;i++)
scanf("%d",&a[i]);
h=0.2;
f=0;
ntf=NC(a,h,n,&r,f);
if(ntf==0)
printf("\nR=%f\n",r);
else
printf("\n Wrong!Return code=%d\n",ntf);
getch();
}
看看这个或许有帮助

‘捌’ 怎么用C语言表示积分

源代码如下:

#include#includefloat f1(float x)

{

return(1.0+x);

}

float f2(float x)

{

return(2.0*x+3.0);

}

float f3(float x)
{
return(exp(x)+1);
}

float f4(float x)
{
return(pow(1+x,2));

}

float f5(float x)
{

return(pow(x,3));

}

float fsimp(float a,float b,float (*p)(float))

{

float c,s;

c=(a+b)/2;

s=(b-a)/6*(p(a)+4*p(c)+p(b));

return s;

}

int main()

{

float a,b;

printf("请输入积分下限a的值:");

scanf("%f",&a);

printf("请输入积分上限b的值:");

scanf("%f",&b);

printf("%f ",fsimp(a,b,f1));

}

(8)c语言积分公式扩展阅读

1、对应于一个积分式要有一段程序,可以改变程序的一小部分来改变所要求的积分式。

2、除数不能位0。

3、两个整数相除,结果仍是整数。

4、若被除数其中有一个为浮点数或者两个都为浮点数,则结果为浮点类型。操作数必须为整数,不能是浮点数。

‘玖’ C语言编程如何编写积分公式

#include<iostream.h>
//定义结构类型
structstudent
{
intnum;
charname[20];
floatgrade;
};
voidmain(void)
{
//声明数组
inti,size;
charstr[]="Thisisastring.";
intint_values[]={51,23,2,44,45,0,11};
floatfloat_values[]={15.1,13.3,22.2,10.4,1.5};
studentst_arr[]={101,"WangLin",92,102,"LiPing",85,103,"ZhaoMin",88};

//显示char类型数组元素及其大小
size=sizeof(str)/sizeof(char);
cout<<"Numberofelementsinstr:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<str[i];
}
cout<<endl;

//显示int类型数组元素及其大小
size=sizeof(int_values)/sizeof(int);
cout<<"Numberofelementsinint_values:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<int_values[i]<<"";
}
cout<<endl;

//显示float类型数组元素及其大小
size=sizeof(float_values)/sizeof(float);
cout<<"Numberofelementsinfloat_values:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<float_values[i]<<"";
}
cout<<endl;

//显示student类型数组元素及其大小
size=sizeof(st_arr)/sizeof(student);
cout<<"Numberofelementsinst_arr:";
cout<<size<<endl;
for(i=0;i<size;i++){
cout<<st_arr[i].num<<"";
cout<<st_arr[i].name<<"";
cout<<st_arr[i].grade<<endl;
}
}
#include<iostream.h>
//add()函数的定义,其有返回值
doubleadd(doublex,doubley)
{
doublez;
z=x+y;
cout<<x<<"+"<<y<<"="<<z<<endl;
return(z);
}

main()
{
doublea=0.5,b=1.0;

//以不同参数形式调用函数add()
cout<<"add(1.5,2.5)="<<add(1.5,2.5)<<endl;
cout<<"add(a,b)="<<add(a,b)<<endl;
cout<<"add(2*a,a+b)="<<add(2*a,a+b)<<endl;
cout<<"----------------------"<<endl;

//以表达式方式调用函数add()
doublec=2*add(a,b);
cout<<"c="<<c<<endl;
cout<<"----------------------"<<endl;

//以语句式方式调用函数add()
add(2*a,b);
cout<<"----------------------"<<endl;

//用其他类型参数调用函数add()
intn=1,m=2;
cout<<"add("<<n<<","<<m<<")="<<add(n,m)<<endl;
}
#include<iostream.h>
//定义符号函数sgn(),其返回值为int类型
intsgn(doublex)
{
if(x>0)return(1);//返回出口1
if(x<0)return(-1);//返回出口2
return(0);//返回出口3
}
//main()函数定义
main()
{
doublex;
inti;
for(i=0;i<=2;i++){
cout<<"x=";
cin>>x;
cout<<"sgn("<<x<<")="<<sgn(x)<<endl;
}
}

‘拾’ 用c语言求定积分

#include
#include
double integral(double(*fun)(double x),double a,double b,int,n){
double s,h,y;
int i;
s=(fun(a)+fun(b))/2;
h=(b-a)/n; /*积分步长*/
for(i=1;i<n;i++)
s=s+fun(a+i*h);
y=s*h;
return y;/*返回积分值*/
}
double f(double x){
return(x*sinx) /*修改此处可以改变被积函数*/
}
int main(){
double y;
y=integral(f,1.0,2.0,150);/*修改此处可以改变积分上下限和步数,步长=(上限-下限)/步数*/
printf("y=%f\n",y);
return 0;
}
int main()

热点内容
易拉罐压缩机 发布:2025-01-17 21:25:35 浏览:923
在c语言是什么意思啊 发布:2025-01-17 21:21:02 浏览:515
re0脚本 发布:2025-01-17 21:13:34 浏览:304
甜蜜家园密码箱有什么用 发布:2025-01-17 21:07:28 浏览:47
有教少儿编程 发布:2025-01-17 20:55:37 浏览:36
直播背脚本 发布:2025-01-17 20:50:18 浏览:409
ftp移动文件的mv命令 发布:2025-01-17 20:45:53 浏览:404
电脑上啥是服务器 发布:2025-01-17 20:40:48 浏览:352
安卓手机怎么连大众车载 发布:2025-01-17 20:20:53 浏览:241
杭州做分布式存储项目 发布:2025-01-17 20:06:10 浏览:872