
二分法とニュートン法について、どのようにプログラムを書けばいいのでしょうか?
具体的には、fortranでは、以下のように書かれているのですが、、、
y=-x^2+5x+2
(以下のページ
http://www8.plala.or.jp/uemura/sim2.html
を参照しています。)
(二分法)
DOUBLE PRECISION X,AX,X1,X2,Y1,Y2,YA,Y
X=1
H=0.1
X1=0 !低い方のxの初期値
X2=5 !高い方のxの初期値
100 AX = (X1 + X2) / 2 !2つの初期値の平均
Y1 = Y(X1)
Y2 = Y(X2)
YA = Y(AX)
IF (YA.EQ.Y1.AND.YA.EQ.Y2) GOTO 200
IF (Y1.GE.Y2) THEN
X2 = AX
GOTO 100
END IF
IF (Y2.GE.Y1) THEN
X1 = AX
GOTO 100
END IF
200 WRITE(*,*) 'X*= ', X1
WRITE(*,*) 'Y*= ', Y1
END
DOUBLE PRECISION FUNCTION Y(X)
DOUBLE PRECISION X
Y=-X**2+5*X+2
END
これを実行すると以下のようになる。
X*= 2.499999981373549
Y*= 8.250000000000000
(ニュートン法)
DOUBLE PRECISION X,H,DY1,DY2,DY3,Y1,Y,DY
X=1 !xの初期値
H=0.1 !ステップ幅の初期値
100 DY1 = DY(X)
DY2 = DY(X + H)
DY3 = DY(X - H)
IF (ABS(DY1).LT..000001) GOTO 200 !収束判定
IF (ABS(DY2).LT.ABS(DY1).AND.ABS(DY2).LT.ABS(DY3)) THEN
X = X + H
GOTO 100
END IF
IF (ABS(DY3).LT.ABS(DY1).AND.ABS(DY3).LT.ABS(DY2)) THEN
X = X - H
GOTO 100
END IF
IF (ABS(DY1).LE.ABS(DY2).AND.ABS(DY1).LE.ABS(DY3)) THEN
H = H / 10
GOTO 100
END IF
200 Y1 = Y(X)
WRITE(*,*) 'X*= ',X
WRITE(*,*) 'Y*= ',Y1
END
DOUBLE PRECISION FUNCTION Y(X)
DOUBLE PRECISION X
Y=-X**2+5*X+2
END
DOUBLE PRECISION FUNCTION DY(X) !微分式の定義
DOUBLE PRECISION X
DY=-2*X+5
END
これを実行すれば以下のようになる。
X*= 2.500000022351742
Y*= 8.250000000000000
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
なんだかなあ…
これってMatlabの問題なんですかね?
二分法だけ取り上げます。
あなたの参照したページの中では、
「解x*よりも小さい値と大きい値の2つの初期値を与え、その平均値を計算し、この3つのxから得られるyの中で最も小さいxを捨て、新たに平均値を計算するという技法である」
って書いてますね?
また、かのwikipediaでは
http://ja.wikipedia.org/wiki/%E4%BA%8C%E5%88%86% …
ここでは、f(x) = 0となるxを求める方法について説明する。
1.f(x1)とf(x2)とで符号が異なるような区間下限x1と区間上限x2を定める。
2.x1とx2の中間点xMを求める。
3.f(xM)の符号がf(x1)と同じであればx1をxMで置き換え、f(x2)と同じであればx2をxMで置き換える。
4.2.に戻って操作を繰り返すことにより、f(x) = 0となるxに近づく。
という説明が書かれています。
(Matlab独特の書き方に頼るということをするのでなければ)この文章を愚直にプログラムにおこすだけの話だと思うんですが。プログラムとして難しそうなのは上記手順の3.でしょうか。これもif文の基本的な構文を知っていればできますね。
ちなみに、Matlabには入力値の符号を返す関数signがあるので、これを有効活用してやればよいでしょう。
ニュートン法も同じです。「文章で書かれたことをマジメにプログラムにおこす」この一手です。
「とりあえずこう書いてみたんだけど動かない」とか「こう書いたんだけど時間がかかってしょうがない、もっと高速に出来ないものか」とかであればその点補足いただければより有益な回答が付くのではないかと思われます。
途中厳しいことも書きましたが、参考になれば幸いです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 数学 【全微分について】 z=f(x,y) の全微分は df=(∂f/∂x)dx+(∂f/∂y)dy と表 1 2023/02/25 05:49
- 数学 微分(全微分)についての質問です。 2 2022/04/07 17:08
- 数学 (1+x^2)y'=1 の微分で教えて下さい 2 2022/08/30 10:23
- 数学 前にも質問したものでx^3+y^3=1を陰関数を使って、点(1、0)、接線の方程式を求めなさいという 1 2023/07/08 12:17
- 数学 テイラー展開について r↑(x+dx,y+dy,f(x+dx,y+dy))を点(x,y,f(x,y) 4 2023/03/08 01:06
- 数学 「急募!」数学 微分方程式 dy/dx=y+x*y^3 ・・・(1) 但しy(0)=±1をExcel 2 2022/07/20 21:58
- 数学 全微分について質問です。 z=f(x,y)のとき df=(∂f/∂x)dx+(∂f/∂y)dy ∂f 5 2023/02/24 05:46
- 数学 微分方程式の問題 1 2023/07/27 12:11
- C言語・C++・C# ある線が円の範囲に入っているかの計算 1 2022/12/07 16:14
- 物理学 全微分のdx,dyの意味 3 2023/05/26 08:13
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・「これはヤバかったな」という遅刻エピソード
- ・初めて自分の家と他人の家が違う、と意識した時
- ・いちばん失敗した人決定戦
- ・思い出すきっかけは 音楽?におい?景色?
- ・あなたなりのストレス発散方法を教えてください!
- ・もし10億円当たったら何に使いますか?
- ・何回やってもうまくいかないことは?
- ・今年はじめたいことは?
- ・あなたの人生で一番ピンチに陥った瞬間は?
- ・初めて見た映画を教えてください!
- ・今の日本に期待することはなんですか?
- ・集中するためにやっていること
- ・テレビやラジオに出たことがある人、いますか?
- ・【お題】斜め上を行くスキー場にありがちなこと
- ・人生でいちばんスベッた瞬間
- ・コーピングについて教えてください
- ・あなたの「プチ贅沢」はなんですか?
- ・コンビニでおにぎりを買うときのスタメンはどの具?
- ・おすすめの美術館・博物館、教えてください!
- ・【お題】大変な警告
- ・洋服何着持ってますか?
- ・みんなの【マイ・ベスト積読2024】を教えてください。
- ・「これいらなくない?」という慣習、教えてください
- ・今から楽しみな予定はありますか?
- ・AIツールの活用方法を教えて
- ・最強の防寒、あったか術を教えてください!
- ・歳とったな〜〜と思ったことは?
- ・モテ期を経験した方いらっしゃいますか?
- ・好きな人を振り向かせるためにしたこと
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Sublime Text 3でのFortranプロ...
-
360度を超える角度
-
ProC 固定SQLでNULLってどう表...
-
COBOLのピリオド
-
プログラミングソフトパスカル...
-
N88basicを用いたGPIB制御
-
あるプログラムのコマンドライ...
-
VBAで仕様書は書きますか?
-
正しい五十音順について
-
VBAにてメール作成した際、一部...
-
65536は2の何乗なのでしょうか?
-
EXCELなどで「返す」という表現
-
Excelで4096点以上のFFTの方法
-
Vba UserFormを前面に出す方法...
-
バッチファイルでUSB挿入時に実行
-
ABAQUS ユーザーサブルーチン...
-
VBAで関数をつくる
-
PICマイコンのコピー(クローン...
-
C++ で、「)」が必要 というエ...
-
内税の計算式
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数の値が勝手に変化する原因
-
【JAVA】数字をひし形に出力す...
-
360度を超える角度
-
プログラミングの問題です。
-
COBOLのピリオド
-
Matlabについて質問2
-
ProC 固定SQLでNULLってどう表...
-
fortran if文
-
3つの整数のうち奇数のみを表示...
-
4桁の数値を逆に表示されるプ...
-
Sublime Text 3でのFortranプロ...
-
JCLの基本について教えてください
-
c言語のプログラミング 2つの整...
-
Fortran90についての質問です。
-
Tiny Basicのプログラムです。。
-
素数を探すプログラム…。
-
Cプログラミング
-
3次関数を作るプログラム
-
Visual Basic 三辺の長さ? ...
-
CommonLispでハノイの塔の円盤...
おすすめ情報