Matlab编写Simpson辛普森法则函数报变量未使用、与本地函数重名错误
问题原因及修复方案
1. 两类报错的核心原因
- 「不支持对simpson赋值,变量与本地函数同名」:你在脚本中定义的本地函数名称
simpson和函数的返回值变量同名,Matlab禁止本地函数与同作用域下的变量重名,触发该报错。 - 「存在未使用变量」:你在脚本前半段定义了
x、y变量,但是定义完函数后没有编写调用逻辑,变量和函数的输入参数都没有被实际使用,触发该提示。
2. 辛普森法则实现的逻辑错误
你的代码还存在三个数值计算逻辑错误,即使解决命名问题也得不到正确结果:
- 系数写反:奇数位置的中间采样点应该乘4,偶数位置的中间采样点乘2,当前循环内的判断逻辑写反
- 缺失步长系数:辛普森积分公式的最终结果需要乘以
h/3(h为采样间隔(b-a)/n),你完全漏掉了这个系数 - 边界索引错误:
y(x(end))写法错误,x(end)是x的最后一个数值不是索引,应该写y(end)
修复后的完整代码
a = input("Enter value of a:"); b = input("Enter value of b:"); n = input("Enter value of n (must be even):"); x = linspace(a,b,n+1); y = exp(-x.^2); % 调用积分函数,接收变量名不要和函数名重复 integral_res = simpson_calc(x,y); disp("辛普森积分结果为:"); disp(integral_res); % 修改函数名,避免和返回值重名 function [simpson_val] = simpson_calc(x,y) h = x(2) - x(1); n_seg = length(x)-1; sum_val = 0; if mod(n_seg,2) == 1 disp('Cannot run code: segment number n must be even.') else for i = 2:n_seg if mod(i,2) == 0 sum_val = sum_val + 4*y(i); else sum_val = sum_val + 2*y(i); end end sum_val = sum_val + y(1) + y(end); simpson_val = sum_val * h /3; end end
内容的提问来源于stack exchange,提问作者Trace Sheets
相关产品推荐
相关产品推荐

