对于一重定积分来说其求解可以使用梯形法进行求解,计算公式如下所示:
创新互联是一家专注于成都网站制作、网站建设与策划设计,开平网站建设哪家好?创新互联做网站,专注于网站建设十余年,网设计领域的专业建站公司;建站业务涵盖:开平等地区。开平做网站价格咨询:18980820575
其中,f(x)为被积函数,为横坐标的两点间的间隔,越小,则计算出的结果越精确。
对于求解此类问题可以使用C语言中的回调函数编写通用的计算函数,代码如下:
#include stdio.h
#include stdlib.h
#includemath.h
//功能:返回f(x)在积分区间[a,b]的值
//参数:FunCallBack 指向用于计算f(x)的函数
// a 积分区间的起始值
// b 积分区间的结束值
// dx 横坐标的间隔数,越小计算结果越准确
double Calculate(double (*FunCallBack)(double x),
double a,double b,double dx)
{
double doui;
double total = 0; //保存最后的计算结果
for (doui = a; doui = b; doui += dx)
{
total += FunCallBack(doui)*dx;
}
return total;
}
double f2(double x)
{
return x*x;
}
double f(double x)
{
return x;
}
double f3(double x)
{
return x*x*x ;
}
int main()
{
double total;
total = (Calculate(f, 2, 3, 0.000001));
printf("total = %lf\n", total);
total = (Calculate(f2, 2, 3, 0.000001));
printf("total = %lf\n", total);
total = (Calculate(f3, 2, 3, 0.000001));
printf("total = %lf\n", total);
return 0 ;
}
其中,函数f,f2,f3为自行编写的关于x的被积函数。
运行结果:
total = 2.500000
total = 6.333331
total = 16.249991
因为int最大的数据才32767,你那个a的值已经是100多的数量级了,把int改为double,然后输出%d改为%f,再看结果吧
知道积分上下限, 与分段数目, 是不足以求出定积分值的.
好歹你也得输入一个被积函数.
#includestdio.h
int main(void)
{
int x,y;
printf("请输入数字,空格分割\n");
scanf("%d%d", x, y);
printf("结果是 %d\n", x*y);
return 0;
}
#include stdio.h
//计算两数相乘函数
int multi(int x,int y)
{
return x*y; //返回两数相乘结果
}
int main()
{
int m,n;
printf("输入两个整数: ");
scanf("%d%d",m,n);
printf("%d * %d = %d\n",m,n,multi(m,n)); //调用函数,输出结果
return 0;
}
#includestdio.h
#includemath.h//pow()指数函数头文件;
#define e 2.71828//定义自然常数e;
int main ()
{
double a,b,n1,n2,n3,n4,n5,t;
scanf("%lf%lf",a,b);
if(ab)//保证上限比下限大;
{
t=a;
a=b;
b=t;
}
n1=a-b+0.5*(a*a-b*b);//a和b是未知数,积分运算后,原式=a和b混合运算的代数式;
n2=a*a-b*b+3*a-3*b;
n3=e*0.5*(a*a-b*b)+a-b;
n4=(pow(a+1,3)-pow(b+1,3))/3;
n5=(pow(a,4)-pow(b,4))/4;
printf("%.2lf %.2lf %.2lf %.2lf %.2lf",n1,n2,n3,n4,n5);
return 0;
}
图1是运行结果,图2是原题的积分结果;通过数学的积分结果可以看出,积分符号的不在了;只剩下上下限a,b组成的代数式;