【问题标题】:How to plot ????−???? diagram in MATLAB?如何绘制????−???? MATLAB中的图表?
【发布时间】:2016-11-06 13:58:31
【问题描述】:

我正在尝试使用MATLAB 为给定的相位常数绘制 ????−???? 图,但是虽然我查看了很多网页,但没有类似的例子绘制??????−???? MATLAB中的图表。您能否通过提供一些有关此问题的示例来澄清我如何进行?任何帮助将不胜感激。

绘图范围: ????=10????ℎ????−10????????????

w :角频率

wc :恒定的角频率

第一个参数: ????????1=0.2∗????, ????????2=0.4∗????, ?? ??????3=0.6∗????, ?????????4=0.8∗???? , ɛ1=1* ɛ0, μ= μ0

1st的参数: a1=0.08636cm, a2=0.8636cm, a3=2.286cm, a4=29.21cm, ɛ1=1* ɛ0, μ= μ0

【问题讨论】:

  • 经典方法分为 3 点: 1- 将带有 w 作为值的 B 表达式也写入 wc,2 - 存储到数组 w[i] 中的 i=1:n 的 FOR 循环= 1 和数组 B[i] =(B 的公式与 w = w[i]),3- plot(w,B) 像每 2 个变量图 y=f(x) 不起作用?还是我错过了什么?
  • @marcoresk 非常感谢您的回复。抱歉,但我真的没有经验,如果您发布示例代码作为答案,我将不胜感激。在此先感谢...
  • 我认为您从声誉资料中获得了很多经验。我发布了一个基本答案,试试吧!
  • @marcoresk 我有 ASP.NET MVC 的经验,而不是 MATLAB :)

标签: matlab matlab-figure waveform wave


【解决方案1】:

正如 OP 所要求的,这是一种 Matlab 代码。 我假设用 [1,100] 范围内的 w 映射 B 的图(但可以更改值) 第一个案例有 wc 有 3 个不同的案例,B 的 4 个不同的图(B1、B2、B3 和 B4)将被映射为四种不同的颜色

    %constant inizialization
    mu = 1.2566E-6;
    e = 1;
    start_f = 10000; %10 MHz start frequency range
    end_f = 10000000; %10 GHz end frequency range 
    step = 10 %plot the function every "step" Hz (ONLY INTEGER NUMBERS ALLOWED)
    k = 1;
    % function of B example: B = w*sqrt(mu*e)*sqrt(1-((wc^2)/w));

    %vectors initialization to avoid the "consider preallocation" Matlab not-critical warning
    range_f = ceil((end_f - start_f)/step) + 1;
    w = zeros(range_f);
    B1 = zeros(range_f);
    B2 = zeros(range_f);
    B3 = zeros(range_f);
    B4 = zeros(range_f);

    for i=start_f:step:end_f %from 10 MHz to 10 GHz with steps of 1 Hz
    %store i in the i-cell of vector w
      w(k) = i;
%values that need to be updated every time
      w1 = 0.2*w(i);
      w2 = 0.4*w(i); 
      w3 = 0.6*w(i);
      w4 = 0.8*w(i); 
%four different results of B
      B1(i) = w(i)*sqrt(mu*e)*sqrt(1-((w1^2)/w(i)));
      B2(i) = w(i)*sqrt(mu*e)*sqrt(1-((w2^2)/w(i)));
      B3(i) = w(i)*sqrt(mu*e)*sqrt(1-((w3^2)/w(i)));
      B4(i) = w(i)*sqrt(mu*e)*sqrt(1-((w4^2)/w(i)));

      k = k+1;
    end
%plot the 4 lines    
    plot(w,B1,'r') %red line of B1 = f(w) 
    hold on
    plot(w,B2,'g') %green line of B2 = f(w) 
    hold on
    plot(w,B3,'b') %blue line of B3 = f(w) 
    hold on
    plot(w,B4,'k') %black line of B4 = f(w) 

4 个不同的案例必须用 4 个图来表示(在本例中它们已被覆盖)。

最后一个符号可以用同样的方式完成(你有 4 个常量参数 a1、a2 等),这次不依赖于 w。所以

  B1a(i) = sqrt((w(i)^2)*mu*e - ((pi^2)/a1)));
  B2a(i) = sqrt((w(i)^2)*mu*e - ((pi^2)/a1)));
  B3a(i) = sqrt((w(i)^2)*mu*e - ((pi^2)/a1)));
  B4a(i) = sqrt((w(i)^2)*mu*e - ((pi^2)/a1)));

如果您遇到一些错误(由于“快速”编写),请在 cmets 中报告,我会更正并更新代码

【讨论】:

  • “试图访问 w(1.1);索引必须是正整数或逻辑整数。” 遇到错误。有什么想法吗?
  • 我还在问题中添加了绘图范围角频率恒定角频率参数。在此先感谢...
  • @ClintEastwood 我的错,我写的答案“太快了”。 (我犯了一个小错误)也用调整后的频率范围更新代码。其他规范首先是隐式的,对代码没有影响(假设w属于频率范围,没有其他变化)
  • 非常感谢,但还有另一个错误我找不到解决方案:w 的“变量 'x' 似乎在每次循环迭代中都会改变大小”, B1、B2、B3 和 B4。有什么想法吗?
  • @ClintEastwood 这不是错误,Matlab 只是警告您可以使这件事变得更好(但仍然可以工作)。您可以通过在 FOR 循环之前添加 w = zeros(end_f) 来解决此问题(对 B1、B2...B4 也这样做!)。仅用于内部资源优化。我会在 5 分钟内更新代码
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-04
  • 2016-03-26
  • 2020-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多