integral2、Double、Syms 和 Dot 计算的问题

问题描述 投票:0回答:1

我有两个问题。 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 是 sym)。这意味着 Y = a + b + 4。问题就在这里, 如果我写成,Matlab 会给我错误。

    F = 函数( .... ); <==== output of function is F(X=1), and = F(x=1) = a+b Y = 积分2( F + 2.^2, .. , .. ,..) 但是,如果我只是将 F 的输出复制为 Y = 积分2(a+b + 2.^2, .. , .. ,..) 现在可以了!!!

好的。请允许我在这里谈谈我的代码。我正在尝试使用积分2 来找到双重交互。我的方程的一部分(即 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 )。我不会写出 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)
matlab numerical-integration
1个回答
0
投票

函数

integral2
的文档指出:

integral2 - 以数值方式评估二重积分

您将无法将

integral2
与符号表达式一起使用,除非您使用 matlabfunction 将它们转换为函数句柄。

© www.soinside.com 2019 - 2024. All rights reserved.