C言語で学ぶ大学の数学
アカイロモドキ
C言語で学ぶ大学の数学 準備編「多項式を扱うには」
この記事はC言語で以下のものを扱うことを目標とします。
・int型やfloat型など、C言語で扱うことの出来る数値を係数とする1変数多項式
・係数は上と同じ2変数多項式
1.C言語で1変数多項式を扱う方法
C言語で扱うことのできるものは、整数や有限桁の小数などの「数値」です。「変数」は直接扱うことはできません。
そのため多項式を直接定義することはできません。
ですが、多項式は
1 + 2x - x^2 + x^3
のように変数xのべき乗と、その係数から成り立っています。
上の多項式は係数が数値であるため、その数値を次数ごとに取り出せばC言語で扱うことができます。
また、計算を容易にするためには、多項式の「項の次数」と「項の係数」をうまく対応させたくなります。
そのために配列変数を使います。x^nの係数をa[n]に格納します。
例えば上の多項式には
a[0] = 1;
a[1] = 2;
a[2] = -1;
a[3] = 1;
を対応させてやればよいと分かります。
変数型をfloatにするのであれば、
float a[4];
と宣言してから上の値を代入します。
一般にN次多項式を定義するには
int deg_a = N;
float a[deg_a +1];
のように、次数に+1した個数の変数を用意します。ただしNは整数です。
(次数が255以下の多項式を扱う場合はメモリ節約のためにdeg_aをunsigned char型の変数にした方がいいと思います。配列変数a[]の型も必要に応じて変えます。)
2.C言語で2変数多項式を扱う方法
次に2変数多項式を考えます。例えば
-2 + 3x - y + x^2 + 2xy
のような多項式が与えられたとします。
2変数多項式を定義する場合、xとyそれぞれの次数をみて配列変数を定義します。
上の例ではxについては2次、yについては1次なので
float a[3][2];
と宣言します。そしてx^m*y^nの係数をa[m][n]に格納します。上の例の場合は
a[0][0] = -2;
a[1][0] = 3;
a[2][0] = 1;
a[0][1] = -1;
a[1][1] = 2;
a[2][1] = 0;
のように代入します。
一般には
int deg_ax = N;
int deg_ay = M;
float a[deg_ax +1][deg_ay +1];
のように宣言します。N, Mは次数を表す非負整数です。
a[][]に値を代入するのはscanfを使って
for(i=0; i<=deg_ax; i++){
for(j=0; j<=deg_ay; j++){
printf("coefficient of x^%dy^%d =",i,j);
scanf("%f",&a[i][j]);
}
}
などとすると便利です。3行目のprintfは入力の補助のためなので必須ではありません。
変数が3つ以上の多項式についても、配列変数の引数を増やすことで多項式を扱うことができます。
では次の記事で多項式の加法を計算する方法をみてみましょう。
新規登録で充実の読書を
- マイページ
- 読書の状況から作品を自動で分類して簡単に管理できる
- 小説の未読話数がひと目でわかり前回の続きから読める
- フォローしたユーザーの活動を追える
- 通知
- 小説の更新や作者の新作の情報を受け取れる
- 閲覧履歴
- 以前読んだ小説が一覧で見つけやすい
アカウントをお持ちの方はログイン
ビューワー設定
文字サイズ
背景色
フォント
組み方向
機能をオンにすると、画面の下部をタップする度に自動的にスクロールして読み進められます。
応援すると応援コメントも書けます