Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab在for循环问题中的绘图_Matlab_Loops_For Loop_Plot - Fatal编程技术网

Matlab在for循环问题中的绘图

Matlab在for循环问题中的绘图,matlab,loops,for-loop,plot,Matlab,Loops,For Loop,Plot,我已经编写了一个代码来在循环中绘制函数。对于循环n=4:4:32的每一个数值,我有一些变量会随着这个数值的变化而变化,问题来了。 如果我不使用for循环,我的绘图就是它必须的,而使用循环则不是,因为我的函数是根据n计算的,但变量不是 我不明白为什么会发生这种情况:例如,对于n=12,两个绘图图像不应该相同吗?。我上传了两个图像,都是n=12,第一个不使用循环,第二个使用循环 第一张图片: 第二张图片: 代码 注意:prac8fun和prac8fun2是保存在不同.m文件中的函数 帕拉格 请解释代

我已经编写了一个代码来在循环中绘制函数。对于循环n=4:4:32的每一个数值,我有一些变量会随着这个数值的变化而变化,问题来了。 如果我不使用for循环,我的绘图就是它必须的,而使用循环则不是,因为我的函数是根据n计算的,但变量不是

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

第一张图片: 第二张图片:

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

帕拉格


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

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


感谢您的时间:

我认为问题在于您对lambda的处理。它以[]开头,但您附加在第一个循环中创建的值,并且从不重置它。因此,在第三个循环n=12时,lambda的长度为1 x 27,但是您只需要索引1到13之间的值来创建D

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

在不使用n=12的循环运行之后,以及在将循环设置为n=4:4:12的情况下运行之后,可以通过检查lambda的大小和内容来检查这一点。为了修复它,我建议您在循环开始时预先分配lambda的大小,就像对D一样,并使用直接索引lambdajj=lambdaj填充


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

请解释代码中变量的问题。至少我不清楚这个问题。
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