如何从循环中选择特定值以针对一系列值进行绘制?

时间:2019-02-05 15:52:05

标签: matlab

我想不出合适的措辞,但是我试图让我的代码运行一个循环,该循环会将X的值输入到初始条件变量中。然后将该变量输入到要绘制的热方程中。从代码中,我想选择一个在X(i = 51)处的值并将其绘制为T(x,T1)。正如我之前所说,我不知道搜索可能解决方案的正确措辞。任何建议都会很棒!

clear;
clc;
% initialize given variables
A= 0.25;
L= pi;
Nx=101; Nt=10^(-4);
dx=L/(Nx-1);

T1=zeros(1,Nx);
x=linspace(0, L, Nx); %x distance

%Initial condition
%T1 will be the "new" T value and To will be the old
T1= x.*(pi-x);
%For plotting, time starts at 0.
t=0;
for n=1:50
    To=T1;
    t=t+1;
    for i=2:Nx-1
        T1(i)=To(i)+Nt *A*((To(i+1)-2*To(i)+To(i-1))/(dx^2))+ sin(5*x(i));
    end
    %B.C given than @ T(0,t) & T(L,t) = 0
    T1(1)=0; T1(end)=0;
    figure(1)
    plot(x,T1); set(gca, 'ylim',[-110 110]);
    ylabel('Temperature along the Rod');
    xlabel('Location on the Rod of length Pi');
    title(sprintf('Time = %f seconds', t));
    pause(0.001);
end

我想要绘制的预期输出是plot(x(i=51),T1),它将显示出这样的图像。对于该图,我运行了我的代码,并将i更改为= 50:51,以获得热量方程所需的值。我试图将其绘制在所示的代码中,而不必一遍又一遍地重写我的代码以得到不同的图,因为我更改了诸如i或时间等值。enter image description here

1 个答案:

答案 0 :(得分:0)

您要为每个x绘制一个x(51),特别是n的一致值。

这可以通过几种方法完成

首先,作为带有hold on的单个点:

for n = 1:50
    % ... calculation ...
    hold on
    plot( x(51), T1(51), '.' );
    hold off
end

您可以更新绘图,这将更快地进行计算,并具有显示折线图的优点

x_51 = NaN( 50, 1 );
T1_51 = NaN( 50, 1 );
p = plot( [], [] );
for n = 1:50
    % ... calculation ... 
    x_51(n) = x(51);
    T1_51(n) = T1(51);
    set( p, 'XData', x_51, 'YData', T1_51 );
end