MATLAB用polyfit求出来的多项式,如何直接对其进行积分后再算polyval

就是一组数据,先用histogram算出频率分布,用多项式拟合,polyfit算出多项式的参数值,然后对多项式进行积分后,之后再带入数据求值。下面是我的代码,是用syms定义后,先进行积分,之后再带入数据算;但是这种方法,多项式n的阶数一多,到30多阶级,慢慢编写就会很麻烦,而且会频繁变更阶数,有没有什么办法能快速对算出来的多项式进行积分,再求值。
或者有什么办法把我的syms下面的int简化下(for循环能用在syms里面吗),而不是这种一个一个把函数写出来,

clc
clear;
X=xlsread('Berthold.xlsx')
X=X(:,1);
H=histogram(X,'Normalization','probability');
n=2;%多项式阶数
x = (H.BinEdges(1:end-1)+H.BinEdges(2:end))/2;
y = H.Values; 
p = polyfit(x,y,n);
f1 = polyval(p,x);%直接求的值
syms z
f2=int(p(:,1)*z.^2+p(:,2)*z+p(:,3))
subs(f2,z,x)%对多项式积分后的值

这个应该避免符号运算,直接根据定积分的那个定义来求。(好像不能用markwdown来写公式。。。)
就是说,如果把积分上下限a和b分成M份,然后用求和的方式来得到积分的值,如果M足够大,那对于每一小份,不论取区间中哪一点的函数值,最终结果都应该一样。比如说,对于x_i和x_(i+1)这一个区间,不论你用f(x_i)还是f(x_(i+1))来求这一小段的面积,对最终的计算结果影响都不大。
假设你的表达式是f(x),积分上下限是a 和b; error_int是你想实现的精度
Matlab code:
error_int=1e-6;
err=10;
M=1000;
while err > error_int
x=[a:(b-a)/M:b];
y=f(x); % 这一步就是生成对应的函数值,如果是符号,好像得用eval这种
int_result=sum(y(2:end)) *(b-a)/M;
err=abs(sum(y(2:end))-sum(y(1:end-1))) (b-a)/M; % 不知道为啥 乘号显示不出来
M=M
10; % M=M乘以10 不知道为啥 乘号显示不出来
end

符号运算也是可以用到循环里面的,但是太慢了,除非特殊情况,不然都不建议放到循环里面的,可以采用先转换成句柄函数,然后再代入数据,最后再转成符号运算