具有积分2,双精度,符号和点计算的问题

时间:2014-12-27 04:44:05

标签: matlab integration

我在这里有2个问题。 1.如果我有y = a * x ^ 2 + 5.什么函数可以使它成为y = a。* x。^ 2 +5。如您所见,插入了点。

  1. 这很简单,但有点难以描述,但请耐心等待我。非常感谢。 首先,让我举一个非常简单的问题示例。 如果我想要计算Y = F(x = 1) + 2. ^ 2,我知道 F(x = 1) = a + b,(a和b是syms)。这意味着Y = a + b + 4.问题出在这里, 如果我写下来,Matlab会给我错误。

    F =功能(....); < ====函数的输出是F(X = 1),并且= F(x = 1) = a + b Y =整数2(F + 2. ^ 2,..,..,..) 但是,如果我只是将F的输出复制为 Y =整数2(a + b + 2. ^ 2,..,..,..) 现在它有效!!!

  2. 确定。请允许我在这里谈谈我的代码。我试图通过使用integral2找到双重交互。我的equcation的一部分(即Y)来自另一个int输出(即F)。 Matlab将为以下代码提供 ERROR

       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. 
    

    然而,因为我知道out1 = pi / 4 - atan(10 *(u2 ^ 2 / u1 ^ 2 + 1)^(1/2))/ 2(没有点,1/2,不是1。 / 2)。我只需输入equaction并在

    中添加点,而不是写下out1
      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))  );    
    

    现在代码正在运行!!!!最终输出= 0.9957。 亲爱的朋友们,我已经花了很长时间在这上面,但我还是找不到问题所在。你能不能深入了解我。请将代码复制到matlab并进行测试。非常感谢。

    下面是matlab给出的错误,如果我只是在yi = @(u2,u1)中使用“out1”......

      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 in
      integral2Calc>@(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 in
      integral2Calc>@(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)
    

1 个答案:

答案 0 :(得分:0)

函数integral2的文档说明:

  

integral2 - 数值评估双积分

除非使用matlabfunction将它们转换为函数句柄,否则您无法将integral2用于符号表达式。