Matlab绘制for循环问题

时间:2013-11-22 00:38:18

标签: matlab loops for-loop plot

我编写了一个代码来绘制循环内的函数。对于循环的每个值编号( 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文件中的函数。

Parag

  

请解释有关代码中变量的问题。至少

我不清楚这个问题

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

感谢您的时间:)

1 个答案:

答案 0 :(得分:0)

我认为问题在于您处理lambda。它以[]开头,但是您追加在第一个循环中创建的值,并且从不重置它。因此,通过第三个循环(n = 12),lambda以1 x 27的长度结束,但是您只能将1到13之间的值编入索引以创建D

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

您可以在运行lambda之后检查n=12的大小和内容,而不是使用n = 4:4:12的循环,并在将循环设置为D后运行。要修复它,我建议你像在lambda(jj) = lambdaj那样在循环开始时预先分配lambda的大小,并使用直接索引(x = [x,newx];)填充。

一般来说:尽量避免附加值。如果您处于除了使用{{1}}格式之外别无选择的情况,特别是在嵌套循环中,请密切关注变量的大小和内容。