2012-06-21 114 views
0

我已經用牛頓的方法寫了下面的算法,以評估在MatLab的函數方法算法(我們設定R = -7在我的解決方案):MatLab的 - 牛頓

function newton(r); 
syms x; 
y = exp(x) - 1.5 - atan(x); 
yprime = diff(y,x); 
f = matlabFunction(y); 
fprime = matlabFunction(yprime); 
x = r; 
xvals = x 
for i=1:8 
    u = x; 
    x = u - f(r)/fprime(r); 
    xvals = x 
end 

該算法,它運行沒有任何錯誤,但數字在每次迭代中都在減少,儘管根據我的教科書,表達式應該約爲-14。我的算法在前兩次迭代中是正確的,但是它超過了-14,並且在所有迭代完成後最終以粗體-36.4結束。

如果有人可以給我一些幫助,爲什麼算法不能正常工作,我將不勝感激!

回答

3

我覺得

x = u - f(r)/fprime(r); 

應該

x = u - f(u)/fprime(u); 

如果你總是使用r,你總是用相同的值遞減x

+0

太棒了!現在它就像一個魅力,當然,我現在看到你的答案是應該如何寫公式:)。非常感謝! – Kristian

1
syms x 
y = exp(x) - 1.5 - atan(x); % your function is converted in for loop 
x=-1; 
n=10; 
v=0; 
for i=2:n 
    x(i)=tan(exp(x(i-1))-1.5); 
    v=[v ;x(i)]; % you will get solution vector for each i value 
end 
v