Question
Can you write below code by using ''for'' loop instead of ''while'' ? falsepos(@fpH,2,12,1e-8,11,315) function f = fpH(pH,pCO2) %We defined our function. K1=10^-6.3;K2=10^-10.3;Kw=10^-14; KH=10^-1.46; H=10^-pH;
Can you write below code by using ''for'' loop instead of ''while'' ?
falsepos(@fpH,2,12,1e-8,11,315)
function f = fpH(pH,pCO2) %We defined our function.
K1=10^-6.3;K2=10^-10.3;Kw=10^-14;
KH=10^-1.46;
H=10^-pH;
f=K1/(1e6*H)*KH*pCO2+2*K2*K1/(1e6*H)*KH*pCO2+Kw/H-H;
end
function [root,fx,ea,iter]=falsepos(func,xl,xu,es,maxit,varargin)
%{
func argument is the function we want to work on.
xl is the lower limit.
xu is the upper limit.
es is the desired relative error.
maxit is the maximum number of iterations that you want program to take.
varargin is a cell of arguments. You can put pretty much any number of
arguments and after the first five defined inputs, program will take all
the other variables and put them in a cell for the purpose of using them
later on. In this example we can use this cell to calculate function value
if it has three variables such as y axis and z axis.
%}
if nargin <5|isempty(maxit), maxit=50; end % If the number of arguments are lower than 5, it sets the maximum iteration to 50.
if nargin <4|isempty(es), es=0.0001; end % If the number of arguments are lower than 5, it sets the desired relative error to 50.
if nargin <3, error(sprintf('Please enter at least 3 arguments. Preferably, 1- A function 2- Lower x limit 3- Upper x limit')), end % If the user...
%uses less than 3 arguments, an error message will display indicating that inputs are insufficient and advise player to use certain variables.
iter=0; % Sets the iteration number to zero so that we can use it later to calculate the number of iterations
xr=xl; % Assigns the first root as the lower limit value.
ea=100; % Initial approxiamte relative error is 100.
if func(xl,varargin{:})*func(xu,varargin{:})>0, error('The limits you entered either don''t have the root or is root.'),end % Investiges if the limits are...
%roots or a function contain a root between the numbers.
while(1) % Opens a unlimited loop.
iter=iter+1; % Iteration number
xrold=xr; % Previous estimated root.
xr=xu-func(xu,varargin{:})*(xl-xu)/(func(xl,varargin{:})-func(xu,varargin{:})); % Current estimated root.
if xr~=0,ea=abs((xr-xrold)/xr)*100;end % If the current estimated root isn't zero it calculates the approximate relative error.
if func(xl,varargin{:})*func(xr,varargin{:})<0 % Made a if statement about if f(xu)*f(xl) is lower than zero or not.
xu=xr; % If the if statement is true, sets the upper limit as the current estimated root.
elseif func(xl,varargin{:})*func(xr,varargin{:})>0 % Made a if statement about if f(xu)*f(xl) is higher than zero or not.
xl=xr; % If the if statement is true, sets the lower limit as the current estimated root.
elseif func(xl,varargin{:})*func(xr,varargin{:})==0 % If the current estimated root is zero, the error is zero.
ea=0; % Sets error to zero.
end
if ea<=es|iter>=maxit,break,end % If desired conditions, approximate relative error is lower than desired relative error or we exceeded maximum iteration number, are satisfied it breaks the loop.
end
sprintf('The estimated root is: %f Approximation error is: %f Number of iterations: %i',xr,ea,iter)%Prints a string with defined parameters.
end
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access with AI-Powered Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started