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つ以上の多項式についても、配列変数の引数を増やすことで多項式を扱うことができます。


では次の記事で多項式の加法を計算する方法をみてみましょう。




  • Twitterで共有
  • Facebookで共有
  • はてなブックマークでブックマーク

作者を応援しよう!

ハートをクリックで、簡単に応援の気持ちを伝えられます。(ログインが必要です)

応援したユーザー

応援すると応援コメントも書けます

新規登録で充実の読書を

マイページ
読書の状況から作品を自動で分類して簡単に管理できる
小説の未読話数がひと目でわかり前回の続きから読める
フォローしたユーザーの活動を追える
通知
小説の更新や作者の新作の情報を受け取れる
閲覧履歴
以前読んだ小説が一覧で見つけやすい
新規ユーザー登録無料

アカウントをお持ちの方はログイン

カクヨムで可能な読書体験をくわしく知る