-
Notifications
You must be signed in to change notification settings - Fork 0
/
newtonRaphsonMethod.m
88 lines (88 loc) · 2.51 KB
/
newtonRaphsonMethod.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
function [solution, counts, start] = newtonRaphsonMethod(hndl, hndlTable, fnct, a, b, tol, maxCount)
global webTraceFlag;
try
cla
% Get the function as a string
strfx = fnct;
hold on
% Plot the function
ezplot(hndl, strfx, [a b]);
xlim = get(gca,'xlim'); %Get x range
hold on
% Plot the x'x axis
plot([xlim(1) xlim(2)],[0 0],'k');
t = -2:0.1:2;
plot(hndl, t, 0, 'b-')
drawnow
pause(1)
% Pickup a random starting value between the (a, b)
%x = a + (b - a)*rand(1,1);
x = b;
start = x;
%temp = x;
fx = eval(strfx);
dfx = eval(diff(sym(strfx)));
plot(hndl, x, fx, 'g+');
drawnow
%plot(hndl, x, 'g*');
%drawnow
%x = b;
%fb = eval(strfx);
%x = temp;
%ezplot(diff(sym(strfx)));
%drawnow
pause(1)
count = 0;
while (abs(fx) > tol) && (dfx ~= 0)
oldx = x;
oldfx = fx;
%newfb = eval(strfx);
x = x - fx/dfx;
fx = eval(strfx);
dfx = eval(diff(sym(strfx)));
plot(hndl, x, fx, 'r+');
drawnow
%plot(hndl, x, 'b*');
%drawnow
line([x oldx] , [0 oldfx]);
%ezplot(diff(sym(strfx)));
drawnow
pause(1)
%pause(1)
count = count + 1;
oldData = get(hndlTable,'Data');
newData = [oldData; {x, fx}];
set(hndlTable,'Data',newData);
if count > maxCount
break
end
end
plot(hndl, x, fx, 'bo');
drawnow
%plot(hndl, x, 'k*');
%drawnow
pause(1)
h = msgbox(strcat('The execution has finished. The solution is:', num2str(x)), 'End of execution');
%plot(a, fa, '-r', b, fb)
hold off
grid on
% Return values
solution = x;
counts = count;
%a
%b
%x
%fx
%count
%solve(strfx)
catch exc
msgbox('An error has occured while executing the Newton-Raphson methode. Please try again and send a feedback to support.', 'Error', 'error');
errLogger(exc.message);
errLogger(exc.getReport('basic', 'hyperlinks', 'off'));
if webTraceFlag == 1
webLog(exc.message, 'error');
webLog(exc.getReport('basic', 'hyperlinks', 'off'), 'error');
end
%errLogger(exc.stack);
end
end