• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Cプログラミングの問題です。ニュートン法を利用して3次方程式の解を求めるプログラミング作成。)

C言語のプログラム作成:ニュートン法を利用した3次方程式の解の求め方

このQ&Aのポイント
  • C言語のプログラミング問題で、ニュートン法を利用して3次方程式の解を求めるプログラムを作成する方法について説明します。
  • 3次方程式を解くためには、ニュートン法というアルゴリズムを利用します。このアルゴリズムを用いると、与えられた3次方程式の実根を求めることができます。
  • プログラミングが苦手な方でも、ニュートン法を使えば3次方程式の解を求めることができます。この記事では、具体的なプログラムの作成手順を説明します。

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

  • ベストアンサー
  • BLK314
  • ベストアンサー率55% (84/152)
回答No.2

3次方程式は複雑なので2次方程式で示します. なんとか頑張って応用してください 前提として実数解のみとし 虚数解の場合はエラー扱いとします。 方程式は a * x ^2 * b * x + c = 0とします 判別式を実装します CalcDという名前にします。 double CalcD(double a, double b, double c) { return b * b - 4 * a * c; } 特に難しい部分はないと思います 係数から判別式を計算し、それを関数の値として戻しています 次に、方程式本体を解く部分を作ります Resolvという名前にします ここで難しいのはエラー(判別式 < 0)をどう扱うか?です 今回の場合、エラーつまり異常事態として扱うので C++であれば本来、例外で教えるべきなのですが、 例外を扱うと少々難しくなりますのでやめます。 今回は解の個数を戻すことで判定させることとします 解事体は配列に入れて戻すことにします。 int Resolv(double a, double b, double c, double buffer[]) { // 解の個数を求めます // 判別式を関数として実装してあるので、それを使います   double d = CalcD(a, b, c) if (d < 0) return 0; // 実数解はありません   if (d == 0) { buffer[0] = -b / (2 * a); return 1; // 重解です }  else { buffer[0] = (-b + sqrt(d)) / (2 * a); buffer[1] = (-b - sqrt(d)) / (2 * a); return 2; // 相異なる2つの実数解です } } あとはプログラム全体を制御する部分です しかし、もう部品はありますのであとは簡単です int main(int argc, char *argv[]) { // エラーチェックは省略します  // 本来はパラメータの妥当性を検証すべきです  double a = atof(argv[0]);  double b = atof(argv[1]);  double c = atof(argv[2]); // 実際に計算します  double buffer[2]; int n = Resolv(a, b, c, buffer); // 結果を表示します  switch (n) { case 0: printf("実数解はありません。"); break; case 1: printf("実数解は %f です.", buffer[0]); break; default: printf("実数解は %f と %fです.", buffer[0], buffer[1]); } return 0; } 如何でしょうか? プログラムの作成の雰囲気のようなものがつかめたでしょうか? とにかく、分かり易い単位に関数を作ることが大切です。 関数へのパラメータの渡し方 関数からの情報の戻し方(戻り値を使う方法、アドレス渡し(配列もアドレス渡しです)等のテクニックを伝えたつもりです これを参考に3次方程式も頑張ってください

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

ニュートン法がどのようなものか, まずは書いてみてください. 「プログラムが得意でない」ことを強調されているということは, これくらい余裕ですよね?

全文を見る
すると、全ての回答が全文表示されます。
  • asuncion
  • ベストアンサー率33% (2126/6286)
回答No.1

>どなたか教えてください、よろしくお願いします。 何をお教えすればよいのでしょうか。 文面を拝見すると、答えを出すプログラムの作成を依頼なさっているようにお見受けします。 ということは、質問ではなくて丸投げに相当するように思えますが、 ご本人のお気持ちもそういうことでしょうか。 ところで、学校かどこかの課題ですか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • C言語でニュートン法を使い2次方程式の解を求める

    プログラミング初心者ですが、 今回ニュートン法で2次方程式の解を求めるプログラムを作成しようとしています。 しかしプログラムがよくわからないので、どなたかおしえていただけないでしょうか。 よろしくおねがいします。

  • 3次方程式の求解プログラム(ニュートン法)について!

    初心者です! ニュートン法での3次方程式の求解プログラムを作成しようとしています。 ですがよく分かりません(-_-;) どなたか教えていただけないでしょうか。。。

  • C言語のプログラムの問題で質問です。

    C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。 普通の連立方程式を解くプログラムならできるのですが、ニュートン法 で解くというのが分かりません。 プログラムを教えてください。参考にしたいです。

  • 3連立非線型方程式の解法プログラム(ニュートン法)を教えてください

     未知数が3つで非常に難解な非線型方程式を3連立方程式にして解きたいと思っています。  ですが、手計算による代入法等の解法を行うと、とんでもなく式が長くなってしまいとても解けません。そこでc言語のプログラミングにて計算し、3連立方程式から3つ未知数の解を求めたいのですが、プログラミングはまったくの初心者であるため、いまいちよく分かりません。  解法プログラミングとしてはニュートン法が最も適切だとお聞きしました。ニュートン法にて例として下記のような式を解く場合、どのようにプログラムすれば良いか教えていただけたら幸いです。 例 2*x*x*x + 4*x*y + cos(z) = 0 x*x*y*z + logz + 2*y = 0 2*x*x + y*z +z*z*z +4 + e~(-xy) =0  この例は私が勝手に作成したので解は存在しているかわかりませんが、実際にこのような3連立非線型方程式を解く場合はどのようなプログラムになるか教えていただけたら幸いです。また、実際に私が解こうと思っている式はこの例より非常に長いものとなっています。あつかましいようですがそのことを考慮に入れてお教え頂けたら幸いです。何卒お願いいたしします。

  • ニュートンラフソン法のプログラミングの問題……

    今年、工学基礎という新しくできた講義の中でC言語でのプログラミングを学ぶ事になったんですが… 普通高校出身の自分は専門の勉強についていけず落ちこぼれてます。 自学自習を重ねていますが毎回出される課題にギリギリついていける状態でした。 が、ついにきてしまいましたね………。 『それでは、今回の課題は……、実根をニュートンラフソン法で求めるプログラミングを作ってきてください。』 今までは、テキストに参考になるヒントが載っていたのですが、今回は天から見放された感が(涙) しかも明後日の朝一での課題提出。 自分でも必死に参考書かき集めて探してますが、全く参考書になる資料がなく困ってます。 そこでお手数ですがプログラミングを教えてくれませんか? あと、参考になるテキストとかも教えてもらえれば幸いです。 誠に勝手ながらお願いしますm(_ _)m       次のf(x)=0の実根をニュートン・ラフソン法で求めるCプログラムを作成せよ。 f(x)=x^3-x-6 初期値や収束判定に必要な定数などは#defineを使ってプログラム中で設定し、それらの値を答と共にわかりやすく出力すること。 したがって、プログラム中に入力用関数scanfなどを含めないこと。 なおf'(x)の値はf(x)を手で微分した導関数にxを代入して関数値として求める。 すなわち、当レポートでは数値微分を使う必要はない。

  • ニュートン法を使って解を求めるC言語プログラム

    C言語を使って y=x^2-4x のyの解をニュートン法を使って求める プログラムを作る課題を出されたんですが、ニュートン法が良く分かっていないので、いろいろ調べたり、人に聞いたりしたところ #include<stdio.h> #include<math.h> void main() { int counter=0; double an,g,f,sh=0.0001; printf("初期値を入力して下さい==>"); scanf("%ld",&an); do{ g=(an*an)/(2*an-4); f=2*an-4; counter++; }while(fabs(f)>sh); printf("反復回数 %d 回 y=%lf \n",counter,g); } でプログラムがこんな感じになったんですが、結局ニュートン法がどうなのかがわかりません。 なんか微分とかやるとか言われたんですが、工業系の学校で数学の授業が無いので微分についてがわかりません。 このプログラムは、コンパイルはできるんですが、動きません。 ニュートン法についてよくわからないのでどこが間違ってるかわかりません。 ニュートン法についてできるだけ分かりやすく解説してほしいです。

  • C言語のプログラムの問題で質問です。

    C言語のプログラムの問題で質問です。 問題は、 与えられた実数(a,b,c,d)に対して、次の連立非線形方程式の解 を「ニュートン法」を用いて解く。 f1(x,y)=y+ax^2-b=0 f2(x,y)=y^2+cx^2-d=0 ただし初期値(a,b,c,d)を入力でき、上記の方程式の解が画面表示されること。 という問題です。まず、どういう方針で作っていくのかが分かりません。 できるのなら参考例を挙げてもらえればありがたいです。お願いします。

  • ニュートン法を用いたプログラミング

    プログラミングの質問です。ニュートン法でf=tx^2+3/2x^4を最小にするx(>=0)をtの関数として求めるプログラムを作成せよ。また実行結果をt vs xグラフに表せ、とういう問題なのですが、式に文字Xのみが出てくる方程式ならできるのですが、tが入ってきたのでわからなくなってしまいました。どなたか教えていただけないでしょうか。よろしくお願いします。

  • はさみうち法とニュートン法について

    はさみうち法とニュートン法のプログラムのついてのことなんですが、ひとつずつ解を求めるプログラムは作れました。例えば三次方程式だったら三つの解をすべて求めるプログラムをつくるにはどうすればいいんでしょうか?

  • ニュートン法でのプログラミング

    ニュートン法を用いてf(x)=X^2-2の正の解を求めなさい。 また、反復回数が増えるにしたがって解が収束していく様子を表示しなさい。 という問題なのですが、いくら反復回数を増やしても誤差がでてしまい、うまくいきません。このプログラミング解いていただきたいです。よろしくお願いします。

このQ&Aのポイント
  • 円錐ナットと六角ナットが交互に使用されている理由について解説します。
  • 新大阪駅周辺で見られる円錐ナットと六角ナットのパターンについて調査しました。
  • 円錐ナットと六角ナットの使用には特別な意味はなく、デザイン上の選定とされています。
回答を見る

専門家に質問してみよう