Help on a Function

조회 수: 1 (최근 30일)
Dhmhgr
Dhmhgr 2019년 11월 30일
댓글: Image Analyst 2019년 12월 2일
Greetings!
I would like your help on a function I'd like to make on Matlab.
I want to make a function called R,
[Roots] = R(X,Y,eps) and this function will be returning a table with 2 columns showing the X and Y of the points where abs(Y)<eps
Thank you in advance.
  댓글 수: 4
dpb
dpb 2019년 11월 30일
I suggest reading the Getting Started tutorial sections in the online documentation...it outlines basic syntax and operations that will get you started. There are lots of examples of writing simple functions with the doc for function
Logical addressing is the trick for such questions as this...see what
eps=0.5;
x=rand(10,1);
x(x<eps)
does.
Dhmhgr
Dhmhgr 2019년 12월 1일
I see, but it didn't help me.

댓글을 달려면 로그인하십시오.

답변 (3개)

Image Analyst
Image Analyst 2019년 12월 1일
Try this (untested)
% This function will be returning a table with 2 columns showing the X and Y of the points where abs(Y)<eps
function [Roots] = R(X,Y,eps)
Roots = []; % Initialize to no values.
indexes = abs(Y) < eps;
if isempty(indexes)
% No Y satisfies the criteria.
return;
end
xSmall = reshape(X(indexes), [], 1); % Extract indexes and make sure they're in a column vector.
ySmall = reshape(Y(indexes), [], 1); % Extract indexes and make sure they're in a column vector.
Roots = table(xSmall, ySmall);
end
  댓글 수: 5
Dhmhgr
Dhmhgr 2019년 12월 1일
So, what should the correct answer be? The first one by the person "Image Analyst"?
Image Analyst
Image Analyst 2019년 12월 1일
Of course. dpb was merely showing what would happen if I didn't use reshape to turn the data into a column vector before passing in to the table() function. It was not a separate answer in itself, and I did use reshape() so I did it correctly.

댓글을 달려면 로그인하십시오.


Dhmhgr
Dhmhgr 2019년 12월 1일
??
  댓글 수: 1
Image Analyst
Image Analyst 2019년 12월 1일
I didn't notice at first that we were using eps. That is probably a bad thing to use (unless it's a trick question) because no value of Y can be less than eps unless it's pure zero.
Try this (with a variable named minValue):
X = rand(1, 100);
Y = rand(1, 100);
minValue = 0.1;
Roots = R(X,Y,minValue)
% This function will be returning a table with 2 columns showing the X and Y of the points where abs(Y)<eps
function [Roots] = R(X,Y,minValue)
Roots = []; % Initialize to no values.
indexes = abs(Y) < minValue;
if isempty(indexes)
% No Y satisfies the criteria.
return;
end
xSmall = reshape(X(indexes), [], 1); % Extract indexes and make sure they're in a column vector.
ySmall = reshape(Y(indexes), [], 1); % Extract indexes and make sure they're in a column vector.
Roots = table(xSmall, ySmall);
end
You'll see
Roots =
11×2 table
xSmall ySmall
_________________ ___________________
0.970592781760616 0.0838213779969326
0.792207329559554 0.0781755287531837
0.849129305868777 0.00463422413406744
0.743132468124916 0.0844358455109103
0.489764395788231 0.0759666916908419
0.679702676853675 0.0496544303257421
0.890903252535798 0.0964545251683886
0.257508254123736 0.0597795429471558
0.243524968724989 0.0154034376515551
0.929263623187228 0.0430238016578078
0.567821640725221 0.0811257688657853

댓글을 달려면 로그인하십시오.


Dhmhgr
Dhmhgr 2019년 12월 2일
편집: Walter Roberson 2019년 12월 2일
Okay, function made correctly.
I have an other problem regarding the same exercise.
I have:
x=linspace(-2,2,100) y=x.^4-3*x.^3+x.^2+8*x
I want to give eps a number so that by calling the R function I will be able to find the points where abs(y)<eps.
What should the eps number be?
  댓글 수: 2
Walter Roberson
Walter Roberson 2019년 12월 2일
What should the eps number be?
42.
Image Analyst
Image Analyst 2019년 12월 2일
eps, which remember I said must be renamed, can be anything. Whatever you want. Whatever you use, R will find the points, if any exists, or null if they don't.

댓글을 달려면 로그인하십시오.

카테고리

Help CenterFile Exchange에서 Matrices and Arrays에 대해 자세히 알아보기

태그

Community Treasure Hunt

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

Start Hunting!

Translated by