sigma665 发表于 2011-5-4 15:02:34

用一个M积分函数文件,怎么求出多个积分值


function Q=jifen (t)
A=t.^2;
B=log(t);
C=t;
D=1./t;
y1=A+B;
y2=C+D;
Q=y1;
end
quadgk(@jifen,0,1)

问题是我需要y1 y2 的积分, quadgk只能求一个。quadv可以求多个,但是有奇异,所以想用quadgk来算。

我是想用简洁的方法,用quadgk一下算出多个积分值。

qibbxxt 发表于 2011-5-4 16:07:12

可以用arrayfun来做啊

sigma665 发表于 2011-5-4 17:11:05

2# qibbxxt
具体怎么做?

sigma665 发表于 2011-5-5 09:45:39

function Q1 = jifen_10(tt)
      x=(X1+X2)/2+tt.*(X2-X1)/LL; %当前积分边界的坐标
      y=(Y1+Y2)/2+tt.*(Y2-Y1)/LL;
               
      zp=XP+s.*YP;% 当前力作用点坐标
      =ChooseMain(zp(1),zp(2),s,aa,bb,1);
      
      z1=x+s(1).*y; %z关于t的表达式
      z2=x+s(2).*y;   
      =ChooseMain(z1,z2,s,aa,bb,1);
      
      phi1=A(1,1)*log(R(1).*(kesi1-kesi0(1)))+L(1)*conj(A(1,1)).*log(1-1./(conj(kesi0(1)).*kesi1))...
            +N(2)*conj(A(1,2)).*log(1-1./(conj(kesi0(2)).*kesi1));
      phi2=A(1,2)*log(R(2).*(kesi2-kesi0(2)))+L(2)*conj(A(1,2)).*log(1-1./(conj(kesi0(2)).*kesi2))...
            +N(1)*conj(A(1,1)).*log(1-1./(conj(kesi0(1)).*kesi2));
      
      dz1=R(1)-R(1)*m(1)./kesi1.^2;
      dz2=R(2)-R(2)*m(2)./kesi2.^2;
      
      d_phi1=A(1,1)./(kesi1-kesi0(1))./dz1+conj(A(1,1))*L(1)./(kesi1.^2*conj(kesi0(1))-kesi1)./dz1+...
            conj(A(1,2))*N(2)./(kesi1.^2.*conj(kesi0(2))-kesi1)./dz1; %对z求导
      d_phi2=A(1,2)./(kesi2-kesi0(2))./dz2+conj(A(1,2))*L(2)./(kesi2.^2*conj(kesi0(2))-kesi2)./dz2+...
            conj(A(1,1))*N(1)./(kesi2.^2.*conj(kesi0(1))-kesi2)./dz2; %对z求导

      u11=2*real(p(1).*phi1+p(2).*phi2); %关于t的表达式
      u21=2*real(q(1).*phi1+q(2).*phi2);
      
      sigma11=2*real(s(1)^2*d_phi1+s(2)^2*d_phi2);% 应力
      sigma22=2*real(d_phi1+d_phi2);
      sigma12=-2*real(s(1)*d_phi1+s(2)*d_phi2);
      p11=sigma11*e1+sigma12*e2;% 边界力
      p21=sigma12*e1+sigma22*e2;
   
      Q1= [u11 p11;
             u21 p21];

    end需要对 u11 p11 u21 p21积分,用quadv(@jifen_10,-1,0,1e-8)可以算,但是涉及到奇异积分。
请问怎么用quadgk能简介的求出,而不需要各个重新编写M函数文件?

matlab1234 发表于 2011-5-8 23:18:01

可以再加一个参数就好:
QQ:1759553924
专业数值计算
页: [1]
查看完整版本: 用一个M积分函数文件,怎么求出多个积分值