Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
这个简短的MATLAB代码有什么错误?_Matlab - Fatal编程技术网

这个简短的MATLAB代码有什么错误?

这个简短的MATLAB代码有什么错误?,matlab,Matlab,下面的代码试图根据此图所示的方程式绘制图形。初始参数在代码中给出。即使使用这个小代码,我也会出错。我哪里弄错的? F函数是指超几何函数 编辑:我根据@Doctor Core和@Nakini的答案编辑了代码。代码中突出显示了所做的修改。然而,我似乎还不明白。我发现了两种错误: 您遗漏了运算符lambda_c(mu+1)应该是lambda_c*(mu+1)这至少发生了两次 似乎您正在尝试使用3x1lambda\u d和10x1Tplot为p\u d生成3条曲线。Matlab矢量化不是这样工作的。您

下面的代码试图根据此图所示的方程式绘制图形。初始参数在代码中给出。即使使用这个小代码,我也会出错。我哪里弄错的? F函数是指超几何函数


编辑:我根据@Doctor Core和@Nakini的答案编辑了代码。代码中突出显示了所做的修改。然而,我似乎还不明白。我发现了两种错误:

  • 您遗漏了运算符
    lambda_c(mu+1)
    应该是
    lambda_c*(mu+1)
    这至少发生了两次

  • 似乎您正在尝试使用3x1
    lambda\u d
    和10x1
    Tplot
    p\u d
    生成3条曲线。Matlab矢量化不是这样工作的。您应该使用for循环,或者对二维数组执行一些智能(且难以读取)操作。提示:制作一个10x3数组

  • 试一试

  • linspace
    的使用并不完全正确。如果您想要类似于绘图的内容,则需要执行以下操作:
    Tplot=linspace(-7.5,10,8)
    Tplot=-7.5:2.5:10
    
  • 您确定需要按原样使用Tplot的值吗?看起来T的单位是db
  • 如果选项2正确,则
    • hypergeom
      函数在
      Tplot==0
      时会导致问题。Matlab抛出一个被零除的
      错误。不过,我不确定这个函数在做什么。但我可以猜测,当T为0db时,函数的值介于0和1之间
    • 对于Tplot的所有-ve值,您将从
      hypergeom
    • 当Tplot为-ve
  • 由于p_cp_d依赖于v,只要v是复数,你就会得到复数
  • 简而言之,您需要检查T的值。一旦你使用了T的正值,我想一切都会好起来的。当然,在计算诸如
    lambda_c(mu+1)
    之类的表达式时,需要注意
    语法

    编辑

    以下是代码的正确版本:

    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;
    
    输出为:

    我不能使用Tplot的精确值吗,因为它是我们在图表中看到的值吗?@Abdulhameed,我不这么认为。如果使用精确值,则将得到
    v
    mu
    的复数。在
    db sclae
    中,如果某个值为负数,则表示比率在0和1之间。例如,-7.5db电压增益表示v_out/v_In=0.42。我对代码进行了编辑,但我不确定在其他地方可能会出错。请使用以下内容更新代码:
    p_d(k,:)=lambda(k)。/((lambda_d(k)。*(v+1)+lambda_c.*(p_c/p_d)。^delta)。*v);     p_c(k,:)=lambda_c./((lambda_c*(mu+1)+lambda_d(k)。*(p_d/p_c)。^delta.*v)
    @Abdulhameed,您编辑的代码几乎正确,但有一些bug。我在回答中修正并更新了相同的问题。
    for k = 1:3
        p_d(:,k) = lambda_d(k)./((lambda_d(k) .* (v + 1) + lambda_c.*(P_c/P_d).^delta).*v);
    end
    
    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;