gpt4 book ai didi

c - 在 C 中数值求解常微分方程时出错 - ‘=’ 标记之前错误 : expected ‘,’ , ‘;’ 、 ‘asm’ 、 ‘__attribute__’ 或 ‘{’

转载 作者:行者123 更新时间:2023-11-30 19:10:02 24 4
gpt4 key购买 nike

编译 C 代码时出现以下错误。我正在使用《数字食谱》第二版。用于求解一阶微分方程的函数 rk4()。

我不是这个领域的专家。任何帮助将不胜感激。

错误是:

first_order_DE_RK4_example1.c:75: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘{’ token

代码是:

#include "nrutil.h"
#include <stdio.h>
#include <math.h>

void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []));

void (*derivs)(float, float[], float[]);


int main()
{
int n; float h; float x;
float y[1];
float dydx[1];

n=1;
h=0.2;
x=0;
y[0] = 1;
dydx[0] = 5.0;

void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []));

return 0;
}


void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []))
{
int i;
float xh,hh,h6,*dym,*dyt,*yt;

dym=vector(1,n);
dyt=vector(1,n);
yt=vector(1,n);
hh=h*0.5;
h6=h/6.0;
xh=x+hh;

for (i=1;i<=n;i++)
{
yt[i]=y[i]+hh*dydx[i];
(*derivs)(xh,yt,dyt);
}

for (i=1;i<=n;i++)
{ yt[i]=y[i]+hh*dyt[i];
(*derivs)(xh,yt,dym);
}

for (i=1;i<=n;i++)
{
yt[i]=y[i]+h*dym[i];
dym[i] += dyt[i];
}

(*derivs)(x+h,yt,dyt);

for (i=1;i<=n;i++)
{
yout[i]=y[i]+h6*(dydx[i]+dyt[i]+2.0*dym[i]);
}

free_vector(yt,1,n);
free_vector(dyt,1,n);
free_vector(dym,1,n);
}


void (*derivs)(float x, float y, float dydx)
{
float rhs;
rhs = 1-x+4*y;
}

最佳答案

您似乎无缘无故地使用函数指针,并将原型(prototype)和声明与调用和定义混淆。

在顶部,此更改:

void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []));

void (*derivs)(float, float[], float[]);
void rk4(float y[], float dydx[], int n, float x, float h, float yout[]);

void derivs(float, float[], float[]);

main中,这个:

void rk4(float y[], float dydx[], int n, float x, float h, float yout[], 
void (*derivs)(float, float [], float []));
rk4(y, dydx, n, x, h, yout); // with some appropriate declared yout

rk4的定义中,

void rk4(float y[], float dydx[], int n, float x, float h, float yout[],
void (*derivs)(float, float [], float []))
void rk4(float y[], float dydx[], int n, float x, float h, float yout[])

对于调用rk4中的derivs

(*derivs)(xh,yt,dyt);
derivs(xh, yt, dyt);

derivs的定义中,

void (*derivs)(float x, float y, float dydx)
void derivs(float x, float y[], float dydx[])

然后修复rhs的计算。

如果您发现自己将来编写sometype (*name)而不打算使用函数指针,请停止。=)

关于c - 在 C 中数值求解常微分方程时出错 - ‘=’ 标记之前错误 : expected ‘,’ , ‘;’ 、 ‘asm’ 、 ‘__attribute__’ 或 ‘{’,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41996542/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com