2014年建模全国大赛

来源:互联网 发布:js获取当前服务器地址 编辑:程序博客网 时间:2024/04/24 13:11

之前为了参加建模比赛,学习了一下matlab。以这篇为开端,以后会继续通过原创或转载来分享matlab的各种各种知识技巧。

作为开篇这里介绍一下我们建模比赛的情况。建模比赛是三人或以下为一个团队进行的,我在团队中主要负责编程作图,运用团队中其余两人推导获得的公式,通过matlab将其实现出来。

这次全国比赛我们组选择了解答B题,主要内容是建立数学模型分析一张创意平板折叠桌打开的动态过程:



在比赛进行的第二天在淘宝上已经有人出售分析这张桌子动态过程的matlab图和源代码,但是我们坚决认为我们能做得比他们都棒。

最后我们当然还是做出来了,以下是我们组的matlab图(半边桌子的示意图),本来是gif但是不会动。。。所以放出初始状态和最终状态吧


蓝色是桌脚,粉红色是钢筋轴。

代码如下:

clear clc close all;R = 23.5;D = sqrt(R^2 - 22.5^2);Theta = 70*pi/180;for n = 1:1:19    phi = acos((25 - 2.5*n)/R);    ln = 60- sqrt(R^2 - (25-2.5*n)^2)-0.1;    y = R*cos(phi);    x1 = D+cos(Theta)*(60-D)/2;    y1 = y;    z1 =-sin(Theta)*(60-D)/2;    x2 = R*sin(phi);    y2 = y;    z2 = 0;        Dn = sqrt((x1 - x2)^2 + (y1 - y2)^2 + (z1 - z2)^2);    x3 = x2 + (x1 - x2)*ln/Dn;    y3 = y2 + (y1 - y2)*ln/Dn;    z3 = z2 + (z1 - z2)*ln/Dn;        lc = Dn - (ln - 53.1177/2);    shuchu(1,n) = ln;    shuchu(2,n) = Dn;    shuchu(3,n) = lc;        foot(n,1) = x3;    foot(n,2) = y3;    foot(n,3) = z3;        plot3([x3 x2], [y3 y2], [z3 z2], 'linewidth', 5);    hold on;end % curveY = -24 : 24;% [cY,cZ] = meshgrid(curveY, 0);% curveX = 0.0194*cY.^2 - 0.0019*cY + 11.6346;% plot3(curveX, cY, cZ);% [cX,cY] = meshgrid(0, curveY);% curveZ = -0.0304*cY.^2 - 34.7874;% plot3(cX, cY, curveZ);% curveZ = -60 : 0;% [cZ,cY] = meshgrid(curveZ, 0);% curveX = 0.0663*cZ.^2 + 4.9021*cZ + 103.4351;% plot3(curveX, cY, cZ,'r');axis([0 60 -30 30 -60 0]);view(-15, 30);plot3([x1 x1], [-30 30], [z1 z1], 'm', 'linewidth', 3);grid on;xlabel( 'x');ylabel( 'y');zlabel( 'z');title('θ = 70 时刻');
代码画出来的是静态图,根据Theta角度数值的改变,分别画出不同状态下的桌子(Theta是最外侧桌脚与地面的夹角)。注释掉的部分是桌脚边缘线投影到各个面的曲线。

代码编写其实不难,难就难在推导公式,我只是利用公式在matlab中画出了示意图而已。

想了解我们团队的数学模型和其他部分代码我们可以私下交流,有关matlab的问题我们也可以一起探讨。

0 0
原创粉丝点击