掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
三次方程式の解を求めるには?? (ID:5325)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
「C言語による最新アルゴリズム辞典」(技術評論社 ISBN4-87408-414-1)のニュートン法をそのままDelphiにしてみました。 元が(C++でなく)Cですので、参考程度に。 var b,c,d: double; function f(x: double): double; begin //x^3+bx^2+cx+d Result := ((b + x) * x + c) * x + d; end; function f_prime(x: double): double; begin //3x^2+2bx+c (f()の導関数) Result := (2 * b + 3 * x) * x + c; end; function newton(x: double): double; var fx, fp, xprev: double; begin while true do begin fx := f(x); fp := f_prime(x); if fp = 0 then fp := 1; xprev := x; x := x - (fx / fp); if x = xprev then Break; end; Result := x; end; procedure TForm1.Button1Click(Sender: TObject); var a, x1, x2, x3: double; begin a := StrToFloatDef(Edit1.Text, 1); b := StrToFloatDef(Edit2.Text, 1); c := StrToFloatDef(Edit3.Text, 1); d := StrToFloatDef(Edit4.Text, 1); b := b / a; c := c / a; d := d / a; a := b * b - 3 * c; if a > 0 then begin a := (2.0 / 3.0) * sqrt(a); x1 := newton(-a - b / 3); x2 := newton( a - b / 3); Edit5.Text := FloatToStr(x1); Edit6.Text := FloatToStr(x2); Edit7.Text := ''; if x1 <> x2 then begin x3 := newton( b / (-3)); Edit7.Text := FloatToStr(x3); end; end else begin Edit5.Text := ''; Edit6.Text := ''; Edit7.Text := ''; x1 := newton(0); Edit5.Text := FloatToStr(x1); end; end;
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.