以下のコードを検討してください。
public class Analyzer {
protected Func f,fd;
public delegate double Func( double x );
public Analyzer( Func f, Func fd ) {
this.f = f;
this.fd = fd;
}
public Analyzer( Func f ) {
this.f = f;
fd = dx;
}
public Analyzer( ) { }
protected double dx( double x ) {
double h = x / 50.0;
return ((f(x + h) - f(x - h)) / (2 * h));
}
public double evaluate(double x) {
return f( x );
}
public double evaluateDerived( double x ) {
return fd( x );
}
public double solve(double x0) {
double eps = 1, x1 = f(x0), x2 = fd(x0);
do x0 = x0 - ( f( x0 ) / fd( x0 ) );
while ( f( x0 ) > eps );
return x0;
}
}
public class PolyAnalyzer : Analyzer {
private double[] coefs;
public PolyAnalyzer( params double[] coef ) {
coefs = coef;
f = poly;
fd = dx;
}
private double poly( double x ) {
double sum = 0;
for ( int i = 0 ; i < coefs.Length ; i++ ) {
sum += coefs[i] * Math.Pow(x,coefs.Length-1-i);
}
return sum;
}
}
コンストラクターAnalyser(Func f)にpolyを送信する方法を考えようとしていましたが、ここでそれを行う方法はありますか?次のようなものを試しました:
public PolyAnalyzer( params double[] coef ) : base(new Func(poly)){
coefs = coef;
}
ただし、コンパイルされません...コンパイルエラー::非静的フィールド、メソッド、またはプロパティ'member'にはオブジェクト参照が必要です
Idは、それがどのように行われたかだけでなく、よく説明された答えを評価します... :)