如何在MATLAB中绘制含整数常数k的函数(k=1-3)及优化实现
更简洁的MATLAB实现方式
你的原始代码已经能实现需求,这里提供两种更简洁的写法,主要通过循环或向量化操作减少重复代码,提升后续维护性:
方法1:循环批量绘制
通过循环遍历k的取值,避免重复编写plot参数,同时可以统一管理线条样式:
f = @(x,k) 2.^(k+1) .* x.^k .* exp(-2*x) ./ factorial(k); xs = 0:1e-2:10; colors = {'r', 'k', 'b'}; % 对应k=1、2、3的线条颜色 k_vals = [1,2,3]; hold on; % 保持绘图窗口,批量绘制多条曲线 for i = 1:length(k_vals) plot(xs, f(xs, k_vals(i)), colors{i}); end hold off; xlabel('x'); ylabel('f(x)'); legend('k=1', 'k=2', 'k=3'); % 可选添加图例,让图像更清晰
方法2:向量化一次性计算绘制
利用MATLAB的向量化特性,将k转为列向量后一次性计算所有k对应的函数值,再批量绘制:
f = @(x,k) 2.^(k+1) .* x.^k .* exp(-2*x) ./ factorial(k); xs = 0:1e-2:10; k_vals = [1;2;3]; % 转为列向量,和xs的行向量做广播运算 % 一次性计算所有k对应的f(x)结果,得到行数为length(xs)、列数为3的矩阵 f_vals = f(xs, k_vals); plot(xs, f_vals(:,1), 'r', xs, f_vals(:,2), 'k', xs, f_vals(:,3), 'b'); xlabel('x'); ylabel('f(x)'); legend('k=1', 'k=2', 'k=3');
优化细节说明
- 将
2ˆ改为2.^、/改为./,确保是逐元素运算,避免潜在的维度不匹配问题(原始代码中k为标量时结果一致,但逐元素写法更规范,适配k为向量的场景) - 两种写法都减少了重复代码,后续若要增加k的取值,只需修改
k_vals数组即可 - 可选添加
legend能让不同k对应的曲线更易区分
内容的提问来源于stack exchange,提问作者Ibn Eratosthenes
相关产品推荐
相关产品推荐

