Один из подходов состоит в том, чтобы использовать функцию интерполяции (1D) MATLAB interp1
, но это работает в вашей функции для значений параметров, которые гарантируют, что y(x)
является неубывающей функцией .
step = .01; % Control precision (smaller = more precise)
Xmax = 50; % Largest x of interest
X = [0:step:Xmax]';
Y = y(X); % Generate discrete approximation of function
yinvh=@(L) interp1(Y,X,L);
Targets = [0.25 0.4 0.75]';
yinvh(Targets)
Это соответствует результатам подхода Криса Луенго .
>> yinvh(Targets)'
ans =
2.3333 4.6667 21.0000
![Illustration of inverse function](https://i.stack.imgur.com/qm6cF.png)
figure, hold on, box on
plot(X,y(X))
plot(zeros(3,1),Targets,'rx')
plot(yinvh(Targets),zeros(3,1),'rx')
for k = 1:length(Targets)
plot([0; yinvh(Targets(k))],Targets(k)*ones(2,1),'k--')
plot(yinvh(Targets(k))*ones(2,1),[0 Targets(k)],'k--')
end