# Back-calculating a variable in equation to give a value of zero

8 views (last 30 days)
Reem Jaber on 9 Jul 2020
Commented: Reem Jaber on 9 Jul 2020
I have a non linear equation with many variables that run through a column array. I am trying to backcalulate the value of one of the variable that would produce a value of zero at each output of the column array. I am using root2d function, which is working fine, but I am only getting the last value. I am not sure how to save the output at each increment of j because the function runs througha for loop and doesn't stop till the last value. I would like the output of my variable rd to be spit out as a column or row array for each increment. Here is what I am doing:
%Calling the function
fun =@root2d;
rd0 = [0.05];
rd = fsolve(fun,rd0)
function F=root2d(rd)
depr1=S71.Depth;
qdynr=S71.qdyn;
Velr=S71.velr;
dec2r=S71.dec;
phicv=34;
Q=6;
R=1;
V50=1;
Nkt=12;
c0=300;
c1=0.46;
c2=2.96;
gammap=8; %in kN/m3
k0=0.5;
chmin=0.031;
%for loop inside the function
for j=9:numel (depr1)
pm(j)=gammap*((1+2*k0)/3)*depr1(j);
V(j)=(Velr(j)*0.04375)/chmin;
strainterm(j)=1/(1+(V(j)/V50));
pm (j)
strainterm(j)
V(j)
qdynr(j)
F= qdynr(j)-(((Nkt*0.5*((6*sin(phicv))/(3-sin(phicv)))*exp(Q-1/rd)))+strainterm (j)*((((c0*(pm(j)^c1)*exp(rd*c2))-(Nkt*0.5*((6*sin(phicv))/(3-sin(phicv))))*exp(Q-1/rd)))));
end
end

#### 1 Comment

Paresh yeole on 9 Jul 2020

Paresh yeole on 9 Jul 2020
Edited: Paresh yeole on 9 Jul 2020
k = 1; % outside the loop
% inside the loop
F(k) = ... %rest remains unchanged
k = k+1;

madhan ravi on 9 Jul 2020
XD, it’s always a good idea to preallocate.
Paresh yeole on 9 Jul 2020
The whole point of answering almost the same thing was to put the point that instead of using a cell array, try using an array..
And yes you are correct, preallocating is a good idea.
Reem Jaber on 9 Jul 2020
Well, thanks guys! I have tried doing that before but it didn't work. Once I index F with k, the solution doesn't work anymore. I have attached the data file for your reference.

madhan ravi on 9 Jul 2020
% outside the loop
F = cell(9:numel(depr1), 1);
k = 0;
% inside the loop
k = k + 1; % the first line
F{k} = ... rest remains unchanged