How to manually write the code for a matlab delta function

Click For Summary

Discussion Overview

The discussion revolves around how to manually code a delta function in MATLAB, specifically a modified version that is 0 everywhere except at 0, where it is 1. Participants express challenges with existing MATLAB functions and seek guidance on creating their own implementation.

Discussion Character

  • Exploratory
  • Technical explanation
  • Debate/contested
  • Homework-related

Main Points Raised

  • One participant shares their initial attempt to create a delta function using an if-else statement, but encounters an error due to mismatched vector lengths.
  • Another participant suggests making the impulse variable a vector to avoid the error encountered.
  • Several participants express a lack of proficiency in MATLAB and request sample code to better understand how to implement the delta function.
  • One participant states they cannot use the built-in Dirac function because it is infinite at 0, while they require a function that equals 1 at 0.
  • Another participant questions the reasoning behind the MATLAB implementation of the Dirac function, emphasizing the need for a magnitude of 1 at zero for discrete cases.
  • A suggestion is made to consider the Heaviside function as a potential alternative, although it is acknowledged that it does not meet the exact requirements.
  • One participant provides a sample code for defining a custom impulse function in MATLAB, clarifying that it represents a unit impulse at the origin rather than the Dirac delta function.
  • A later post shares a MATLAB function definition for a delta function that returns 1 at 0 and 0 elsewhere, indicating a possible solution to the original problem.

Areas of Agreement / Disagreement

Participants express a range of views on the appropriate implementation of a delta function in MATLAB. There is no consensus on the best approach, and multiple competing ideas and interpretations of the delta function are present.

Contextual Notes

Some participants highlight limitations in existing MATLAB functions and the need for a custom implementation, while others point out the mathematical correctness of the built-in Dirac function. The discussion reflects varying levels of familiarity with MATLAB and programming concepts.

O.J.
Messages
198
Reaction score
0
that is 0 everywhere and 1 at 0. the code I wrote was this:
n = -20:1:20;
if n==0
imp = 1
else
imp = 0;
end
>> stem (n, imp)
? Error using ==> stem at 40
X must be same length as Y.
but i got that error.

Using vectors and matrices is useless cause the delta function cannot be defined at 0 r negative values... can you please guide me through this?
 
Physics news on Phys.org
O.J. said:
that is 0 everywhere and 1 at 0. the code I wrote was this:
n = -20:1:20;
if n==0
imp = 1
else
imp = 0;
end
>> stem (n, imp)
? Error using ==> stem at 40
X must be same length as Y.
but i got that error.

Using vectors and matrices is useless cause the delta function cannot be defined at 0 r negative values... can you please guide me through this?
Why not make imp a vector as well?
 
how to, please a sample code pelase I am not proficient with MATLAB and the way it works but I am trying my best. I just wana see a sample code to get the hang of it...
 
O.J. said:
how to, please a sample code pelase I am not proficient with MATLAB and the way it works but I am trying my best. I just wana see a sample code to get the hang of it...

I googled MATLAB dirac delta, and got lots of hits. Including one at Mathworks.com

http://www.mathworks.com/access/hel...=1T4GGLL_enUS301US302&q=matlab+delta+function

Does that help? It looks like the Mathworks.com website has lots of resources to help you learn MATLAB.
 
i can't use the dirac function that comes with MATLAB because I need a modified diract function that is 0 everywhere and ONE at 0. the one that comes with MATLAB is INF at 0.
 
O.J. said:
i can't use the dirac function that comes with MATLAB because I need a modified diract function that is 0 everywhere and ONE at 0. the one that comes with MATLAB is INF at 0.

And why do you think that is? Their Dirac delta function is mathematically correct.
 
why or why not they implemented it that way isn't my concern. for dirac to apply to the discrete case it has to have a magnitude of 1 at zero
 
still doesn't help. that's like the unit step function. I am looking for a function that's 0 everywhere and 1 at 0. is it hard to manually code such a thing?
 
  • #10
O.J. said:
still doesn't help. that's like the unit step function. I am looking for a function that's 0 everywhere and 1 at 0. is it hard to manually code such a thing?
I suggest that you look again at the link I gave. Yes, the Heaviside function isn't precisely what you need, but it should give you an idea of how to code it yourself.

Now, I know that it is strictly against the rules to give out complete solutions, but I am of the school that programming is best learned by example. So, I'm going to give you one possible way of defining a unit impulse at the origin.

For example, you could define a new function using a MATLAB file called impulse.m. The contents of such a file would be something like,
Code:
function [value] = impulse(x)
     % This function represents a unit impulse at the origin.
     % impulse(x) = 1 for x = 0 and 0 otherwise

     if x = 0
           value = 1;
     else
           value = 0;
     end
For more information on defining custom functions, see the official MATLAB documentation (http://www.mathworks.com/access/hel...ccess/helpdesk/help/techdoc/ref/function.htm" rather good lecture notes.

I would like to emphasise once again that this is not the Dirac Delta function, but a unit impulse at the origin.
 
Last edited by a moderator:
  • #11
Matlab function:
function Y = dirac(X)
%DIRAC Delta function.
% DIRAC(X) is zero for all X, except X == 0 where it is infinite.
% DIRAC(X) is not a function in the strict sense, but rather a
% distribution with int(dirac(x-a)*f(x),-inf,inf) = f(a) and
% diff(heaviside(x),x) = dirac(x).
% See also HEAVISIDE.

% Copyright 1993-2003 The MathWorks, Inc.
% $Revision: 1.1.6.1 $ $Date: 2009/03/09 20:41:28 $

Y = zeros(size(X));
Y(X == 0) = Inf;

Do:

function Y = diracOne(X)

Y = zeros(size(X));

Y(X == 0) = 1;

So easy.

I have helped

I forgot one detail. Call the function as follows:

t = 1:10;
diracOne = f (t-2);

And you will have:

f = [0 1 0 0 0 0 0 0 0 0 0];

Good studies
 
Last edited:

Similar threads

  • · Replies 3 ·
Replies
3
Views
2K
  • · Replies 10 ·
Replies
10
Views
2K
  • · Replies 2 ·
Replies
2
Views
3K
  • · Replies 10 ·
Replies
10
Views
2K
Replies
2
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
  • · Replies 1 ·
Replies
1
Views
2K
Replies
2
Views
2K
  • · Replies 13 ·
Replies
13
Views
3K
  • · Replies 1 ·
Replies
1
Views
2K