C 中 "pow" 函数的组合
Composition of "pow" functions in C
我正在尝试对几个方程求积分,但程序无法编译。出现的错误消息说:"too many arguments to function pow"
我会展示代码中有问题的部分,然后提出两个具体问题。
#include <stdio.h>
#include <math.h>
struct Par{
double gamma1, gamma2;
} aa;
void ecuaciones(int n, double v[], double dv[], double t){
dv[0]=v[6] ;
dv[1]=v[7] ;
dv[2]=v[8] ;
dv[3]=v[9] ;
dv[4]=v[10] ;
dv[5]=v[11] ;
dv[6]= aa.gamma1*(v[3]-v[0])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[7]= aa.gamma1*(v[4]-v[1])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[8]= aa.gamma1*(v[5]-v[2])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[9]= -aa.gamma2*(v[3]-v[0])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[10]= -aa.gamma2*(v[4]-v[1])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[11]= -aa.gamma2*(v[5]-v[2])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
所以...问题出在 6 到 11 的 dv 中。问题如下:
在这种情况下可以使用 "pow" 函数吗?还是它只是为常量基定义的?
如果答案是肯定的(我几乎可以肯定是),那么就会出现以下疑问:
如何将一个 pow 函数与另一个函数组合在一起?
为了清楚起见,这就是我想用"pow"个函数的组合来表达的:
请注意,至少有一种方法可以解决此问题:即以 A*A= A 平方的形式从基数中写出平方项,而不是使用 pow。鉴于基数可以提高到非整数的幂,我的意见是,一般情况下的解决方案仍然很重要。
这种情况下使用pow
功能就可以了
您收到一个错误,因为您的外部 pow
函数每个都有三个参数,而 pow
只接受两个参数。
pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5)
简化为
pow(some_number, -1, 5)
所以这需要修复,以便 pow
只有底数和指数。
将所有 -1,5
更改为 -1.5
。我假设您正在尝试计算 3/2 的幂。
我正在尝试对几个方程求积分,但程序无法编译。出现的错误消息说:"too many arguments to function pow"
我会展示代码中有问题的部分,然后提出两个具体问题。
#include <stdio.h>
#include <math.h>
struct Par{
double gamma1, gamma2;
} aa;
void ecuaciones(int n, double v[], double dv[], double t){
dv[0]=v[6] ;
dv[1]=v[7] ;
dv[2]=v[8] ;
dv[3]=v[9] ;
dv[4]=v[10] ;
dv[5]=v[11] ;
dv[6]= aa.gamma1*(v[3]-v[0])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[7]= aa.gamma1*(v[4]-v[1])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[8]= aa.gamma1*(v[5]-v[2])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[9]= -aa.gamma2*(v[3]-v[0])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[10]= -aa.gamma2*(v[4]-v[1])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
dv[11]= -aa.gamma2*(v[5]-v[2])*pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5) ;
所以...问题出在 6 到 11 的 dv 中。问题如下:
在这种情况下可以使用 "pow" 函数吗?还是它只是为常量基定义的? 如果答案是肯定的(我几乎可以肯定是),那么就会出现以下疑问: 如何将一个 pow 函数与另一个函数组合在一起?
为了清楚起见,这就是我想用"pow"个函数的组合来表达的:
请注意,至少有一种方法可以解决此问题:即以 A*A= A 平方的形式从基数中写出平方项,而不是使用 pow。鉴于基数可以提高到非整数的幂,我的意见是,一般情况下的解决方案仍然很重要。
这种情况下使用pow
功能就可以了
您收到一个错误,因为您的外部 pow
函数每个都有三个参数,而 pow
只接受两个参数。
pow( (pow(v[0]-v[3], 2)+pow( v[1]-v[4], 2)+pow( v[2]-v[5], 2)), -1,5)
简化为
pow(some_number, -1, 5)
所以这需要修复,以便 pow
只有底数和指数。
将所有 -1,5
更改为 -1.5
。我假设您正在尝试计算 3/2 的幂。