 term.  I did not exhaustively analyse the function.
 term.  I did not exhaustively analyse the function.  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
, 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
 and isolate  explicitly?
 explicitly? 
 , 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
, 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
 and isolate  explicitly?
 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 ?
, how can I obtain the vector of the y values corresponding to these xs ? 
 , how can I obtain the vector of the y values corresponding to these xs ?
, 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.
 term.  I did not exhaustively analyse the function.  
 term.  I did not exhaustively analyse the function.
 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!


