VS C++についての質問です。
プログラム自体触り始めて数か月の初心者です。
VS C++で黄金分割探索を書きました。しかし、改良したい点が2点あり、質問させていただきました。
1.以下ソースコードのmに文字が入力されたとき、誤作動が起こります。これの回避方法を教えてください。
2.gnuplotを用いてf(x)のグラフを書きたいのですが、gnuplotの開き方がよくわかりません。
なお、gnuplotは、c:\Program File\gnuplot\bin\wgnuplot.exeにあります。
おそらく初歩的な部分で躓いていると思うのですが、どうぞよろしくお願いいたします。
(※プログラムの呼び出しもよくまだわかっていません。)
C++
1 2#include <iostream>; 3using namespace std; 4 5static const double GRATIO = (1 + sqrt(5)) / 2; //黄金比; 6static double a, b, c; //二次関数の係数; 7int m = 100; //極値を調べるxの範囲 8 9double f(); //f(x)=ax^2+bx+c; 10double GSS(double xl, double ux, int T);//GoudenSelectionSearch(黄金分割探索); 11 12int main() { 13 a = ' '; 14 cout << "二次関数の極値を求めます." << endl 15 << "二次関数f(x)=ax^2+bx+cで" << endl; 16// << "調べるxの範囲を入力してください.(-x~x)" << endl; 17// cin >> m; 18 cout << "aの値を入力してください." << endl; //aの値を入力; 19 cin >> a; 20 if (a == 0) { 21 cout << "aには0以外の値を入力してください.\n" << endl; 22 return main(); 23 } 24 cout << "bの値を入力してください." << endl; //bの値を入力; 25 cin >> b; 26 cout << "cの値を入力してください." << endl; //cの値を入力; 27 cin >> c; 28 if (a < 0) { 29 cout << "f(x)が極大値を取るxの値は" << (GSS(-m, m, 100)) << endl; 30 } 31 else { 32 cout << "f(x)が極小値を取るxの値は" << (GSS(-m, m, 100)) << endl; 33 } 34 35 return 0; 36} 37 38double f (double x) {//f(x)=ax^2+bx+c; 39 return a*x*x+b*x+c; 40} 41 42// f(x)が極値を取るときのxを求める. 43// lx:最小値; ux:最大値; T:試行回数; 44double GSS(double lx, double ux, int T) {//min_x 45 double x1 = lx + (ux - lx) / (GRATIO + 1); //lx~uxの内分点1; 46 double x2 = lx + (ux - lx) / GRATIO; //lx~uxの内分点2; 47 double f1 = f(x1); //内分点での値1; 48 double f2 = f(x2); //内分点での値2; 49 50 if (a > 0) { //下に凸の関数の場合; 51 for (int i = 0; i < T; i++) {//lx~uxの範囲でxの最小値を求める. 52 if (f1 > f2) { 53 lx = x1; 54 x1 = x2; 55 f1 = f2; 56 x2 = lx + (ux - lx) / GRATIO; 57 f2 = f(x2); 58 } else { 59 ux = x2; 60 x2 = x1; 61 f2 = f1; 62 x1 = lx + (ux - lx) / (GRATIO + 1); 63 f1 = f(x1); 64 } 65 } 66 return (lx + ux) / 2; 67 } else {//上に凸の関数の場合; 68 for (int i = 0; i < T; i++) {//lx~uxの範囲でxの最大値を求める. 69 if (f1 > f2) { 70 ux = x2; 71 x2 = x1; 72 f2 = f1; 73 x1 = lx + (ux - lx) / (GRATIO + 1); 74 f1 = f(x1); 75 } 76 else { 77 lx = x1; 78 x1 = x2; 79 f1 = f2; 80 x2 = lx + (ux - lx) / GRATIO; 81 f2 = f(x2); 82 83 } 84 } 85 return (lx + ux) / 2; 86 } 87}
>mに文字が入力されたとき・・・意味不明?・・・コメント部分ですか? また、文字とは?
回答1件
あなたの回答
tips
プレビュー