MATLAB Answers

how to plot a gaussian 1D in matlab

817 views (last 30 days)
Gadadhar Sahoo
Gadadhar Sahoo on 1 Dec 2017
Edited: Adam Danz on 14 Jul 2020 at 19:23
for k = 1 : K ax = linspace(min_x,max_x,100); y = my_gaussian(x,means,vars); plot(ax,y);
end

  0 Comments

Sign in to comment.

Accepted Answer

M
M on 1 Dec 2017
Edited: Adam Danz on 14 Jul 2020 at 18:51
You can use Matlab function to construct Gaussian function :
x = 0:0.1:10;
y = gaussmf(x,[2 5]);
plot(x,y)

  3 Comments

Gadadhar Sahoo
Gadadhar Sahoo on 1 Dec 2017
how to plot using both means and variance for gaussian 1D
M
M on 1 Dec 2017
Did you read the documentation ? Those are the second parameter you give to the function gaussmf(x,[sigma,mean]) .
Gadadhar Sahoo
Gadadhar Sahoo on 1 Dec 2017
i am not getting the gaussian bell curve..here is my code
clc clear load fisheriris [N, M] = size(meas); x = meas(:,1)'; max_x = max(max((x))); min_x = min(min(x)); K = 3; means = min_x + (max_x - min_x)*rand(1, K); vars = ones(1, K); prior = ones(1,K)/K; prob = zeros(N, K); for g = 1 : 1 for p = 1 : N for k = 1 : K gaussian = (1/sqrt(2*pi*vars(k)))*exp(-(x(p)-means(k)).^2/(2*vars(k))); prob(p,k) = gaussian* prior(k); end sum_probs = sum(prob(p,:)); prob(p,:) = prob(p,:)/sum_probs; end for k = 1 : K means(k) = sum(prob(:,k)'.*x)/N; vars(k) = sum(prob(:,k)'.*(x - means(k)).^2)/N; prior(k) = sum(prob(:,k))/N; end end figure scatter(x,zeros(1,N)); hold on for k = 1 : K ax = linspace(min_x,max_x,100); y = gaussmf(ax,[means,vars]); plot(ax,y);
end

Sign in to comment.

More Answers (1)

Adam Danz
Adam Danz on 14 Jul 2020 at 19:22
Edited: Adam Danz on 14 Jul 2020 at 19:23
Fully parameterized gaussian function (no toolboxes needed)
If you don't have the Fuzzy Logic toolbox (and therefore do not have access to gaussmf), here's a simple anonymous function to create a paramaterized gaussian curve.
gaus = @(x,mu,sig,amp,vo)amp*exp(-(((x-mu).^2)/(2*sig.^2)))+vo;
  • x is an array of x-values.
  • mu is the mean
  • sig is the standard deviation
  • amp is the (positive or negative)
  • vo is the vertical offset from baseline (positive or negative)
To add noise along the y-axis of the guassian,
y = gaus(___);
yh = y + randn(size(y))*amp*.10; % noise is 10% of the amp
Demo
x = linspace(-5,25,100);
mu = 10;
sig = 5;
amp = 9;
vo = -5;
y = gaus(x,mu,sig,amp,vo);
% Plot gaussian
plot(x, y, 'b-', 'LineWidth',3)
% Add noise
yh = y + randn(size(y))*amp*.10;
hold on
plot(x, yh, 'ro','markersize', 4)
grid on
title(sprintf('Guassian with \\mu=%.1f \\sigma=%.1f amp=%.1f vo=%.1f', ...
mu, sig, amp, vo))
Comparison with gaussmf()
x = linspace(-15,10,100);
mu = -5.8;
sig = 2.5;
amp = 1;
vo = 0;
y = gaus(x,mu,sig,amp,vo);
% Plot gaussian from custom function
plot(x, y, 'b-', 'LineWidth',3, 'DisplayName','Custom function')
% Plot gaussian from custom function
y2 = gaussmf(x,[sig,mu]);
hold on
plot(x, y2, 'r--', 'LineWidth',4, 'DisplayName','gaussmf()')
grid on
title(sprintf('Guassian with \\mu=%.1f \\sigma=%.1f amp=%.1f vo=%.1f', ...
mu, sig, amp, vo))
legend()

  0 Comments

Sign in to comment.