Hey guys.
The problem is the following: I have a (quiet complicated) function f(x,y,z) and want to integrate it over x and y to later plot the result versus z. I have seen the existing question about getting a symbolic function of z after the two integrations but that does not help me: my function is not separable. I also don't need an explicit function of z as I just want to plot the 2d integral against z.
I tried "int" which gives the error: undefined function 'int' for input arguments of type 'function handle';
"quad2d" giving: A must be a finite, scalar, floating point constant; and "integral2" giving me millions of errors.
Any ideas? I would really appreciate it!
clf reset;Delta_inf=1.227;omega = 0:1/100:7*Delta_inf;Delta_i = 1.35;beta = 2.00;epsilon_f = 9479;f_R1 = @(epsilon_1) 1./((Delta_inf-epsilon_1).*sqrt((epsilon_1-epsilon_f).^2+Delta_i.^2));f_R2 = @(epsilon_2) 1./((-Delta_inf-epsilon_2).*sqrt((epsilon_2-epsilon_f).^2+Delta_i.^2));f_1 = integral(f_R1,-Inf,Inf);f_2 = integral(f_R2,-Inf,Inf);syms epsilon_1 epsilon_2E_1 = sqrt(epsilon_1.^2+Delta_inf.^2);E_2 = sqrt(epsilon_2.^2+Delta_inf.^2);N_1 = ((epsilon_1-epsilon_f)*f_1+beta).^2+(Delta_i*f_1).^2+pi.*pi;N_2 = ((epsilon_2-epsilon_f)*f_2+beta).^2+(Delta_i*f_2).^2+pi.*pi;gamma_1 = -sqrt(1-(N_1-sqrt(N_1.^2-(2.*pi.*Delta_i.*beta./E_1).^2))./(2.*pi.*pi));gamma_2 = -sqrt(1-(N_2-sqrt(N_2.^2-(2.*pi.*Delta_i.*beta./E_2).^2))./(2.*pi.*pi));resa = @(epsilon_1, epsilon_2) (gamma_1+gamma_2).*(1-Delta_inf./(E_1.*E_2)).*(dirac(omega+E_1+E_2)-dirac(omega-E_1-E_2));intresa = quad2d(resa,-Inf,Inf,-Inf,Inf);resb = @(epsilon_1,epsilon_2) (gamma_1-gamma_2).*(1+Delta_inf./(E_1.*E_2)).*(dirac(omega+E_1-E_2)-dirac(omega-E_1+E_2));intresb = quad2d(resb,-Inf,Inf,-Inf,Inf);Realsigmaa = 1./(8.*omega).*intresa;Realsigmab = 1./(8.*omega).*intresb;xaxis = omega./Delta_inf;Realsigma = Realsigmaa+Realsigmab;plot(xaxis, Realsigma);
the quad2d error:
Error in integral2 (line 106) Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);Error in untitled (line 27)intresa = integral2(resa,-Inf,Inf,-Inf,Inf);
The int error:
Undefined function 'int' for input arguments of type 'function_handle'.Error in Versuch (line 28)intresa = int(resa,-Inf,Inf,-Inf,Inf);
the integral2 error:
Error using integralCalc/finalInputChecks (line 522)Input function must return 'double' or 'single' values. Found 'sym'.Error in integralCalc/iterateScalarValued (line 315) finalInputChecks(x,fx);Error in integralCalc/vadapt (line 132) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);Error in integralCalc (line 103) [q,errbnd] = vadapt(@minusInfToInfInvTransform,interval);Error in integral2Calc>@(xi,y1i,y2i)integralCalc(@(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions) (line 17)innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc( ...Error inintegral2Calc>@(x)arrayfun(@(xi,y1i,y2i)integralCalc(@(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions),x,ymin(x),ymax(x))(line 17)innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc( ...Error in integralCalc/iterateScalarValued (line 314) fx = FUN(t);Error in integralCalc/vadapt (line 132) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);Error in integralCalc (line 103) [q,errbnd] = vadapt(@minusInfToInfInvTransform,interval);Error in integral2Calc>integral2i (line 20)[q,errbnd] = integralCalc(innerintegral,xmin,xmax,opstruct.integralOptions);Error in integral2Calc (line 7) [q,errbnd] = integral2i(fun,xmin,xmax,ymin,ymax,optionstruct);Error in integral2 (line 106) Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);Error in Versuch (line 28)intresa = integral2(resa,-Inf,Inf,-Inf,Inf);
Best Answer