Need help defining an anonymous function in Matlab

  • MATLAB
  • Thread starter Atlas3
  • Start date
  • #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
 

Answers and Replies

  • #2
35,052
6,791
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
Atlas3
Gold Member
69
3
Thank you
 
  • #4
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,754
1,574
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
    64.2 KB · Views: 762
  • Screenshot_20181203-234859.jpg
    Screenshot_20181203-234859.jpg
    61.2 KB · Views: 649
  • #5
Atlas3
Gold Member
69
3
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
35,052
6,791
So, Wrichik, is this what works?
Matlab:
f = @(x)(x == 3) * 1 + (x ~= 3) * x
 
  • #8
Atlas3
Gold Member
69
3
how do I mark a question answered??
Thanks
 
  • #9
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,754
1,574
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
    87.4 KB · Views: 320
  • #10
35,052
6,791
Well, that sucks... There aren't many programming languages that throw an error because you have included a space.
 
  • #11
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,754
1,574
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
    77.1 KB · Views: 307
  • #12
DrGreg
Science Advisor
Gold Member
2,328
1,137
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
Atlas3
Gold Member
69
3
could it be that the multiplication is attempting to be applied to a logic result.
 
  • #14
35,052
6,791
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.

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
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,754
1,574
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.
I directly copied from here and pasted there. Should that cause any problem?
 
  • #16
DrClaude
Mentor
7,603
3,999
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
Wrichik Basu
Insights Author
Gold Member
2020 Award
1,754
1,574
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
35,052
6,791
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
DrGreg
Science Advisor
Gold Member
2,328
1,137
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

Related Threads on Need help defining an anonymous function in Matlab

Replies
3
Views
3K
Replies
1
Views
9K
Replies
1
Views
2K
Replies
3
Views
2K
Replies
1
Views
3K
Replies
8
Views
13K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
1
Views
2K
  • Last Post
Replies
3
Views
3K
  • Last Post
Replies
4
Views
1K
Top