我编写了一个代码来绘制循环内的函数。对于循环的每个值编号( 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
感谢您的时间:)
答案 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}}格式之外别无选择的情况,特别是在嵌套循环中,请密切关注变量的大小和内容。