在 matlab 中绘制一系列函数

Graphing a sequence of functions in matlab

提问人:Wrloord 提问时间:9/25/2023 最后编辑:ThomasIsCodingWrloord 更新时间:9/25/2023 访问量:40

问:

problem

我想绘制函数连续的前 10 项。

为此,我尝试在MATLAB中执行以下代码:

n_max = 10;
x = linspace(0, 1, 1000); 
fn_values = zeros(n_max, length(x));

for n = 1:n_max
    fn = zeros(size(x));
    for k = 0:(2^n - 1)
        Ik = [(k / 2^n), ((k + 1) / 2^n)];
        fn = fn + (k / 2^n) * (x >= Ik(1) & x < Ik(2));
    end
    fn_values(n, :) = fn;
end

figure;
hold on;
for n = 1:n_max
    plot(x, fn_values(n, :), 'DisplayName', ['f_', num2str(n)]);
end

title('Graph of the first 10 terms of the sequence f_n(x)');
xlabel('x');
ylabel('f_n(x)');
legend('show');
grid on;
hold off;

这行得通吗?任何帮助都是值得赞赏的!

函数 MATLAB 绘图 序列

评论


答:

1赞 ThomasIsCoding 9/25/2023 #1

您可以尝试下面的代码

n_max = 10;
x = linspace(0, 1, 1000); 

f = @(n,x) sum(cell2mat(transpose(arrayfun(@(k) k*sum(x>=k./2.^n & x< (k+1)./2.^n, 1), 0:(2^n-1), UniformOutput=false))),1)/2^n;

figure;
hold on;
for n = 1:n_max
    plot(x, f(n, x), 'DisplayName', ['f_{', num2str(n),'}']);
end

title('Graph of the first 10 terms of the sequence f_n(x)');
xlabel('x');
ylabel('f_n(x)');
legend('show');
grid on;
hold off;

enter image description here

评论

1赞 Wolfie 9/26/2023
在这里定义为匿名函数在你的答案部分压缩了很多复杂性,这基本上回答了问题 - 它可能受益于作为一个本地定义的函数,所以你可以添加注释来解释你的代码实际上对 OP(和其他人)做了什么f