この問題は解決されましたが、新しい問題の性質はコンパイルの成功ではなく、コードの実際のロジックに関連しているため、新しいトピックを作成しても問題ないと感じました。これまでの私のコードは次のとおりです。
#include "assign4.h"
#include <iostream>
using namespace std;
int main(int argc, char * argv[]){
solution s;
double root;
cout << "Enter interval endpoints: ";
cin >> s.xLeft >> s.xRight;
cout << "Enter tolerance: ";
cin >> s.epsilon;
root = s.bisect (s.xLeft, s.xRight, s.epsilon, &solution::f, s.error);
if (!(s.error))
cout << "Root found at " << root << "\nValue of f(x) at root is: " << s.f(root) << "\n";
else {
cout << "The solution of a quadratic equation with coefficients: " << endl;
// cout << "a = " << a << ", b = " << b << ", c = " << c << endl;
cout << "has not been found." << endl;
}
return 0;
}
/////////////////////////////////////////////// /////////////////////////////////////////////// ///////////////////////////////////////////
#include "assign4.h"
#include <iostream>
#include <math.h>
using namespace std;
double solution::bisect (double xLeft, double xRight, double epsilon, double (solution::*f)(double), bool& error) {
double xMid;
double fLeft, fRight;
double fMid;
fLeft = (this->*f)(xLeft);
fRight = (this->*f)(xRight);
error = (fLeft * fRight) < 0;
if (error)
return -999.0;
for (double i = 0; i < 20; i++) {
xMid = (xLeft + (xLeft + 1.0)) / 2.0;
fMid = (this->*f)(xMid);
if (fLeft * fMid > 0.0) {
xLeft = xMid + 0.5;
xRight = xLeft + 1.0;
fLeft = fMid;
}
else if (fLeft * fMid < 0.0){
xRight = xMid;
fRight = fMid;
}
else {
return xMid;
}
cout << "New Interval is [" << xLeft << ", " << xRight << "]" << endl;
}
return (xLeft + xRight) / 2.0;
}
double solution::f (double x) {
return ((1 * pow(x,2.0)) + (5 * x) + 2);
}
/////////////////////////////////////////////// /////////////////////////////////////////////// ///////////////////////////////////////////
#ifndef ASSIGN4_H
#define ASSIGN4_H
class solution {
public:
double xLeft, xRight;
double epsilon;
bool error;
double bisect(double, double, double, double (solution::*f)(double), bool&);
double f(double);
};
#endif // ASSIGN4_H
/////////////////////////////////////////////// /////////////////////////////////////////////// ///////////////////////////////////////////
この課題での私の目標は、ルートが存在する場合にそれを見つけることです。私の問題は、私が見つけたすべての二等分例は、一度に単一のルートを見つける方法についてしか話していないということです. 使用する間隔は [-10.0, 10.0] で、最終的には構造体にカプセル化された配列を介して渡された方程式の係数を受け取りますが、今のところ係数をハードコーディングしています。
したがって、私の問題は、現在、ハードコーディングした方程式の最初のルート (x^2 + 5x + 2) の 0.2 を取得できることですが、そのルートを過ぎて別のルートを検索し続ける方法がわかりません。私の間隔の終わり。また、ルートを正確に打ち、わずかに外れないようにする方法もわかりません。
テキストの壁についてお詫び申し上げます。助けていただければ幸いです。:)