MATLAB Answers

Newton-Raphson iteration method in Matrices

23 views (last 30 days)
Ido Jubane
Ido Jubane on 19 Feb 2020
Commented: Hiro Yoshino on 19 Feb 2020
PLease help. The the following MATLAB code is meant to implement the Newton Raphson iteration method to but it is not running.
% Change here for different loads
sigma=input('Enter solidity ratio= ');
0.1
lamda=input('Enter tip-speed ratio= ');
3
kappa=input('Enter angle of curvature: ');
0
delta=input('Enter pitch angle: ');
-2
theta=thetak';
phai=atan(sin(theta)./(lamda.+cos(theta)));
alpha=phai.-delta;
ct=(1.1*2*pi).*alpha;
geo=0.25*inv(pi)*sigma*sec(kappa).*ct;
Tol=input('Allowed tolerance value ');
0.05
dev=[Tol.*ones(N,2)];
nitermax=input('Number of maximum iterations = ');
100
wn=input('Enter initial value of the horizontal perturbation component: ');
-0.5
w_x=wn.*ones(N,1);
w_y=((sin(theta).*(1.+w_x).-cos(theta).*tan(phai).* (1.+w_x).-lamda.*tan(phai))./(sin(theta).*tan(phai).+cos(theta)));
v=[w_x,w_y];
w_x=v(:,1);
w_y=v(:,2);
F=(cos(theta).+w_x.*cos(theta).+w_y.*sin(theta).+lamda).^2;
f=geo.*(X*F).-sqrt(w_x.^2.+w_y.^2);
dFx=cos(theta).^2.*(2.*w_x.+2).+ 2.*lamda.* cos(theta).+w_y.*sin(2.*theta);
dFy=2.*w_y.*sin(theta).^2.+sin(2.*theta).+w_x.*sin(2.*theta).+2.*lamda.*sin(theta);
dF=[dFx,dFy];
J=geo.*(X*dF).-ones(N,2);
if J==0
disp('Error: (Division by zero, try another initial point) ')
return; %prompts back to the keyboard
elseif J~=0
wi=v.-(J./f);
errxi=abs(wi(:,1).-v(:,1))./abs(v(:,1));
erryi=abs(wi(:,2).-v(:,2))./abs(v(:,2));
err=[errxi,erryi];
endif;
i=0;
while (err>=dev & 0<=abs(wi)<1 & i<=nitermax)
i=i+1
v=wi;
wi=v.-(J./f);
w_x=wi(:,1);
w_y=wi(:,2);
F=(cos(theta).+w_x.*cos(theta).+w_y.*sin(theta).+lamda).^2;
f=geo.*(X*F).-sqrt(w_x.^2.+w_y.^2);
dFx=cos(theta).^2.*(2.*w_x.+2).+ 2*lamda.* cos(theta).+w_y.*sin(2.*theta);
dFy=2.*w_y.*sin(theta).^2.+sin(2.*theta).+w_x.*sin(2.*theta).+2*lamda.*sin(theta);
dF=[dFx,dFy];
J=geo.*(X*dF).-ones(N,2);
wi=v.-(J./f);
errxi=abs(wi(:,1).-v(:,1))./abs(v(:,1));
erryi=abs(wi(:,2).-v(:,2))./abs(v(:,2));
err=[errxi,erryi];
if err<=dev
fprintf('Iteration complete at i= #%d\n', i)
else
i=i+1;
endif;
endwhile;
end;
% 1. %both -1<[w_x,w_y]<1, that is the modulus is less than one as a condition.
% 2. The code is not iterating

  0 Comments

Sign in to comment.

Accepted Answer

Hiro Yoshino
Hiro Yoshino on 19 Feb 2020
I had a quick look though ... you are having lots of errors.
MATLAB has a fantastic bug finder as you can see.
The areas highlighted with colors (not sure how they look in your environment) represent your potential errors.
You can also count on the bar on the right hand side - it tells you where there are your errors.
This is worth taking a look at. Good luck!

  2 Comments

Ido Jubane
Ido Jubane on 19 Feb 2020
What I overlooked is that I'm using octave, which I believe is the free version of MATLAB. The bug finder is silent. In fact, no errors are detected except that the iteration only runs ones, ignoring the loops
Hiro Yoshino
Hiro Yoshino on 19 Feb 2020
Octave is not fully compatible with MATLAB. It would not be a big issue unless you try something complex.

Sign in to comment.

More Answers (0)

Sign in to answer this question.