
Generate array of y values, from the numerical solution of f(y)=x, where x is an array of numbers
6 ビュー (過去 30 日間)
古いコメントを表示
How can I generate array of y values, from the numerical solution of
, where x is an array of numbers, if I assume that: a. for each x there is only a single y and vice-verse, and b. I cannot invert
and isolate
explicitly?



For example, let 

This is a monotonically decending function of x, for any
.

If I have the vector
, how can I obtain the vector of the y values corresponding to these xs ?

- I want the array y to contains real numbers, that I can later use for calculations.
- Speed matters, I prefer to find the fastest solution.
Thanks!
0 件のコメント
採用された回答
Star Strider
2019 年 11 月 26 日
There are likely at least two solutions because of the
term. I did not exhaustively analyse the function.

Try this:
f = @(y) exp(-y).*(-1+exp(y)-y)./y.^2;
x=[1 2 3 4 5];
for k = 1:numel(x)
ys(k) = fsolve(@(y) f(y)-x(k), 1);
end
Experiment to get different results. The fzero function is also an option, however fsolve is more robust.
3 件のコメント
Stephen23
2019 年 11 月 26 日
"Is there a way to do this without the loop? "
>> x = [1,2,3,4,5];
>> f = @(y) exp(-y).*(-1+exp(y)-y)./y.^2;
>> y = arrayfun(@(v)fzero(@(z)f(z)-v,1),x)
y =
-1 -1.9375 -2.4647 -2.831 -3.1113
But an explicit loop would most likely be faster.
Star Strider
2019 年 11 月 26 日
As always, my pleasure!
The loop is required, since fsolve (and all the others that I am aware of) can only solve for one value at a time.
For example:
ys = fsolve(@(y) f(y)-x, 1)
only solves for ‘x=3’, and none of the others.
その他の回答 (0 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!