- Использование
linspace
не совсем правильно.Если вы хотите что-то похожее на сюжет, вам нужно сделать: Tplot= linspace(-7.5, 10, 8);
или Tplot= -7.5:2.5:10;
. - Вы уверены, что вам нужно использовать значение Tplot как есть?Кажется, что T находится в дБ.
- Если опция-2 верна, то функция
hypergeom
вызывает проблему при Tplot == 0
.Matlab выдает ошибку division by zero
.Я не уверен, что делает эта функция, хотя.Но я могу догадаться, что функция (и) имеет значение между 0 и 1, когда T равно 0 дБ. - Для всех -ve значений Tplot вы получите комплексные числа из
hypergeom
- Вы также получите комплексные числа для
v
, когда Tplot -ve
- As p_c и p_d зависят от v , вы получите комплексные числа, если v является сложным.
Короченеобходимо проверить значения T .И как только вы используете положительные значения T, я думаю, все станет на свои места.Конечно, вам нужно позаботиться о syntax
при оценке таких выражений, как lambda_c(mu + 1)
.
EDIT
Вот правильная версия вашего кода:
alpha = 4;
delta = 2/alpha;
P_c = 1;%
P_d = 1;
T = -10:2.5:10;
%Tplot= linspace(-7.5, 10, 2.5); %referring to T % on the x-axis
% Tplot=10^(-7.5/10):10^(2.5/10):10^(10/10); %based on @Nakini answer
Tplot=db2pow(T); %based on @Nakini answer
lambda_c = 0.01;
lambda_d = [0.002,0.01, 0.05];
mu = (delta/(1-delta)).*Tplot.* hypergeom([1, 1-delta], 2-delta, -Tplot);
v = (Tplot.^delta).*gamma(1-delta).*gamma(1+delta);
col = ['-og'; '-or'; '-ob'];
figure;hold on; grid on;
for k = 1:3 % from Dr Core's Edit
p_c = lambda_c./(lambda_c*(mu + 1) + (lambda_d(k).*(P_d/P_c).^delta).*v);
p_d = lambda_d(k)./(lambda_d(k) .* (v + 1) + lambda_c.*(P_c/P_d).^delta.*v);
plot (T, p_c, col(k, :), 'MarkerFaceColor', col(k,3));
plot (T, p_d, col(k, :), 'MarkerFaceColor', col(k,3));
end
set(gca, 'XTick',T);
xlabel('T(db)')
hold off;
И вывод: