我正在尝试集成几个方程式,但程序无法编译。出现的错误消息显示:“函数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”函数的组合来表达的:
请注意,至少有一种方法可以解决这个问题:即以A * A = A平方而不是使用pow形式从基数写出平方项。鉴于基数可以提升到非整数幂,我的观点是一般案例解决方案仍然非常重要。
答案 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
只有一个基数和一个指数。