大学数值计算matlab编程:用复合梯形公式积分,达到精度0.5*10^-8给出所需区间数量。请问程序哪里有问题

原题为:
输入指令fun=@(x)(x./sqrt(x.*x+9));function[I,number]=ftrapz(fun,0,1)后报错“上下文不允许函数定义”
function [I,number]=ftrapz(fun,a,b)
format long
f=int(fun,a,b);
I=0;
n=100;
while(abs(I-f)>(1/2)*10^-6)
h=(b-a)/n;
x=linspace(a,b,n+1);
y=feval(fun,x);
I=h*(0.5*y(1)+sum(y(2:n))+0.5*y(n+1));
n=n+1;
end
number=n;

你这里错在调用自定义函数的时候不需要关键字function,将其去掉则不会有这个错误提示

不过看你的代码依旧存在问题:

    f=int(fun,a,b); 这一行要求fun为符号类型的变量,而你给的 fun=@(x)(x./sqrt(x.*x+9)); 却是函数句柄,那么这一句就会报错。

    另外,这个代码试图通过int()积分得到精确值,然后比较数值积分的误差是否不超过0.5*10^-8,这就存在一个逻辑错误,如果这个被积函数不可积(这也正是采用数值积分的目的所在),那你就无法得到原函数进行判断了。所以正确的做法是比较两次计算值,如果两次计算值的误差小于0.5*10^-8,表明积分收敛了,这正是其计算精度。

温馨提示:答案为网友推荐,仅供参考
相似回答