MATLAB Answers

Generate array of y values, from the numerical solution of f(y)=x, where x is an array of numbers

1 ビュー (過去 30 日間)
Erez
Erez 2019 年 11 月 26 日
Commented: Star Strider 2019 年 11 月 26 日
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 件のコメント

サインイン to comment.

採用された回答

Star Strider
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 件のコメント

Erez
Erez 2019 年 11 月 26 日
There is a unique solution, since f(y) is monotoic. Thanks, your code works.
Is there a way to do this without the loop?
Stephen Cobeldick
Stephen Cobeldick 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
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.

サインイン to comment.

More Answers (0)

サインイン してこの質問に回答します。


Translated by