Need help defining an anonymous function in Matlab

In summary: One more thought: the text inside a "Code (Matlab M)" box on this forum is coloured, which means there is colour information as well as text. When you copy and paste into Matlab, the colour information may be corrupting the text (Rich Text?).
  • #1
Atlas3
Gold Member
69
3
How can a step function be defined as an anonymous function in Matlab?
for example
for x ==3 return 1, for all other x return x.
Thanks
 
Physics news on Phys.org
  • #2
I think this will work:
Matlab:
f = @(x) x = (x == 3)*1 + (x ~= 3) * x

f(2) should evaluate to 2 and f(3) should evaluate to 1.

I don't have matlab, so I can't test this out, but according to the MathWorks documentation on anonymous functions, it should work. The code I wrote is a bit more cumbersome than equivalent code in C/C++, since MATLAB doesn't have a conditional operator.
 
  • #3
Thank you
 
  • #4
Mark44 said:
I think this will work:
Matlab:
f = @(x) x = (x == 3)*1 + (x ~= 3) * x

f(2) should evaluate to 2 and f(3) should evaluate to 1.

I don't have matlab, so I can't test this out, but according to the MathWorks documentation on anonymous functions, it should work. The code I wrote is a bit more cumbersome than equivalent code in C/C++, since MATLAB doesn't have a conditional operator.
I don't know if this is common for anonymous functions, but I found that whitespace is illegal, unlike java or any other programming language. In MATLAB mobile:

Screenshot_20181203-234538.jpg


Works correctly with whitespace removed.

Another thing: the "x=" part is also giving an error:

Screenshot_20181203-234859.jpg


Other than that, the result is coming fine.
 

Attachments

  • Screenshot_20181203-234538.jpg
    Screenshot_20181203-234538.jpg
    27.3 KB · Views: 1,051
  • Screenshot_20181203-234859.jpg
    Screenshot_20181203-234859.jpg
    26.1 KB · Views: 891
  • #5
Wrichik Basu said:
I don't know if this is common for anonymous functions, but I found that whitespace is illegal, unlike java or any other programming language. In MATLAB mobile:

View attachment 235158

Works correctly with whitespace removed.

Another thing: the "x=" part is also giving an error:

View attachment 235159

Other than that, the result is coming fine.
I appreciate your reply. Thank you. I have had the error and tried permutations trying to figure out wth. Thanks.
 
  • Like
Likes Wrichik Basu
  • #6
So, Wrichik, is this what works?
Matlab:
f = @(x)(x == 3) * 1 + (x ~= 3) * x
 
  • #8
how do I mark a question answered??
Thanks
 
  • #9
Mark44 said:
So, Wrichik, is this what works?
Matlab:
f = @(x)(x == 3) * 1 + (x ~= 3) * x
Nope, the space is still giving an error:

Screenshot_20181204-011331.jpg


Could be a bug in the app. I don't have Matlab desktop version, so I cannot confirm.
 

Attachments

  • Screenshot_20181204-011331.jpg
    Screenshot_20181204-011331.jpg
    37.5 KB · Views: 532
  • #10
Well, that sucks... There aren't many programming languages that throw an error because you have included a space.
 
  • #11
Mark44 said:
Well, that sucks... There aren't many programming languages that throw an error because you have included a space.
It is quite frustrating, and I don't have an explanation. I tried all possible combinations, and this is the one (at the bottom) that was evaluated correctly (mark the spaces):

Screenshot_20181204-012155.png
 

Attachments

  • Screenshot_20181204-012155.png
    Screenshot_20181204-012155.png
    20.6 KB · Views: 442
  • #12
I wonder if the "invalid text character" isn't a space but some other character that looks like a space? Or an invisible character that is there as well as a space?
 
  • #13
could it be that the multiplication is attempting to be applied to a logic result.
 
  • #14
DrGreg said:
I wonder if the "invalid text character" isn't a space but some other character that looks like a space? Or an invisible character that is there as well as a space?
That would be worth investigating.

Atlas3 said:
could it be that the multiplication is attempting to be applied to a logic result.
I doubt this very much. In matlab, true has the value 1 and false has the value 0.
 
  • #15
DrGreg said:
I wonder if the "invalid text character" isn't a space but some other character that looks like a space? Or an invisible character that is there as well as a space?
Mark44 said:
That would be worth investigating.
I directly copied from here and pasted there. Should that cause any problem?
 
  • #16
Wrichik Basu said:
I directly copied from here and pasted there. Should that cause any problem?
That is most probably the problem. Matlab has no problem with spaces (ASCII code 32), so it must be another character that is copied and pasted.
 
  • #17
DrClaude said:
That is most probably the problem. Matlab has no problem with spaces (ASCII code 32), so it must be another character that is copied and pasted.
You've got it right. But I copy-paste from the MATLAB website as well, but that doesn't create a problem. How is this possible?
 
  • #18
Wrichik Basu said:
You've got it right. But I copy-paste from the MATLAB website as well, but that doesn't create a problem. How is this possible?
The two web sites might be formatting text differently, with one using non-printing characters like &nbsp (non-breaking space) or similar.

I'm going to guess that my 2nd stab at it will actually work, with the extra spaces added for readability not affecting anything.
Matlab:
f = @(x) (x == 3) * 1 + (x ~= 3) * x
 
Last edited:
  • Like
Likes Wrichik Basu
  • #19
One more thought: the text inside a "Code (Matlab M)" box on this forum is coloured, which means there is colour information as well as text. When you copy and paste into Matlab, the colour information may be corrupting the text (Rich Text?).
 
  • Like
Likes Wrichik Basu

1. What is an anonymous function in Matlab?

An anonymous function in Matlab is a function that is defined without a name. It is also known as a "function handle" or a "lambda function". It is useful for creating short, one-line functions without the need to define a separate function file.

2. How do I define an anonymous function in Matlab?

To define an anonymous function in Matlab, use the "@" symbol followed by the input arguments in parentheses, then the function body. For example, @(x,y) x + y will create an anonymous function that adds two input variables.

3. Can I use anonymous functions in place of named functions in Matlab?

Yes, you can use anonymous functions in place of named functions in Matlab. They can be passed as inputs to other functions, used in array operations, and assigned to variables.

4. What are the advantages of using anonymous functions in Matlab?

There are several advantages of using anonymous functions in Matlab. They are concise and can be used to create small, one-line functions without the need for a separate file. They also allow for more flexible code and can be used in many different ways, such as passing them as inputs to other functions.

5. Can I call an anonymous function multiple times in Matlab?

Yes, you can call an anonymous function multiple times in Matlab. Once it is defined, you can call it as many times as needed with different input arguments. However, it is important to note that anonymous functions are local to the workspace in which they are defined, so they cannot be called from outside that workspace.

Similar threads

  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
5K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
2
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
986
  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
5
Views
2K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
4
Views
1K
  • MATLAB, Maple, Mathematica, LaTeX
Replies
1
Views
839
  • MATLAB, Maple, Mathematica, LaTeX
Replies
2
Views
1K
Back
Top