2016-10-29 6 views
0

に動作していませんこの関数この場合は、私は、次の3つの機能に分かれコードを持っているオクターブ/ Matlabの

function y=df(i) 
    syms x,diff(f(x),x); 
    subs(ans,x,i); 
    y = ans; 
endfunction 

newton.mmaxIt試行= MAX)

function [x1,nIt] = newton (f,df,x0,tol,maxIt) 
    k=0; 
    x=x0; 
    nIt = 0; 
    while (k<maxIt) 
    if(df(x)== 0) 
     fprintf("La derivada, da resultado 0"); 
     k=maxIt; 
    else 
     i = x - (f(x)/df(x)) 
     x = i; 
     nIt = nIt + 1 
     k=k+1; 
    endif 
    end 
endfunction 

[OK]を、私は、コマンドを実行しnewton(@f,@df,0,10,2)。プログラムの3分の2は正常に動作しますが、df(0)を実行すると、結果は0ですが、ifは機能しません。私はdf(0)が0を返すことを確認しました。それは問題ありません。

MATLAB/Octaveの新機能です。

+0

あなたの問題は何ですか? 「どうしたらいい?」という意味は何ですか?あなたのコードを使用すると、df(0)== 0であるため、メッセージが期待どおりに表示されます。これはあなたの極値を見つけたことを意味します。そしてbtw:あなたのスクリプトで "ans"を使用しないでください.... – Andy

答えて

1

コードにいくつか間違いがあります。それらのすべてが直接関連性があるわけではありませんが、それらのすべてを修正すると、コードをより読みやすく堅牢にすることができます。

機能がある場合はfです。

dfは、何となくfが知られていると仮定していますが、それは良い方法ではありません。 fもこの機能に渡すことをお勧めします。また、変数としてansを使用しないで、中間結果をさまざまな変数に格納します。

function y = df(f,a) 
syms x 
d = diff(f(x),x); 
y = subs(d,x,a); 
end 

は今、あなたはdf(f,x)にごnewton機能にdfに対するすべての呼び出しを変更する必要があります。これはDFがどのように見えるべきかです。あなたの最終目標は何か分かりませんが、今は変数x1tolは使用されていません。

希望しますか?

関連する問題