用C++研究瞬变体系

一个几何可变体系发生微小位移后,成为几何不变体系,称为瞬变体系。如上图是最简单的瞬变体系。如果在中间的节点上加一个很小的力,就会在拉杆内产生很大的拉力,容易使拉杆破坏。那么当节点上的力为F 时,拉杆的内力为多大?下面用excel 和microsoft visual C++6.0来解决这个问题。

第一步要列方程。

根据力的平衡:2T sin θ=F 根据变形协调条件:cos θ=l l 11EA ====T T +EA T +EA ∆+l TL +l +1EA EA EA

根据sin θ+cos θ=1,可得: 22

E 2A 2F 2

+=1, T +EA 24T 2

化简得:

4T 4+8EAT 3-F 2T 2-2EAF 2T -E 2A 2F 2=0。

单位是:

T ——N A ——mm 2 E ——N/mm2

令a=4 b=8EA c=-F2 d=-2EAF2 e=-E2A 2F 2

可把方程简化为

aT 4+bT 3+cT 2+dT +e =0。

第二步就是把T 、E 、A 、F 的值输入到excel 里,给T 一个范围,求出f(T)来,f (T )=aT 4+bT 3+cT 2+dT +e ,并做f(T)—T 图。其目的是观察方程有个根,它在什么位置上。如图1所示。

通过观察发现这类问题虽然方程是一元四次方程,但只有一个根。我们可以非常容易地知道这个根在什么位置,然后用迭代法把根求出来。

图1 excel 截图

第三步是用microsoft visual C++6.0来计算拉杆的内力。

#include

#include

#define E 200000//弹性模量

#define A 100//截面积

#define F 4310//节点荷载

void main()

{

a=4; b=8*E*A; c=-(F*F); printf("d="); scanf("%lf",&d); printf("e="); scanf("%lf",&e); double x0,x1,f0,f1,stress;//x0,x1,f0,f1是迭代法工具,stress 是应力值。 long double a,b,c,d,e;//a,b,c,d,e是构成方程的系数 int n=0;//用n 来观察迭代次数,仅对编程有意思,对研究的问题没有实际意义

if(fabs((a*x1*x1*x1*x1+b*x1*x1*x1+c*x1*x1+d*x1+e)/(4*a*x1*x1*x1+3*b*x1*x1+printf("the tension of the rod is %.2fN\n",x1); printf("n=%d\n",n); do { x0=x1; f0=a*x0*x0*x0*x0+b*x0*x0*x0+c*x0*x0+d*x0+e; f1=4*a*x0*x0*x0+3*b*x0*x0+2*c*x0+d; x1=x0-f0/f1; n++; printf("input a number to start\n"); printf("x1="); scanf("%lf",&x1); printf("the function is\n"); printf("%.0f*x*x*x*x+%.0f*x*x*x+%.0f*x*x+%.0f*x+%.0f=0\n",a,b,c,d,e); printf("\n\n\n\n"); //导数=4*a*x*x*x+3*b*x*x+2*c*x+d printf("a=%.0f\nb=%.0f\nc=%.0f\nd=%.0f\ne=%.0f\n",a,b,c,d,e); }while(fabs(x0-x1)>1e-6); 2*c*x1+d))

else printf("sorry, you need to try again\n"); printf("congratulation! The answer is right!\n"); printf("\n\n\n\n");

}

按图1的数据所得的计算结果为

//输出应力值 stress=x1/A; printf("stress=%.2fMPa\n",stress); if(stress

图2 计算结果

用这种方程可以克服一元四次方程求解带来的困难,进一步研究我们发现,当材料的弹性模量为200000N/mm2,截面面积为100mm 2,荷载为4310N 时,拉杆里的应力达到

360N/mm2。而如果沿轴向拉同样一根杆的时候,需要36000N 时才能达到许用应力。为前者的8.35倍。考虑到瞬变体系是由两根杆组成,瞬变体系材料的利用效率仅为1/17。


© 2024 实用范文网 | 联系我们: webmaster# 6400.net.cn