My while loop won't execute at all
Show older comments
clear; clc; close all;
tol = input('Error tolerance: ');
x0 = input('Initial guess for x: ');
y0 = input('Initial guess for y: ');
z0 = input('Initial guess for z: ');
max_it = input('Max number of iterations: ');
syms x y z
J(1,:) = [diff(Function3(x,y,z),x) diff(Function3(x,y,z),y)...
diff(Function3(x,y,z),z)];
J(2,:) = [diff(Function4(x,y,z),x) diff(Function4(x,y,z),y)...
diff(Function4(x,y,z),z)];
J(3,:) = [diff(Function5(x,y,z),x) diff(Function5(x,y,z),y)...
diff(Function5(x,y,z),z)];
it = 0;
x = 0;
y = 0;
z = 0;
while Function3(x,y,z)>tol || Function4(x,y,z)>tol || Function5(x,y,z)>tol...
&& it < max_it
if it == 0
XYZ = [x0;y0;z0] - subs(inv(J),[x,y,z],[x0,y0,z0])...
*[Function3(x0,y0,z0);Function4(x0,y0,z0);Function5(x0,y0,z0)];
x = XYZ(1,1);
y = XYZ(2,1);
z = XYZ(3,1);
else
XYZ = [x;y;z] - subs(inv(J),[x,y,z],[x,y,z])...
*[Function3(x,y,z);Function4(x,y,z);Function5(x,y,z)];
x = XYZ(1,1);
y = XYZ(2,1);
z = XYZ(3,1);
end
it = it+1;
end
where the functions are each in their own separate .m file of course:
function f = Function3(x,y,z)
f = sin(2*x + y) + 2*z -1;
function f = Function4(x,y,z)
f = cos(x - y) + 3*z*x^2 - 1;
function f = Function5(x,y,z)
f = x^2 + y^2 - z*y - 2;
The point of the code is an iterative method to find the roots of the system of equations. J refers to the jacobian matrix. Basically I'm trying to find the symbolic matrix for J, and then use subs to evaluate it inside the while loop.
The issue is that it = 0 after running, and XYZ doesn't exist, so the loop isn't running at all. Is it a problem with the conditional statements? I want it to run while the iteration count is less than the max, and if any of the function values is greater than the input tolerance.
Help?!?!
Update: I changed the conditional statement and the loop is now iterating. However, it's not defining XYZ or changing the x y z values. It's looping without doing anything.
while it < max_it
while Function3(x,y,z)>tol || Function4(x,y,z)>tol || Function5(x,y,z)>tol
if it == 0
XYZ = [x0;y0;z0] - subs(inv(J),[x,y,z],[x0,y0,z0])...
*[Function3(x0,y0,z0);Function4(x0,y0,z0);Function5(x0,y0,z0)];
x = XYZ(1,1);
y = XYZ(2,1);
z = XYZ(3,1);
else
XYZ = [x;y;z] - subs(inv(J),[x,y,z],[x,y,z])...
*[Function3(x,y,z);Function4(x,y,z);Function5(x,y,z)];
x = XYZ(1,1);
y = XYZ(2,1);
z = XYZ(3,1);
end
end
it = it +1;
end
4 Comments
dpb
on 19 Feb 2017
Problems like this are generally one of a logic flaw and using the debugger to step through the code will generally allow you to spot the AHA! spot pretty quickly. Give that a go and then report back on results if nirvana doesn't occur...
John Birkett
on 21 Feb 2017
diya
on 21 Mar 2017
??? Undefined function or method 'table' for input arguments of type 'double'.
Error in ==> featureExtractionForFruitImages at 29 features=table(features); what is the meaning of this error
DataSet=dir('C:\Users\farah\Desktop\classification\farah'); DBSize=length(DataSet); features=zeros(1,59); %%%% initizalizing features extraction array lables={}; % intitilaizing lables cell for text type storege k=1; for i=1:DBSize class=strcat('C:Users\farah\Desktop\classification\farah\DataSets\FIDS30\7 classess\',DataSet(i).name,'\*.jpg'); folder=dir(class); folderSize=length(folder); for j=1:folderSize %%% try and catch is for to ignore the error of reading cmyk color %%% space try img=imread(strcat('C:\Users\farah\Desktop\classification\farah\DataSets\FIDS30\7 classess\',DataSet(i).name,'\',folder(j).name)); catch continue; end
[r,c,p]=size(img);
%%%%%%condition is for to ignore the to gray error
if p==3
img=rgb2gray(img);
end
features(k,:)=extractLBPFeatures(img);
lables{k}=DataSet(i).name;
k=k+1;
end
end
features=table(features);
labled=table('lables');
features=[features labled];
Answers (0)
Categories
Find more on Loops and Conditional Statements in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!