解決済み

複素数代入解(C言語)

  • すぐに回答を!
  • 質問No.4173420
  • 閲覧数319
  • ありがとう数2
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 100% (2/2)

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次までの和を求めようとしたのですが、何が違うのでしょうか?

質問者が選んだベストアンサー

  • 回答No.2

ベストアンサー率 73% (867/1179)

エラーが出ているのは
> 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)));
のようにしましょう。
お礼コメント
muhmi

お礼率 100% (2/2)

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

無事、プログラムできました。ありがとうございました。
投稿日時 - 2008-07-13 20:16:06
Be MORE 7・12 OK-チップでイイコトはじまる

その他の回答 (全1件)

  • 回答No.1

ベストアンサー率 31% (1560/4959)

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

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

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

お礼率 100% (2/2)

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

main自体は、複素数代入解を求めるものではなくて、
伝達関数(有理多項式)から周波数応答を求めるプログラムなので、
書いてません。というか、わからなくて載せられません(笑
投稿日時 - 2008-07-13 20:24:09
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
こんな書き方もあるよ!この情報は知ってる?あなたの知識を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する

特集


より良い社会へ。感謝経済プロジェクト始動

ピックアップ

ページ先頭へ