找回密码
 注册
Simdroid-非首页
查看: 54|回复: 1

请大家帮我看下我的MATLAB卷积分问题出在哪里?谢谢!

[复制链接]
发表于 2016-1-6 10:44:43 | 显示全部楼层 |阅读模式 来自 四川绵阳
本帖最后由 hawaii 于 2016-1-6 10:50 编辑

用MATLAB自带卷积分函数计算弹性半空间在一三角脉冲荷载下自由表面的竖向位移,与文献正确结果相差10的5次方倍,但自己编写卷积分代码,反而得到文献结果。请大家帮我看下问题出在哪?谢谢!

另外,为何MATLAB自带卷积分函数结果矩阵的维数会是被卷积两矩阵维数之和减1?

1. 问题描述,如下图1所示:



2. 格林函数,如下图2所示:



3. 参考文献正确解,如下图3所示:



4. 本人直接用自编卷积分MATLAB代码算的出解(如下图4)及相应代码:



clear;
clc;

%loading history

dt=0.01;
ti=0.0008;
te=12;
t=ti:dt:te;
pt=(10*t./1.5).*(t>=0 & t<=1.5)+(20-10*t./1.5).*(t>1.5 & t<=3)+0.*(t>3);
m=length(pt);

%load distribution in space

rp=0.1;
ri=0;
rc=0.1;
dr=0.001;
r=ri:dr:rc;
pr=1*(r<=rp)+0*(r>rp);
n=length(pr);

%load function with respect to t and r

p=pr.'*pt;

%green's function

G=1;
cs=1;
for i=1:1:m
  for j=1:1:n
    u(j,i)=heaviside(cs*t(i)-r(j))/(pi*G*sqrt(t(i)^2-(r(j)/cs)^2));
  end
end

%convolution and response of displacement

for i=1:1:m
  for j=1:1:n
    v(j,i)=0;
    for k=1:1:i
      for g=1:1:j
        v(j,i)=v(j,i)+p(g,k)*u(j-g+1,i-k+1)*dr*dt;
      end;
    end;
  end;
end;

%plot the response history

plot(t,v(n,);
xlabel('t/s');
ylabel('v/m');
grid on;
title('response of point A or C');

5. 直接用MATLAB自带卷积分算的出解(如下图5)及相应代码:



clear;
clc;

%loading history

dt=0.01;
ti=0.0008;
te=12;
t=ti:dt:te;
pt=(10*t./1.5).*(t>=0 & t<=1.5)+(20-10*t./1.5).*(t>1.5 & t<=3)+0.*(t>3);
m=length(pt);

%load distribution in space

rp=0.1;
ri=0;
rc=0.1;
dr=0.001;
r=ri:dr:rc;
pr=1*(r<=rp)+0*(r>rp);
n=length(pr);

%load function with respect to t and r

p=pr.'*pt;

%green function

G=1;
cs=1;
for i=1:1:m
  for j=1:1:n
    u(j,i)=heaviside(cs*t(i)-r(j))/(pi*G*sqrt(t(i)^2-(r(j)/cs)^2));
  end
end

%convolution and response of displacement

v=conv2(u,p);

%plot the response history

rr=r(n);
[tpu,rpu]=meshgrid(ti:dt:2*te-dt,ri:dr:2*rc);
[X,Y,Z]=meshgrid(linspace(min(tpu(),max(tpu()),linspace(min(rpu(),max(rpu()),linspace(min(v(),max(v()));
V=Y;
h=contourslice(X,Y,Z,V,tpu,rpu,v,[0 0]+rr);
set(h,'edgecolor','k');
contourslice(X,Y,Z,V,tpu,rpu,v,[0 0]+rr);
xlabel('t/s');
ylabel('r/m');
zlabel('v/m');
axis([0 12 0 0.1 0 12e4]);
view(0,0);
grid on;
title('displacement response history of point A or C');

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2016-1-19 14:26:22 | 显示全部楼层 来自 台湾
Simdroid开发平台
dr*dt不就是10^-5
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Simapps系列直播

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-9-30 08:26 , Processed in 0.031674 second(s), 10 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表