我试图在我下面提到的代码中执行fft,但是我遇到了一些错误,我将在底部提到这段代码
#include<stdio.h>
#include<complex.h>
#include <gsl/gsl_integration.h>
#include"H.h"
#define REAL(z,i) ((z)[2*(i)])
#define IMAG(z,i) ((z)[2*(i)+1])
int
main (void)
{
gsl_integration_workspace * w
= gsl_integration_workspace_alloc (10000);
double qr,error;
double expected = -4.0;
double a1 = 1e-14;
double a= 150;//150;
double pi = 3.1415;
double T = 2500;
double b = (315777/(1000*T));
//printf("b = %f",b);
double mu = (2*pi)/b;
double om=7.15;
double om1=7.267;
int m;
for( m=1; m<11; m++)
{
double t = 4.14937*(m-1);
struct har item = {t,mu};
struct har *p_params = &item;
gsl_function q; //ok
q.function = &H;
q.params =&t;
gsl_integration_qags (&q, a1, a, 0,1e-7, 10000, w, &qr, &error);
printf ("\nqtresult = % .18f\n", qr);
}
gsl_integration_workspace_free (w);
}
用户定义函数H.h如下
#include"I.h"
#include"str.h"
double H (double x,void * params )
{
double t = *(double *) params;
//printf("%f\n",t);
//struct har t1,z;
//double t = z.params ->t1;
double H = I(x)*(sin(x*t));
return H;
}
结构文件和I.h如下
double I(double x)
{
double gamma=0.182;
double tau=0.41493;
double om=7.1534;
double I=(gamma*x)/(pow((pow(om,2)-pow(x,2)),2)*(1+pow((x*tau),2))+(2*gamma*x*((pow(om,2)-pow(x,2))*x*tau)+pow((gamma*x),2)));
//double I = pow(x,2);
return I;
}
用户定义函数I.h如下
〜
struct har{
double t;
double k;
double mu;
};
上面编写的代码成功运行,直到我在代码中不包含complex.h头文件。 添加complex.h作为头文件后,我收到两个错误,如下所示: 1.错误:在test.c中包含的文件中:3:0:I.h:1:8:错误:预期标识符或'('在'扩展名'之前'' 2.called对象不是函数或函数指针double
请帮我解决一下。希望你最早回答。
谢谢
问候
拉梅什
答案 0 :(得分:1)
除了重复使用您的函数和变量名I
和'H'之外,您根本不应使用I
作为您自己的标识符。
7.3复杂算术(complex.h)
7.3.1简介
...
宏
I
扩展为_Imaginary_I
或_Complex_I
。如果未定义_Imaginary_I
,I
将扩展为_Complex_I
。
答案 1 :(得分:0)
你有一个函数和一个变量名I,所以编译器可能会在两者之间混淆。改为:
double I(double x)
{
double gamma=0.182;
double tau=0.41493;
double om=7.1534;
double Ival=(gamma*x)/(pow((pow(om,2)-pow(x,2)),2)*(1+pow((x*tau),2))+(2*gamma*x*((pow(om,2)-pow(x,2))*x*tau)+pow((gamma*x),2)));
return Ival;
}