% プログラムNEWTON は関数y(x) がゼロとなる解 xを求めるスクリプトプログラムです．
% 対話型プログラムとなっており，y(x) を描画した図上でxの初期値を選定し，
% 計算が実行されます
% 以下の関数を用います（関数のｍファイルが同フォルダー内になければなりません）
% itermenu()      [ファイル名：　itermenu.m]　　メニュー表示・選択
% newtonfunc()  　[ファイル名：　newtonfunc.m]　ニュートン・ラプソン法計算
% plotfunc()      [ファイル名：　plotfunc.m]　　図の表示
% 
% Copyright (C) 2007 清水 信行, 曽我部 潔, 小金澤 鋼一 All Rights Reserved.

% =================================================================================
% プログラムの使用条件
% 1. 本プログラムおよびデータを商用で，頒布してはならない．
% 2. 本プログラムおよびデータを著作者の許可なく営利目的で利用してはならない．
% 3. 本プログラムおよびデータの改変は，営利目的でない限り自由である．
% 4. 本プログラムおよびデータを使用することにより生じた損害などについては，著者，
%    プロクラム著作者，(社)日本機械学会，および(株)コロナ社は一切の責任を負わない．
% 5. 本プログラムの著作権は，本書編著者ならびにプログラム著作者に帰す．
% =================================================================================



disp('式 y(x)およびそれをx について微分した式を入力してください,')
disp('［例］')
disp('y  =''x^2-sin(10*x)-1''')
disp('dydx=''2*x-10*cos(10*x)''')
disp('入力後に''return''と記入しエンターキーを押してください')
keyboard

plotfunc(y)  % y(x)のグラフを描画
disp('  Enter キーを押してください')
pause

answer=itermenu();
while answer ~=3
    if answer == 1
        plotfunc(y)  % y(x)のグラフを描画
        disp('  Enter キーを押してください')
        pause
        answer=itermenu();
    elseif answer ==2
        disp('図のどこかの位置をクリックすることでｘの初期推定値を設定します')
        [x, yg]=ginput(1)
        disp('      回数　  　x')
        newtonfunc(y, dydx, x, 0.00000001)  % ニュートン・ラプソン法計算
        answer =itermenu();
    else
        if answer ~=3
            disp('選択が間違っています．')
            answer=itermenu();
        end
    end
end
