在MATLAB中对匿名函数的操作

时间:2015-04-09 16:09:10

标签: matlab

我的代码用于使用Haar小波逼近不同近似水平的函数。但是当我尝试使用公式计算错误时 squareroot(积分(squareof(u(t)-uk(t))))超过0到1的限制 其中u(t)是要近似的函数f       uk(t)是直到k项的函数的Haar近似 但是由于某些流氓matlab操作,我无法正确计算错误。这是我的代码。 phi的代码是

function a=phi(x)
if(0 <= x & x< 1)
a=1;
else
a=0;
end

function approxx(j)
f=@(x)sin(x);
b=@(j,t,k)phi((power(2,j)*t)-k);
a=@(x,j,k)(f(x).*b(j,x,k));

sum=@(x)0;
for k=0:power(2,j)
   ak=integral(@(x)a(x,j,k),power(2,-j)*k,power(2,-j)*(k+1));
   c=@(x)ak*power(2,j)*phi((power(2,j)*x)-k);
   sum=@(x)(sum(x)+c(x));    
end
fplot(f,[0,1],'r');hold on;
fplot(sum,[0,1]);

er=power(integral(@(x)power(f(x)-sum(x),2),0,1),0.5);
disp(er);
end

1 个答案:

答案 0 :(得分:1)

您的函数phi未正确矢量化。

电话

integral(@(x)power(f(x)-sum(x), 2), 0, 1)

使用向量化积分方法计算积分,即它评估向量的函数而不是单个值。 sum(x)对于向量x = linspace(0,1,100)但是返回单个double值而不是长度为100的向量.MATLAB认为您要从向量sum(x)==0中减去单个双值f(x)并且不会抛出错误,而是计算错误的值。

您应该使用正确的矢量化版本替换phi

function a=phi(x)
a = double(0<=x & x<1);
end

BTW:考虑直接计算值而不是使用嵌套的匿名函数。对于大范围的嵌套,这些将变得非常慢。 sum也是一个内置函数;你应该避免命名像内置插件这样的变量。