このディレクトリの索引

% 以下のサイトは ニュートン法によって平方根を求める(_c,_平方根) :- 平方根に最も近い大きい方の整数を探す(0,0,_c,_xn), 交点のx座標を求める(0,_c,_xn,10,_平方根),!. 平方根に最も近い大きい方の整数を探す(_xn_2,_xn,_c,_xn) :- _xn_2 * _xn_2 >= _c. 平方根に最も近い大きい方の整数を探す(N_1,_,_c,_xn) :- succ(N_1,N_2), 平方根に最も近い大きい方の整数を探す(N_2,N_1,_c,_xn). 交点のx座標を求める(_i,_c,_平方根,_n,_平方根) :- _i >= _n. 交点のx座標を求める(_i_1,_c,_xn_1,_n,_平方根) :- succ(_i_1,_i_2), _xn_2 is (_xn_1 + _c / _xn_1) / 2, 交点のx座標を求める(_i_2,_c,_xn_2,_n,_平方根). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1354070278/916 # # [1] 授業単元: C言語入門 # [2] 問題文(含コード&リンク): # ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求めよ。 # 但し、x(0)=1とし、反復回数を4とする # # f(X,Y) :- Y is exp(1) ^ (-X) - X ^ 2. df(X,Y) :- Y is -1 * exp(1) ^ (-X) - 2 * X. 'ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求めよ。 但し、x(0)=1とし、反復回数を4とする'(_x) :- 'ニュートン法を用いて解を収束させる'([_,_,_,_],1,_x). 'ニュートン法を用いて解を収束させる'([],_x,_x). 'ニュートン法を用いて解を収束させる'([_|R],_x1,_x) :- f(_x1,_y1), df(_x1,_y2), _x2 is _x1 - _y1 / _y2, 'ニュートン法を用いて解を収束させる'(R,_x2,_x). % 以下のサイトは # 出典:: http://toro.2ch.net/test/read.cgi/tech/1339338438/625 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク):http://ime.nu/www.fluid.cse.nagoya-u.ac.jp/~ishihara/c/ #    7/6の課題 # 9.1 ニュートン法 # # f(x)=0の解を求めるアルゴリズム. # # x=x0を初期値(近似値)として,x=x0におけるy=f(x)の接線:y-f(x0)=f'(x0)(x-x0)と # x軸との交点 x=x1=x0-f(x0)/f'(x0)を新しい近似値とする。 # 反復回数上限(1000). 'f(x)=0の解を求める' :- 数を得る(初期値x0,_初期値), ニュートン法(_初期値,_反復回数,_収束解), writef('収束解 = %t\n',[_収束解]). 'f(x)=0の解を求める' :- write('収束しません\n'). ニュートン法(_初期値,_反復回数,_収束解) :- 反復回数上限(_反復回数上限), f(_初期値,Y1), df(_初期値,Y2), X_0 is _初期値 - Y1 / Y2, ニュートン法(1,_反復回数上限,X_0,_反復回数,_収束解). ニュートン法(_反復回数,_反復回数上限,_,_,_) :- _反復回数 > _反復回数上限,!,fail. ニュートン法(_反復回数,_,X,_反復回数,X) :- X_1 is abs(X), X_1 < 1.0e-09,!. ニュートン法(_反復回数_1,_反復回数上限,X_1,_反復回数,X) :- f(X_1,Y1), df(X_1,Y2), X_2 is X_1 - Y1 / Y2, _反復回数_2 is _反復回数_1 + 1, ニュートン法(_反復回数_2,_反復回数上限,X_2,_反復回数,X). % 数を得る % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1308749241/837 # # [1] 授業単元:プログラミング # [2] 問題文(含コード&リンク): # 実数x、y(y≠0)の入力に対し、商x / yを出力する。ただし、プログラム中で除算の式を用いないでNewton法の逐次近似で乗算と減算によりyの逆数zを求め、x×zを得ること。 # 注意 逆数zを求める初期値の選択が悪いと2次の収束(反復ごとに精度が桁数で倍になる)をせず、極端な場合には振動して収束しない。 # '実数x、y(y≠0)の入力に対し、商x / yを出力する'(_x,_y) :- 初期値の選択(_y,_初期値), 'yの逆数zの近似解をニュートン法で求める'(1,_y,_初期値,_z), _商 is _x * _z, writef('x / y の近似解は %t です\n',[_商]). 'yの逆数zの近似解をニュートン法で求める'(8,_,_z,_z) :- !. 'yの逆数zの近似解をニュートン法で求める'(N,_y,_y1,_z) :- _y2 is 2 * _y1 - _y * _y1 ^ 2, N2 is N + 1, 'yの逆数zの近似解をニュートン法で求める'(N2,_y,_y2,_z). 初期値の選択(_y,_初期値) :- _初期値 is _y * 0.13,!. % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1289913298/468 # # [1] 授業単元:C/C++の宿題片付けます 143代目 # [2] 問題文(含コード&リンク): ニュートン法により実数の平方根を求める関数を作成せよ。(引数double, 戻り値double) # 'ニュートン法を用いて実数の平方根を求める'(_実数,_平方根) :- 'ニュートン法を用いて実数の平方根を求める'(_実数,0.0,1.0,_平方根),!. 'ニュートン法を用いて実数の平方根を求める'(_実数,X0,X,X) :- 0.00001 > abs(X0 - X),!. 'ニュートン法を用いて実数の平方根を求める'(_実数,X0,X1,X) :- Y is X1 * X1 - _実数, Y2 is 2 * X1, X2 is X1 - Y / Y2, 'ニュートン法を用いて実数の平方根を求める'(_実数,X1,X2,X). % 以下のサイトは # 出典:: http://hibari.2ch.net/test/read.cgi/tech/1284632294/527 # # [1] 授業単元: プログラミング # [2] 問題文(含コード&リンク):ルートについて、ニュートンラプソン方で解き、 # 何回演算を繰り返せば値が収束するか確認する。複数の値を入れて、組み込み関数である # sqrt関数との比較をする。 # 'ルートについて、ニュートンラプソン方で解く'(_値,_収束するまでの繰り返し回数,_平方根) :- _s is (_値 + 1) / 2, 'ルートについて、ニュートンラプソン方で解く'(_値,_s,1,1,_収束するまでの繰り返し回数,_平方根). 'ルートについて、ニュートンラプソン方で解く'(X,_s,_s2,N,N,_s) :- _s = _s2,!. 'ルートについて、ニュートンラプソン方で解く'(X,_s,_s1,M,N,Root) :- _s2 is (X / _s + _s) / 2, M2 is M + 1, 'ルートについて、ニュートンラプソン方で解く'(X,_s2,_s,M2,N2,Root). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1276810079/212 # # [1] 授業単元: 数値解析 # [2] 問題文(含コード&リンク): http://ime.nu/kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10745.txt # ニュートン・ラフソン法についての問題です。教科書に例題として載っていたプログラミングに今回問題となっている方程式の当てはめ方がわかりません(おそらく初歩的な事だと思われます) # # 問題 # 適当な数字a,b,cを用いてax^3+bx^2-cx=0なる3次方程式をニュートン・ラフソン法を用いて解く為のプログラムを作成せよ。 # # 以下は教科書に載っていたx^3-1=0を解く為の参考とするプログラムです。これを今回の問題に当てはめて解くようです。 # # /* 《 ニュートン・ラフソン法の関数 》 */ # void S_NEWT(int *n,double *x0,double e,int NMAX,double (*FUNC)()) # /* n : スカラー 反復回数 (Out) # x0 : スカラー 初期値(解) (In/Out) # e : スカラー 収束判定定数 (In) # NMAX : スカラー 最大反復回数 (In) # FUNC : ユーザー定義関数 (In) */ '適当な数字a,b,cを用いてax^3+bx^2-cx=0なる3次方程式をニュートン・ラフソン法を用いて解く'(_最大反復回数,_収束判定定数,A,B,C,X0,X) :- Y0 is A * X0 ^ 3 + B * X0 ^ 2 + C * X0, '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(1,_最大反復回数,_収束判定定数,A,B,C,X0,Y0,X). '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N,_最大反復回数,_,_,_,X,_,X) :- N > _最大反復回数,!. '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(_,_,_収束判定定数,_,_,_,X,_,X) :- Y =< _収束判定定数,!. '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N,_最大反復回数,_収束判定定数,A,B,C,X0,Y0,X) :- 次のXはX軸との交点のX座標(A,B,C,X0,Y0,_X軸との交点のX座標,Y1), N2 is N + 1, '3次曲線上の(X0,Y0)が接点となる直線がX座標と交差する(X1,0)は'(N2,_最大反復回数,_収束判定定数,A,B,C,_X軸との交点のX座標,Y1,X). 次のXはX軸との交点のX座標(A,B,C,X0,Y0,_X軸との交点のX座標,Y1) :- _傾き is 3 * A * (X0 ^ 2) + 2 * B * X0 + C, _Y軸との交点のY座標 is Y0 - _傾き * X0, _X軸との交点のX座標 is (-1) * (_Y軸との交点のY座標) / _傾き, Y1 is A * _X軸との交点のX座標 ^ 3 + B * _X軸との交点のX座標 ^ 2 + C * _X軸との交点のX座標,!. % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1269438098/574 # # [1] 授業単元: C言語入門 # [2] 問題文(含コード&リンク): # ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求めよ。 # 但し、x(0)=1とし、反復回数を4とする # # 'ニュートン法を用いてf(x)=e^(-x)-x^2=0の根を求める'(X) :- '高次代数方程式の解法(ニュートン法)'(0,4,1.0,X). f(X,Y) :- Y is exp(-X)-X*X. df(X,Y) :- Y is -exp(-X)-2*X. '高次代数方程式の解法(ニュートン法)'(Max,Max,X,X) :- !. '高次代数方程式の解法(ニュートン法)'(N,Max,X1,X) :- f(X1,Y), df(X1,Y2), X2 is X1 - Y / Y2, N2 is N + 1, '高次代数方程式の解法(ニュートン法)'(N2,Max,X2,X). % 以下のサイトは # 出典:: http://pc12.2ch.net/test/read.cgi/tech/1247438792/448 # # [1] 授業単元:数値情報解析 # [2] 問題文:ニュートン法により代数方程式を解くプログラムを作りなさい。 #       適当な初期値を自分で設定し、3つの真解すべてを求めなさい。 #       ただし、結果画面には(1)収束解(2)初期値(3)反復回数が表示されて #       いること。 #       このとき、1回の実行で3つの真解すべてを求める必要はない。 #       初期値を与え直しながら実行した結果画面が3枚示されていれば #       よいものとする。 # ・ 解くべき代数方程式 : x^3 - 6x^2 + 7x +2 = 0 # ・収束条件 : ε < 10^-10 #       ・微分は自分で計算した結果(3x^2 - 12x + 7 = 0)をソースファイルに #        直接入力してよいものとする。 f(X,Y) :- Y is X^3 - 6 * X^2 + 7 * X + 2. df(X,Y) :- Y is 3 * X^2 - 12 * X + 7. t545 :- write('初期値を入れてください : '), get_line(Line), atom_to_term(Line,_初期値,_), ニュートン法(_初期値,_反復回数,_収束解), write_formatted('(1) 収束解 = %t\n',[_収束解]), write_formatted('(2) 初期値 = %t\n',[_初期値]), write_formatted('(3) 反復回数 = %t\n',[_反復回数]),!. t545 :- write('収束しませんでした\n'). ニュートン法(_初期値,_反復回数,_収束解) :- f(_初期値,Y1), df(_初期値,Y2), B is _初期値 - Y1 / Y2, ニュートン法(1,_反復回数,1000,B,_収束解). ニュートン法(M,_,N,_,_) :- M > N,!,fail. ニュートン法(M,M,N,X,X) :- Y is abs(X), Y < 1.0e-09,!. ニュートン法(M,MX,N,A,X) :- f(A,Y1), df(A,Y2), B is A - Y1 / Y2, M2 is M + 1, ニュートン法(M2,MX,N,B,X).