Dear friends, I got 2 questions here. 1. If I have y = a*x^2 + 5. What function can make it into y = a.*x.^2 +5. As you seen, dot was inserted.
2. It's easy, but kinda diffcult to describe, but please have patience with me. Thank you so much. First, let me make a very simple example of my problem. If I want to calucate Y = F(x=1)+ 2.^2, and I know F(x=1) = a+b,(a and b are syms). This means Y = a + b + 4. Problem is here, Matlab give me error if I write down as.
F = function( .... ); <==== output of function is F(X=1), and = *F(x=1)* = a+b Y = integral2( F + 2.^2, .. , .. ,..)However, if I just copy the output of F as Y = integral2( a+b + 2.^2, .. , .. ,..)Now it works!!!
Ok. Please allow me to talk about my code here. I am trying to find a double interation by using integral2. One part of my equcation(which is Y) is from another int output(which is F). Matlab will give ERROR for code below:
clear all; a=4; la1=1/(pi*500^2); la2= la1*5;p1=25; p2=p1/25;sgma2=10^(-11);index=1;g=2./a;syms r u1 u2 powe= -2 ; seta= 10^powe;xNor = ( (u2./u1).^(a./2) + 1 ).^(2./a);x = (xNor).^(0.5) * seta^(-1/a); fun1 = r./(1+ r.^a ); out1 = int(fun1, x, Inf) ; %== This is my F in my example
q=pi.*(la1.*p1.^(2./a)+la2.*p2.^(2./a));yi = @(u2,u1) exp(-u2.*(1+2.*... ( out1 )./... %=== out1 is the problem here. ( (( (u2./u1).^(a./2) + 1 ).^(2./a)).*seta.^(-2./a)))).*... exp(-sgma2.*q.^(-a./2).* seta.*u2.^(a./2)./... ((( (u2./u1).^(a./2) + 1 ).^(2./a)).^(a./2)) ); maxF =@(u2) u2;out2 = integral2(yi,0,Inf,0 ,maxF) % == this is Y in my previous example.
However, since I know the out1 = pi/4 – atan(10*(u2^2/u1^2 + 1)^(1/2))/2 (no dot,1/2, not 1./2). Instead of writing down out1, I will just type the equaction and add dot in the
yi = @(u2,u1) exp(-u2.*(1+2.*...( pi./4 - atan(10.*(u2.^2./u1.^2 + 1).^(1./2))./2 )./... %===not "out1" ( (( (u2./u1).^(a./2) + 1 ).^(2./a)).*seta.^(-2./a)))).*... exp(-sgma2.*q.^(-a./2).* seta.*u2.^(a./2)./... ((( (u2./u1).^(a./2) + 1 ).^(2./a)).^(a./2)) );
Now the code is working!!!! The final output is = 0.9957. Dear friends, I already spend a long time on this, but I still can not find out the problem. Could you please take a deeper look for me. Please copy the code to you matlab and test. Thank you so much.
Below is the error given by matlab, if I just use "out1" in yi = @(u2,u1) ……
Error using integralCalc/finalInputChecks (line 511)Input function must return 'double' or 'single' values. Found 'sym'.Error in integralCalc/iterateScalarValued (line 315) finalInputChecks(x,fx);Error in integralCalc/vadapt (line 133) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);Error in integralCalc (line 76) [q,errbnd] = vadapt(@AtoBInvTransform,interval);Error inintegral2Calc>@(xi,y1i,y2i)integralCalc(@(y)fun(xi*ones(size(y)),y),y1i,y2i,opstruct.integralOptions)(line 18)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 18)innerintegral = @(x)arrayfun(@(xi,y1i,y2i)integralCalc( ...Error in integralCalc/iterateScalarValued (line 314) fx = FUN(t);Error in integralCalc/vadapt (line 133) [q,errbnd] = iterateScalarValued(u,tinterval,pathlen);Error in integralCalc (line 84) [q,errbnd] = vadapt(@AToInfInvTransform,interval);Error in integral2Calc>integral2i (line 21)[q,errbnd] = integralCalc(innerintegral,xmin,xmax,opstruct.integralOptions);Error in integral2Calc (line 8) [q,errbnd] = integral2i(fun,xmin,xmax,ymin,ymax,optionstruct);Error in integral2 (line 107) Q = integral2Calc(fun,xmin,xmax,yminfun,ymaxfun,opstruct);Error in ref7_equ11n2 (line 129) out2 = integral2(yi,0,Inf,0 ,maxF)
Best Answer