【问题标题】:Matlab/Octave: can't plot equationMatlab / Octave:无法绘制方程
【发布时间】:2012-10-31 06:02:49
【问题描述】:

我正在使用 Octave 绘制一个简单的方程,但它返回一个空图,例如 this 这是代码:

# 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)');

Octave 返回这个:

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 绘制它的函数,但没有成功。

提前感谢您的帮助。

【问题讨论】:

  • 在此行之前声明的f在哪里 Zin=R0*(RL+R0*tan(betaf)*1i)/(R0+RLtan(beta*f) *1i); ?
  • 其实就是这样,在等式之后声明。我没有意识到。但如果我把它放在等式之前,它不会改变任何东西。

标签: plot octave


【解决方案1】:

请改密码

semilogx(f,Zin);

semilogx(f,Zin, '*');

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

更新:

代码如下:

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

图片显示在this

【讨论】:

  • 我收到this。该值似乎对应于 Octave 返回的第二行:Zin(f) = 444.026370 for f = 10000000 Hz。但是 Octave 返回的所有下一个值都是错误的。而且我不明白为什么它会在情节上给出一条恒定的线。
  • 谢谢。您能否简要解释一下为什么它不起作用以及您是如何解决的?
  • @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 值,根据目前的经验。
猜你喜欢
  • 2022-01-25
  • 2015-06-12
  • 1970-01-01
  • 2021-04-11
  • 2017-09-21
  • 2015-02-17
  • 1970-01-01
  • 1970-01-01
  • 2012-11-24
相关资源
最近更新 更多