2016-07-13 11 views
-1

2つの方程式を統合しようとしていますが、プログラムがコンパイルできません。表示されるエラーメッセージには、「関数powの引数が多すぎます」C言語での "pow"関数の構成

コードの問題の部分が表示され、次に2つの具体的な質問が表示されます。

#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'sにある質問は次のとおりです。

が、それはこの場合には、「POW」機能を使用しても大丈夫ですか、それはあります一定の基底に対してのみ定義されていますか? 答えが「はい」(これはほとんど確信しています)の場合、次の疑いが表示されます。 別のものでpow関数を作成するにはどうすればよいですか?

明確にするために、これは私が「POW」機能の組成物を用いて表現したいものです。この問題を回避行くための少なくとも一つの方法をthere's enter image description here

注:それは書くことですA * A = Aの形の基底からの2乗項は、powを使用する代わりに2乗されます。ベースが非整数の力に上げることができるという事実を考えると、私の意見は、一般的なケースの解決策は依然として非常に重要であるということです。

+0

小さなタブレット画面で間違ったparensを数えるのでなければ、包囲しているpow()コールに3つの引数が渡されています。 –

+1

'-1.5'は' -1.5'でしょうか? 'pow'関数に3つの引数を与えることはできません。 – thelaws

+0

はい、実際にはタイプミスでした。あなたの時間のためのThx –

答えて

0

この場合、pow関数を使用しても問題ありません。

powが2つの引数のみを受け入れると、外側のpow関数にそれぞれ3つの引数があるため、エラーが発生しています。

pow((pow(v[0]-v[3], 2)+pow(v[1]-v[4], 2)+pow(v[2]-v[5], 2)), -1,5) 

だからこのpowベースのみ指数を有するように修正する必要が

pow(some_number, -1, 5) 

に簡素化されます。

+0

ああ私は...実際にあなたがアップロードした画像をチェックすると、3/2 = 1.5になることを意図していた。それはタイプミスであった。 –

+0

@Gato Mazzei投稿のオフサイトURLへのリンクが使用されるとは思わない。ここに関連データを掲載してください。 – chux

2

-1,5-1.5に変更してください。私はあなたが3/2までの力を計算しようとしていると仮定します。

+0

それはそれを修正しました。ありがとう!愚かな誤植... –

+0

'pow(n、2)'を 'double sqr(n){return n * n;}として単純化することができます。 (v [1] - v [4])+ sqr(v [2] - v [5]))のように、 -1.5) '。 'pow(n、-1.5)'は '1.0 /(n * sqrt(n))'に相当することにも注意してください。 –