C语言中“pow”函数的组成

时间:2016-07-13 19:42:55

标签: c integration pow function-composition

我正在尝试集成几个方程式,但程序无法编译。出现的错误消息显示:“函数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”函数的组合来表达的:enter image description here

请注意,至少有一种方法可以解决这个问题:即以A * A = A平方而不是使用pow形式从基数写出平方项。鉴于基数可以提升到非整数幂,我的观点是一般案例解决方案仍然非常重要。

2 个答案:

答案 0 :(得分:2)

将所有-1,5更改为-1.5。我假设您正在尝试将功率计算为3/2。

答案 1 :(得分:0)

在这种情况下可以使用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只有一个基数和一个指数。