Plot Matlab/Octave:can';t图方程

Plot Matlab/Octave:can';t图方程,plot,octave,Plot,Octave,我使用倍频程来绘制一个简单的方程,但它返回一个空的图,如 代码如下: # Computing of Zin # Constants RL=50; L=1; mu=4e-7*pi; eps=1; nu=3e8/sqrt(eps); s=50; r=7.5; l=(mu/pi)*log((s-r)^2/r^2); c=1/(l*nu^2); R0=sqrt(l/c); beta=2*pi*sqrt(l*c); # Equation Zin=R0*(RL+R0*tan(beta*f)*1i)/(R0

我使用倍频程来绘制一个简单的方程,但它返回一个空的图,如 代码如下:

# Computing of Zin
# Constants
RL=50;
L=1;
mu=4e-7*pi;
eps=1;
nu=3e8/sqrt(eps);
s=50;
r=7.5;
l=(mu/pi)*log((s-r)^2/r^2);
c=1/(l*nu^2);
R0=sqrt(l/c);
beta=2*pi*sqrt(l*c);

# Equation
Zin=R0*(RL+R0*tan(beta*f)*1i)/(R0+RL*tan(beta*f)*1i);
printf("l=%e ; c=%e ; R0=%f ; beta=%e\n",l,c,R0,beta);
printf("Zin(f) = %f for f = %d Hz.\n",Zin,f);

# Plot Zin(f)
f=logspace(7,11);
figure(1);
semilogx(f,Zin);
title('Zin(f)');
function zin
    RL=50;
    L=1;
    mu=4e-7*pi;
    eps=1;
    nu=3e8/sqrt(eps);
    s=50;
    r=7.5;
    l=(mu/pi)*log((s-r)^2/r^2);
    c=1/(l*nu^2);
    R0=sqrt(l/c);
    beta=2*pi*sqrt(l*c);
    f=logspace(7,11);

    # Equation
    printf("l=%e ; c=%e ; R0=%f ; beta=%e\n",l,c,R0,beta);

    Zin = R0*(RL+R0*tan(beta*f)*1i)./(R0+RL*tan(beta*f)*1i);

    # Plot Zin(f)


    size(Zin)


    semilogx(f,Zin,'r-x');

    title('Zin(f)');

end
倍频程返回:

l=1.387681e-006 ; c=8.006964e-012 ; R0=416.304253 ; beta=2.094395e-008
Zin(f) = 444.026370 for f = 10000000 Hz.
Zin(f) = 12067926.406393 for f = 14563484 Hz.
Zin(f) = 17575106.248548 for f = 21209508 Hz.
Zin(f) = 25595479.226995 for f = 30888435 Hz.
Zin(f) = 37275937.203149 for f = 44984326 Hz.
Zin(f) = 54286754.393239 for f = 65512855 Hz.
Zin(f) = 79060432.109077 for f = 95409547 Hz.
Zin(f) = 115139539.932645 for f = 138949549 Hz.
Zin(f) = 167683293.681101 for f = 202358964 Hz.
Zin(f) = 244205309.454865 for f = 294705170 Hz.
Zin(f) = 355648030.622312 for f = 429193426 Hz.
Zin(f) = 517947467.923120 for f = 625055192 Hz.
Zin(f) = 754312006.335461 for f = 910298177 Hz.
Zin(f) = 1098541141.987557 for f = 1325711365 Hz.
Zin(f) = 1599858719.606057 for f = 1930697728 Hz.
Zin(f) = 2329951810.515372 for f = 2811768698 Hz.
Zin(f) = 3393221771.895329 for f = 4094915062 Hz.
Zin(f) = 4941713361.323838 for f = 5963623317 Hz.
Zin(f) = 7196856730.011529 for f = 8685113738 Hz.
Zin(f) = 10481131341.546831 for f = 12648552169 Hz.
Zin(f) = 15264179671.752302 for f = 18420699693 Hz.
Zin(f) = 22229964825.261909 for f = 26826957953 Hz.
Zin(f) = 32374575428.176399 for f = 39069399371 Hz.
Zin(f) = 47148663634.573898 for f = 56898660290 Hz.
Zin(f) = 68664884500.429985 for f = 82864277285 Hz.
Zin(f) = 100000000000.000000 for f = 
我不明白这个问题。我还试图使它成为一个函数,用fplot绘制它,但没有成功

提前感谢您的帮助。

请更改代码

半对数x(f,Zin)

半对数x(f,Zin,'*')

然后检查输出,其中点显示为“*”

更新:

代码如下:

# Computing of Zin
# Constants
RL=50;
L=1;
mu=4e-7*pi;
eps=1;
nu=3e8/sqrt(eps);
s=50;
r=7.5;
l=(mu/pi)*log((s-r)^2/r^2);
c=1/(l*nu^2);
R0=sqrt(l/c);
beta=2*pi*sqrt(l*c);

# Equation
Zin=R0*(RL+R0*tan(beta*f)*1i)/(R0+RL*tan(beta*f)*1i);
printf("l=%e ; c=%e ; R0=%f ; beta=%e\n",l,c,R0,beta);
printf("Zin(f) = %f for f = %d Hz.\n",Zin,f);

# Plot Zin(f)
f=logspace(7,11);
figure(1);
semilogx(f,Zin);
title('Zin(f)');
function zin
    RL=50;
    L=1;
    mu=4e-7*pi;
    eps=1;
    nu=3e8/sqrt(eps);
    s=50;
    r=7.5;
    l=(mu/pi)*log((s-r)^2/r^2);
    c=1/(l*nu^2);
    R0=sqrt(l/c);
    beta=2*pi*sqrt(l*c);
    f=logspace(7,11);

    # Equation
    printf("l=%e ; c=%e ; R0=%f ; beta=%e\n",l,c,R0,beta);

    Zin = R0*(RL+R0*tan(beta*f)*1i)./(R0+RL*tan(beta*f)*1i);

    # Plot Zin(f)


    size(Zin)


    semilogx(f,Zin,'r-x');

    title('Zin(f)');

end

图像如所示。

其中f在该行之前声明Zin=R0*(RL+R0*tan(betaf)*1i)/(R0+RLtan(beta*f)*1i)?事实上它是这样的,在方程后面声明。我没有意识到。但如果我把它放在方程前面,它不会改变任何东西,我得到了。该值似乎对应于倍频程返回值的第二行:对于f=10000000 Hz,Zin(f)=444.026370。但是,由倍频程返回的所有后续值都是错误的。我不明白为什么它会在情节上留下一条不变的线。谢谢。你能简单地解释一下为什么它不起作用,以及你是如何修复它的吗?@user1787461在你的代码中,f是一个大小为1 x n的向量,而Zin只是一个变量,即大小为1 x 1的向量(这意味着,每个频率的值相同,这就是为什么在图中出现了一条平行于x轴的线)。所以,你需要通过在一个频率环上计算Zin,使Zin成为一个大小为1 x n的向量。然后,可以通过semilogx中的“r-x”连接绘图上的不同点。既然你对这个答案感到满意,那就做两件事:投票支持这个答案,并将其标记为接受答案如果有疑问,请毫不犹豫地提出您的疑问。好的,谢谢您的帮助!可以肯定的是,这是正确的作图方式吗?或者有更简单的方法吗?@user1787461请检查更新的答案以获得更简单的方法:您只需在原始代码中的Zin方程中加一个点。“/”指将分子除以分母元素再除以元素,因为分子和分母给出了大小为(1 x n)的向量。由于需要显示绘图,因此不需要使用f打印Zin。如果您仍然需要打印它们,则需要根据到目前为止的经验循环Zin和f值。