Back-Calculating to Match Previously Established Variable

Hi All,
In my code, I previously defined a variable:
xFe54=0:.00002:2.5.
I then manipulated this variable extensively, performing the following calculations:
v=zeros(length(xFe54),length(n));
q=zeros(length(xFe54),length(n));
for i=1:numel(xFe54)
for j=1:numel(n)
v(i,j)=(1/n(j)^2)*exp(-n(j)^2*pi^2*xFe54(i));
q(i,j)=(1/n(j)^2)*exp(-n(j)^2*pi^2*fFe56*xFe54(i));
end
end
SumFe56=sum(q,2);
SumFe54=sum(v,2);
BulkFe56=(Fes*alpha)+((6*alpha*(Fe0-Fes))/pi^2)*SumFe56;
BulkFe54=(Fes*omega)+((6*omega*(Fe0-Fes))/pi^2)*SumFe54;
DeltaFe56=(((BulkFe56./BulkFe54)/(alpha/omega))-1)*1000;
Fo = 100-((BulkFe56+BulkFe54)/(alpha+omega));
I then eventually plotted Fo vs. DeltaFe56 (the plot is attached). I then took a set of data points and defined which ones were reasonably close to this curve, via the following code:
xq = dataset(1:116,1);
Feyq = dataset(1:116,2);
Fevq = interp1(Fo,DeltaFe56,xq);
Fezq = Feyq-Fevq;
Feyqlimit = Feyq(Fezq <= abs(.025));
I ultimately generated the following vector:
Feyqlimit =
-.0919
-.0782
-1.7060
-.3630
I would now like to find out what the xFe54 values are that correspond to these data points. As in, these Feyqlimit values are each specific values of DeltaFe56, but what are the respective values of xFe54 that could generate these DeltaFe56 values? Could anyone provide any insight as to how to do this? Please let me know if I could provide more information to make this problem easier.

Answers (1)

Hi Jonathan,
you don't show the curve y(x), but given the number of points in x it appears that the curve y(x) is dense in points. If y is monotonic, then it's straightforward.
xvals = interp1(y,x,Feyqlimit,'spline')
% or just
xvals = spline(y,x,Feyqlimit)
If y is not monotonic, then with this method you would split it up into monotonic subsections, each with its own accompanying range of x. Then in each subsection,
xvals = interp1(y,x,[F1, F2 ...],'spline')
% or just
xvals = spline(y,x,[F1, F2 ...])
where [F1, F2 ...] are the values of Feyqlimit that are possible in that subsection. (This could possibly give more than one value of x for some values of F, but from looking at the graph I assume that you know which x value would apply).
Generally the interpolated x value will not be a point in the x array, but if you do want such a point you can use interp1 with the 'nearest' option.

3 Comments

Hi David,
Thank you for your response; I just edited my question to provide some more information, and hopefully provide some clarity as to what I'm trying to do.
I apologize for being lost here, as I'm pretty new at this.
Because my curve isn't monotonic, I see that I will have to divide the curve into monotonic subsections. I'd imagine the easiest way of doing this is to find the coordinates of Fo and DeltaFe56 at the minimum point, and then break it into sections that contain greater and lower Fo values.
Could you help me find a way to do that?
Hi Johnathan,
certainly by eye the data would fit better if the orange curve had parameters such that it ended up shifted to the left. I don't know how much control you have over that curve, or if it is totally set. That aside, the interp technique does not work very well if the fitting curve gets too horizontal. One approach is to cut the curve in two parts by deleting its values less than, say, DeltaFe56 < -1.5. For arrays Fo and DeltaFe56 (D56 for short), the following example divides each of the arrays into part a (red) and part b (yellow), which can be used separately.
% example curve
Fo = 80:.1:88;
D56 = .1*(Fo-84).^2 - 1.6;
N = length(Fo);
ind = find(D56<-1.5);
ind1 = min(ind); % max and min indices of the deleted part
ind2 = max(ind);
Foa = Fo(1:ind1-1);
D56a = D56(1:ind1-1);
Fob = Fo(ind2+1:N);
D56b = D56(ind2+1:N);
plot(Fo,D56,Foa,D56a,Fob,D56b)
grid on
Hi David,
Thank you for your answer.
Upon thinking about this problem a little more, I'm thinking that I might be asking the wrong questions, so I'm trying to go in a different direction that what this post was centered on.
Thanks again for your help though.
Jonathan

Sign in to comment.

Categories

Products

Release

R2019b

Asked:

on 4 Mar 2020

Commented:

on 12 Mar 2020

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!