【问题标题】:Matlab plotting inside a for loop issueMatlab在for循环问题内绘图
【发布时间】:2013-11-22 00:38:17
【问题描述】:

我编写了一个代码来在循环中绘制一个函数。对于循环的每个值编号 (n = 4:4:32),我有一些变量会随该值而变化,问题就来了。 如果我不使用 for 循环,我的情节就是它所必须的,而使用循环却不是因为我的函数是根据 n 评估的,但变量没有。

我不明白为什么会这样:例如,对于 n=12,两个绘图图像不应该相同吗?我上传了两张图片,都是 n=12,第一张没有使用循环,第二张使用循环。

第一张图片:http://i.stack.imgur.com/q1qhA.png 第二张图片:http://i.stack.imgur.com/ksMuI.png

代码

a = -1; b = 3;
lambda = [];
xx = linspace(a,b,1000);
df = prac8fun2(xx);

for n = 4:4:32
D = zeros(n+1,n+1);   
x = linspace(a,b,n+1);

    for jj = 1:n+1
        lambdaj = (-1)^(n-(jj-1)).*nchoosek(n,jj-1);
        lambda = [lambda, lambdaj];             
    end
lambda = lambda.*((n^n)/(factorial(n)*(b-a)^n));

    for jj = 1:n+1
        for ii = 1:n+1
          if ii == jj
              D(ii,jj) = sum((x(jj)-[x(1:jj-1), x(jj+1:end)]).^(-1));
            else
              D(ii,jj) = lambda(jj)./(lambda(ii)).*(x(ii)-x(jj)).^(-1);
            end
    end  
    end

Df = D*prac8fun(x)';

plot(xx,df,'k','linewidth',2); hold on;
plot(x,Df,'-or'); grid on;

pause
close

end

注意:prac8fun 和 prac8fun2 是保存在不同 .m 文件中的函数。

段落

请解释您与代码中的变量有关的问题。至少我不清楚这个问题

我不知道如何更好地解释自己,所以我上传了一个视频来展示我的问题。 视频(必须用http替换htp):htp://youtu.be/dWredX5z8XY

感谢您的宝贵时间 :)

【问题讨论】:

  • 请解释您的代码中的变量问题。至少我不清楚这个问题。

标签: matlab loops for-loop plot


【解决方案1】:

我认为问题在于您对lambda 的处理。它以 [] 开头,但您附加在第一个循环中创建的值,并且永远不会重置它。所以到第三个循环 (n = 12) 时,lambda 最终的长度为 1 x 27,但您只能索引 1 到 13 之间的值来创建 D。

另一方面,如果您删除外部循环并使用 n = 12,lambda 会从 [] 开始,然后您将 13 个值填充到其中,这可能是您想要的行为。

您可以通过检查lambda 的大小和内容来检查这一点,在没有使用n=12 的循环运行之后,以及在使用设置为n = 4:4:12 的循环运行之后。要修复它,我建议您在循环开始时预先分配 lambda 的大小,就像为 D 所做的那样,并使用直接索引 (lambda(jj) = lambdaj) 进行填充。

一般而言:尽可能避免附加值。如果您别无选择,只能使用 x = [x,newx]; 格式,尤其是在嵌套循环中,请密切注意变量的大小和内容。

【讨论】:

    猜你喜欢
    • 2016-02-20
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-29
    • 2016-02-09
    相关资源
    最近更新 更多