Plot two outputs (or two columns of one output) of a function against each other using only one line of script in an anonymous function

3 次查看(过去 30 天)
I have the following anonymous functions (this is a much-simplified version for the sake of asking this question) that both produce a new x and y array, which I'd like to plot in a single command (so it can be called within another anonymous function). Function @xy1 outputs two arrays (x and dy), while function @xy2 outputs a single array with x and dy as columns. It doesn't matter which approach is used, they're just the two methods I can come up with and I'm hoping one of them is do-able.
x=[1:10]';
y=rand(10,1);
xy1=@(x,y) deal(diff(y)./diff(x), x(1:end-1)+diff(x)./2);
xy2=@(x,y)[diff(y)./diff(x) x(1:end-1)+diff(x)./2];
[xnew,dy]=xy1(x,y);
xy=xy2(x,y);
I'd like to get the new x and dy arrays to plot as they would if you used plot(xnew,dy), but I need them to plot directly from the function call, something like:
newfunction1=@(x,y) plot(xy1(x,y));
or
newfunction2=@(x,y) plot(xy2(x,y)(:,1),xy2(x,y),(:,2));
Obviously these don't work, but I'm looking for a way to do something similar. Any suggestions would be appreciated. Thanks!

采纳的回答

Walter Roberson
Walter Roberson 2018-1-23
Given those restrictions, it would be possible to plot using the xy2 function together with a messy subsref() call for the x axes, and then calling xy2 again with a different messy subsref() for the y axes data.
But it would sure be easier and clearer and more efficient if it were permitted to use two lines of anonymous functions, with the function calling the other.
  3 个评论
Walter Roberson
Walter Roberson 2018-1-29
plotxy_helper = @(xy) plot(xy(:,1), xy(:,2))
plotxy2 = @(x, y) plotxy_helper(xy2(x, y));
This invokes xy2 once and receives the result back as a nameless array, which is then passed to plotxy_helper which pulls it apart to use the parts.

请先登录,再进行评论。

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Holidays / Seasons 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by