プロが教えるわが家の防犯対策術!

n次の実多項式に複素数を代入するプログラムを教えてください。

typedef struct{
double r;
double i;
}comp;

/*複素数の和*/
comp c_add(comp a,comp b){
comp c;
c.r = a.r + b.r;
c.i = a.i + b.i;
return(c);
}

/*複素数のべき乗*/
comp c_pow(comp a,int n){
comp c;
int i;
double tpr,tpi;
c.r = a.r; c.i = a.i;

for(i=1;i<n;i++){
tpr = c.r; tpi = c.i;
c.r = tpr*a.r - tpi*a.i;
c.i = tpr*a.i + tpi*a.r;
}
return(c);
}
を定義してから、

/*a[]は多項式の係数、nは多項式の次数、bは代入する複素数*/
comp c_poly_eval(double a[], int n, comp b){
int i;
comp tmp={0.0,0.0};

for(i=n; i>=0; i--){
tmp = c_add(tmp, a[i]*c_pow(b,i));
}

return(tmp);
}
を作ったのですがエラーが出てしまいます。
a[i]*c_pow(b,i)でn次の値を計算して、c_addにいれることで0次~n次までの和を求めようとしたのですが、何が違うのでしょうか?

A 回答 (2件)

エラーが出ているのは


> a[i]*c_pow(b,i)
この部分ですね。

「double型とcomp型とのかけ算」なんて演算はどこにも定義されてませんので、 その2つに「*」演算子を適用することはできません。
comp型同士の足し算用に c_add 関数を作ったように、
double型×comp型を計算する c_mul 関数を作って、
> tmp=c_add(tmp, c_mul(a[i], c_pow(b,i)));
のようにしましょう。
    • good
    • 0
この回答へのお礼

なるほど!
構造体のメンバがdoubleなので、
メンバを各々かけてくれるものだと思ってました(汗

無事、プログラムできました。ありがとうございました。

お礼日時:2008/07/13 20:16

> エラーが出てしまいます。



コンパイル時ですか?実行時ですか?
エラーメッセージは?

もし、当方でコンパイルしてみる必要があるならば、
main関数の定義などを含むコード全体を載せてください。
    • good
    • 0
この回答へのお礼

コンパイルに失敗です^^;
エラーメッセージは書くべきでした。。すいません。

main自体は、複素数代入解を求めるものではなくて、
伝達関数(有理多項式)から周波数応答を求めるプログラムなので、
書いてません。というか、わからなくて載せられません(笑

お礼日時:2008/07/13 20:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!