在C语言中集成复合函数

在C语言中集成复合函数,c,math,numbers,composite,numerical-integration,C,Math,Numbers,Composite,Numerical Integration,我试图编辑一个使用梯形规则来集成函数的代码。 我的问题是,这个项目似乎不喜欢我不止一个涉及x的术语 $f(x)=\frac{\beta\gamma}{\delta}e^{-\gamma a}\lr{1-e^{-\delta a}e^{-\frac{\alpha\beta\mathbf{S}{\delta}\lr{1-e^{-\delta a}}$ 这是一张我想近似计算的积分图,因为latex似乎不起作用: 我从C的数字配方(第二版)中获取了一个代码,该代码使用梯形规则: #include<

我试图编辑一个使用梯形规则来集成函数的代码。 我的问题是,这个项目似乎不喜欢我不止一个涉及x的术语

$f(x)=\frac{\beta\gamma}{\delta}e^{-\gamma a}\lr{1-e^{-\delta a}e^{-\frac{\alpha\beta\mathbf{S}{\delta}\lr{1-e^{-\delta a}}$

这是一张我想近似计算的积分图,因为latex似乎不起作用:

我从C的数字配方(第二版)中获取了一个代码,该代码使用梯形规则:

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

double d = 0.7, b = 2.5, g = 1.1, a=0.3; /*One species case: delta, beta, gamma, alpha */
float s1=0.564029; /*s value*/
double exp(double x); /*defining e^x*/

/* Define function here */

double f (double x) { double myresult = b*g/d*exp(-g*x)*(1-exp(-d*x))*exp(-a*b*s1/d*(1-exp(-d*x))); return myresult; }

int main()
{
 float lower, upper, integration=0.0, stepSize, k;
 int i, subInterval;
system("clear");
 /* Input */
 printf("Enter lower limit of integration: ");
 scanf("%f", &lower);
 printf("Enter upper limit of integration: ");
 scanf("%f", &upper);
 printf("Enter number of sub intervals: ");
 scanf("%d", &subInterval);

 /* Calculation */
 /* Finding step size */
 stepSize = (upper - lower)/subInterval;

 /* Finding Integration Value */
 integration = f(lower) + f(upper);
 for(i=1; i<= subInterval-1; i++)
 {
  k = lower + i*stepSize;
  integration = integration + 2 * f(k);
 }
 integration = integration * stepSize/2;
 printf("\nIntegral of given function for given values is: %.3f", integration);
 getchar();
 return 0;
}
如果我有

#define f(x)  b*g/d*exp(-g*x)
然后它给出了该项的正确近似值

我试图分别定义这三个部分,即

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

double d = 0.7, b = 2.5, g = 1.1, a=0.3; /*One species case: delta, beta, gamma, alpha */
float s1=0.564029; /*s value*/
double exp(double x); /*defining e^x*/

/* Define function here */

#define f(x)  b*g/d*exp(-g*x)
#define g(x) (1-exp(-d x))
#define h(x) exp(-a*b*s1/d*(1-exp(-d x)))

int main()
{
 float lower, upper, integration=0.0, stepSize, k;
 int i, subInterval;
system("clear");
 /* Input */
 printf("Enter lower limit of integration: ");
 scanf("%f", &lower);
 printf("Enter upper limit of integration: ");
 scanf("%f", &upper);
 printf("Enter number of sub intervals: ");
 scanf("%d", &subInterval);

 /* Calculation */
 /* Finding step size */
 stepSize = (upper - lower)/subInterval;

 /* Finding Integration Value */
 integration = f(lower)*g(lower)*h(lower) + f(upper)*g(upper)*h(upper);
 for(i=1; i<= subInterval-1; i++)
 {
  k = lower + i*stepSize;
  integration = integration + 2 * f(k)*g(k)*h(k);
 }
 integration = integration * stepSize/2;
 printf("\nIntegral of given function for given values is: %.3f", integration);
 getchar();
 return 0;
}
#包括
#包括
#包括
双d=0.7,b=2.5,g=1.1,a=0.3/*一个物种案例:三角洲、β、γ、α*/
浮点数s1=0.564029/*s值*/
双exp(双x)/*定义e^x*/
/*在这里定义函数*/
#定义f(x)b*g/d*exp(-g*x)
#定义g(x)(1-exp(-dx))
#定义h(x)exp(-a*b*s1/d*(1-exp(-dx)))
int main()
{
浮动下限,上限,积分=0.0,步长,k;
intⅠ,子区间;
系统(“清除”);
/*输入*/
printf(“输入积分下限:”);
scanf(“%f”&更低);
printf(“输入积分上限:”);
scanf(“%f”及以上);
printf(“输入子间隔数:”);
scanf(“%d”和子间隔);
/*算计*/
/*查找步长*/
步长=(上-下)/子区间;
/*寻找积分值*/
积分=f(下)*g(下)*h(下)+f(上)*g(上)*h(上);

对于(i=1;i只需将所有
exp(-dx)
替换为
exp(-dx)

什么错误,具体来说?此代码会给我错误。显示实际错误是有意义的。请将它们准确粘贴到帖子中。从
exp(-dx)
->
exp(-dx)开始
@tstanisl谢谢!我可以问一下,为什么要定义这些宏而不是使用一些函数?还有,为什么要声明
exp
的原型?
#include<stdio.h>
#include<math.h>
#include<stdlib.h>

double d = 0.7, b = 2.5, g = 1.1, a=0.3; /*One species case: delta, beta, gamma, alpha */
float s1=0.564029; /*s value*/
double exp(double x); /*defining e^x*/

/* Define function here */

#define f(x)  b*g/d*exp(-g*x)
#define g(x) (1-exp(-d x))
#define h(x) exp(-a*b*s1/d*(1-exp(-d x)))

int main()
{
 float lower, upper, integration=0.0, stepSize, k;
 int i, subInterval;
system("clear");
 /* Input */
 printf("Enter lower limit of integration: ");
 scanf("%f", &lower);
 printf("Enter upper limit of integration: ");
 scanf("%f", &upper);
 printf("Enter number of sub intervals: ");
 scanf("%d", &subInterval);

 /* Calculation */
 /* Finding step size */
 stepSize = (upper - lower)/subInterval;

 /* Finding Integration Value */
 integration = f(lower)*g(lower)*h(lower) + f(upper)*g(upper)*h(upper);
 for(i=1; i<= subInterval-1; i++)
 {
  k = lower + i*stepSize;
  integration = integration + 2 * f(k)*g(k)*h(k);
 }
 integration = integration * stepSize/2;
 printf("\nIntegral of given function for given values is: %.3f", integration);
 getchar();
 return 0;
}