1. Trang chủ
  2. » Luận Văn - Báo Cáo

giải phương trình vi phân chuyển động của cơ hệ

16 608 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 16
Dung lượng 3,77 MB

Nội dung

Chính vì thế, “đồ án tin học trong cơ khí” là môn học quan trọng và cần thiết đối với sinh viên ngành cơ tin kỹ thuật, nó giúp cho sinh viên làm quen với công việc lập trình bằng máy tín

Trang 1

Lời nói đầu

Trong vài chục năm trở lại đây, với sự ra đời của máy tính, Khoa học kỹ thuật đã có những bớc phát triển mạnh mẽ Nhờ có máy tính, con ngời có thể giải quyết các bài toán phức tạp với khối lợng tính toán lớn mà trớc đây không thể thực hiện đợc Trong ngành cơ khí nói chung và cơ học nói riêng, máy tính cũng đóng vai trò rất quan trọng Ta có thể sử dụng máy tính để khảo sát các hệ cơ học có cấu trúc phức tạp với các phép tính có khi lên tới hàng nghìn,hàng vạn Chính vì thế, “đồ án tin học trong cơ khí” là môn học quan trọng và cần thiết đối với sinh viên ngành cơ tin kỹ thuật, nó giúp cho sinh viên làm quen với công việc lập trình bằng máy tính để tính toán thiết kế trong cơ khí và dễ dàng tiếp cận công việc khi ra trờng.

Đề tài của em là giải phơng trình vi phân chuyển động của cơ hệ gồm các phần:

Phần I: Giới thiệu về hệ phơng trình vi phân cấp một và hệ phơng trình vi phân cấp cao áp dụng cho các bài toán cơ học.

Phần II: Mô tả về cấu tạo của con lắc eliptic và thiết lập phơng trình vi phân chuyển động của con lắc.

Phần III: Là phần viết chơng trình để giải quyết bài toán về hệ phơng trình vi phân cấp một và cấp hai Chơng trình này gồm có 2 module

Molule1: Giải hệ phơng trình vi phân cấp 1 bằng phơng pháp RUNGE_KUTTA Module2: Giải hệ phơng trình vi phân cấp 2 và áp dụng cho cơ hệ con lắc ELIPTIC.

Mục đích của đề tài nhằm khảo sát các chuyển động của 1 cơ hệ nào đó về vị trí, vận tốc …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ a ra nhận xét Cuối cùng, em xin gửi lời cảm ơn tới thầy đinh văn phong ngời đã tận tình hớng dẫn và cho những ý kiến quí báu giúp em hoàn thành đồ án này.

Hà Nội ngày 27/10/2002

Sinh viên Phạm Tuấn Long

Trang 2

Phần thuyết minh I/ Giải gần đúng hệ phơng trình vi phân thờng bằng phơng pháp RUNGE_KUTTA

Xét hệ gồm n phơng trình vi phân cấp 1

y’

1= f1(x,y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn)

y’

2= f2(x,y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn) (1)

…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ

y’

n= fn(x,y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn) Với y1, y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ , yn đều là các hàm số của x: yi=yi(x) i =1,2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,n

Ta có thể viết gọn lại nh sau:

y’

i= fi(x,y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn) Với các điều kiện đầu:

yi(x0)=yi0

i =1,2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,n

Ta có thể viết dới dạng ma trận:

y= f(x,y)

Với các điều kiện đầu:

y(x0) = y0

Trong đó:

y = [y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn]T

y’= [y’

1, y’

2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ , y’

n]T

f = [f1, f2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ , fn]T

Để giải hệ trên ta có nhiều phơng pháp tuy nhiên ở đây ta sử dụng phơng

pháp RUNGE_KUTTA

Biểu thức hồi quy cho phơng pháp RUNGE_KUTTA

r điểm đợc viết nh sau:

zi+1 = z1 + h(pr1k1 + pr2k2 + …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ + prrkr ) Với

k1 = f(xi,zi)

k2 = f(xi + h, zi + hk1)

…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ

kr = f[xi + r h, zi + h(r1k1 + r2k2 + …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ  + r,r-1kr-1)]

Trong đó prm, m = 1,2 …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,r và m,mj, m = 2,3, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,r và j = 1,2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ , r-1 là các hằng số đợc xác định tuỳ theo từng phơng pháp.

Phơng pháp RUNGE_KUTTA là phơng pháp một nút vì để tính giá trị của nút sau chỉ cần tính giá trị của nút trớc đó.

Phơng pháp hay dùng nhất là phơng pháp một nút 4 điểm với độ chính xác cao vì quá trình tính toán tơng đối đơn giản.

Sơ đồ của phơng pháp RUNGE_KUTTA một nút 4 điểm đợc viết nh sau:

yi+1= yi + h(k1+ 2k2 + 2k3 + k4)/6 Với

k1= f(xi,yi)

k2= f(xi+h/2,yi+hk1/2)

k3= f(xi+h/2,yi+hk2/2)

k4= f(xi+h,yi+hk3) Trong các vấn đề kỹ thuật ta còn gặp bài toán ở dạng phơng trình vi phân cấp cao:

y(n)= f(x,y,y’,y’’, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,y(n-1)) (2a) với các điều kiện đầu:

y(i)(x0) = yi0 i = 0,1,2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,(n-1) (2b) Trong đó ta ký hiệu y(i) là đạo hàm cấp i của y hàm số y = y(x)

Trang 3

y

m2

m1

Dễ dàng chuyển hệ (1) sang hệ 2 bằng cách đa ra:

y1= y, y2= y’, y3= y’’, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn= y(n-1)

Do đó ta có hệ phơng trình gồm n phơng trình vi phân cấp 1:

y1’ = y2

y2’ = y3

…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ

yn-1’ = yn

yn’ = f(x,y1,y2, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn) Với các điều kiện đầu:

y1(x0) = y0, y2(x0) = y10, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ…Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,yn(x0)=yn-1,0

Sau đó ta áp dụng phơng pháp RUNGE_KUTTA đối với hệ phơng trình vi phân cấp 1 để giải phơng trình trên.

II/ Phơng trình vi phân chuyển động của con lắc eliptic và cách giải bằng phơng pháp RUNGE_KUTTA

Con lắc eliptic là một cơ hệ gồm một lò xo có độ cứng c nối với vật có khối lợng m1 Vật có khối lợng m1 đợc nối với một chất điểm có khối lợng m2 không

đáng kể thông qua thanh dẫn có chiều dài l

Động năng của con lắc có dạng:

T = T1 + T2

Trong đó:

T1: Động năng của vật có khối lợng m1

T2: Động năng của con lắc khối lợng m2

T1 =

2

1

m1v1 =

2

1

m1

y 2

T2 =

2

1

m2v2 =

2

1

m2(x. 12 + y. 12 )

x1 = lcos(x. 1 = -lsin()φ.

y1 = y + lsin(  y. 1 = y. + lcos(φ.

 (x. 12 + y. 12 ) = l2sin2()φ. 2 + y. 2 + 2y. lcos(φ. + l2cos2(φ. 2

= l2

φ2 + y. 2 + 2y. lcos(φ.

 T=

2

1

(m1 + m2) y. 2 +

2

1

m2 (l2

φ2 + 2y. lcos(φ. )

Thế năng của cơ hệ:  = -m2glcos(

2

1

cy2

Theo định lý LAGRANGE II ta có:

.

i q

T dt

d

i

q

T

=

i

q

i= 1, …Qua đó vẽ đồ thị mô tả sự dao động của cơ hệ và đ ,n

.

y T

= (m1 + m2) y. + m2 lcos(φ.

Trang 4

.

y

T dt

d

= (m1 + m2) y - m2 lsin(φ. 2 + m2 lcos(φ

y

T

= 0,y = cy

.

φ

T

= m2l2

φ+ m2

y lcos(

.

φ

T dt

d

= m2l2

φm2

.

y lsin(φ. +m2 ly cos(

φ

T

= - m2

y lsin(φ. φ

= m2glsin(

Hệ phơng trình vi phân chuyển động của con lắc có dạng:

(m1+m2)y + m2lφ cos(m2lφ. 2sin( + cy = 0

m2ly cos(m2l2

φ+ m2glsin() = 0

Sử dụng các phép biến đổi toán học đa hệ phơng trình trên về dạng

y = (m2gsin(cos( + m2lsin(φ. 2- cx)/(m1 + m2sin2(

φ= (-cos(y - gsin(l

Để thuận tiện cho việc lập trình đặt

ff[1]=(m2gsin(y[3])cos(y[3])+m2lsin(y[3])y[4]y[4]–cy[1])/(m1+m2sin2(y[3]) ) ff[2] = (-cos(y[3])ff[1]-gsin(y[3])/l

f[1] = y[2]

f[2] = ff[1]

f[3] = y[4]

f[4] = ff[2]

III/ Phần chơng trình

Phần này nhằm giải hệ phơng trình vi phân cấp một và cấp 2 qua đó khảo sát cơ hệ con lắc eliptic Chơng trình đợc viết trên ngôn ngữ C.

#include "fstream.h"

#include"stdio.h"

#include"math.h"

#include"conio.h"

#include"graphics.h"

#include"dos.h"

#include"iostream.h

//****khoi tao do hoa****//

void khoitao()

{

int mh=0,mode=0;

initgraph(&mh,&mode,"d:\\tc\\bgi");

}

//****Module goi ham thu nhat****//

void dif(float x,float*y,float*f)

{

f[1]=0*x+y[2];

f[2]=(1-y[1]*y[1])*y[2]-y[1];

}

Trang 5

//*****Module goi ham thu hai*****//

void module2(float*ff,float*f,float*y,float x,float m1,float m2,float l,float g,float c)

{

ff[1]=(m2*g*cos(y[3])*sin(y[3])+m2*l*sin(y[3])*y[4]*y[4]-c*y[1])/( m1+m2*sin(y[3])*sin(y[3]));

ff[2]=(0*x-g*sin(y[3])-cos(y[3])*ff[1])/l;

f[1]=y[2];

f[2]=ff[1];

f[3]=y[4];

f[4]=ff[2];

}

//*****Ham lam tron so*****//

int round(float a)

{

if ((a-floor(a))>= 0.5) a=ceil(a);

if ((a-floor(a))< 0.5) a=floor(a);

return a;

}

//****Module giai he phuong trinh vi phan cap 1****//

void runge(float x,float h,int nstep,int n,float*y,float*f,

float*f1,float*f2,float*f3,float*f4,float*yy)

{

float ts,hh,tt,t1;

float p3[200],p4[200][4];

int i,j,xd,yd;

hh=0.5*h;

ts=x;

printf("bien x cac gia tri cua y");

for(i=1;i<=nstep;++i)

{

printf("\n %8.2f",x); p3[i]=x;

for(j=1;j<=n;++j) printf("%16.2f",y[j]);

for(j=1;j<=n;++j) p4[i][j]=y[j];

dif(x,y,f);

for(j=1;j<=n;++j) f1[j]=h*f[j];

tt=x+hh;

for(j=1;j<=n;++j) yy[j]=y[j]+0.5*f1[j];

dif(tt,yy,f);

for(j=1;j<=n;++j)

{

f2[j]=h*f[j];

yy[j]=y[j]+0.5*f2[j];

}

dif(tt,yy,f);

tt=x+h;

for(j=1;j<=n;++j)

{

f3[j]=h*f[j];

yy[j]=y[j]+f3[j];

}

dif(tt,yy,f);

x=ts+h*i;

for(j=1;j<=n;++j)

{

f4[j]=h*f[j];

y[j]=y[j]+(f1[j]+2*f2[j]+2*f3[j]+f4[j])/6;

Trang 6

}

if (i%22==0)

{

getch();clrscr();

}

}

printf("\n Nhan ENTER de xem do thi cua co he"); getch();

//***Doan chuong trinh ve do thi cua co he***// khoitao(); setbkcolor(15);

setcolor(1);

rectangle(4,4,633,475);

setcolor(8);

xd=getmaxx()/2;yd=getmaxy()/2;

line(xd-290,yd,xd+290,yd);

line(xd,yd+200,xd,yd-180);

line(xd+283,yd+3,xd+290,yd);

line(xd+283,yd-3,xd+290,yd);

line(xd+3,yd-173,xd,yd-180);

line(xd-3,yd-173,xd,yd-180);

setcolor(5);

outtextxy(xd+150,yd+150,"DRAWING ");

setcolor(1);

outtextxy(xd-8,yd+5,"O");

outtextxy(xd-30,yd-180,"x,v");

outtextxy(xd+288,yd+5,"t");

for(j=1;j<=n;++j)

for(i=1;i<=nstep;++i)

{

if(j==n) setlinestyle(1,1,1); else setlinestyle(0,1,1);

if(i==1) moveto(xd+round(25*p3[i]),yd-round(25*p4[i][j])); else lineto(xd+round(25*p3[i]),yd-round(25*p4[i][j]));

delay(20);

}

setcolor(1);

setlinestyle(0,1,1); line(xd+200,yd-155,xd+220,yd-155);

setlinestyle(3,1,1); line(xd+200,yd-140,xd+220,yd-140);

setcolor(0);

outtextxy(xd+150,yd+150,"DRAWING ");

setcolor(1);

outtextxy(xd+225,yd-160,"Vitri");

outtextxy(xd+225,yd-145,"Vantoc");

outtextxy(510,10,"PHAM TUAN LONG");

outtextxy(510,25,"CO TIN A-K43");

outtextxy(xd-120,yd-200,"DO THI MO TA DAO DONG CUA CO HE");

getch();

closegraph();

}

//****Module giai bai toan ap dung cho he co hoc****//

m,float*y,float*f,float*ff,

float*f1,float*f2,float*f3,float*f4,float*yy,

float m1,float m2,float l,float g,float c)

{

float ts,hh,tt,xd,yd;

float p1[200],p2[200][4];

int i,j,ii;

Trang 7

char*dso[]={"0","10","20","30","40","50","60","70","80","90","100" ,"110"};

char*dso1[]={"0","1","2","3","4","5"};

char*dso2[]={"0","-1","-2","-3","-4","-5"};

char*dso3[]={"0","-10","-20","-30","-40","-50","-60","-70","-80"}; hh=0.5*h;

ts=x;

ofstream kq("Ql");

printf(" bien x cac gia tri cua y");

for(i=1;i<=nstep;++i)

{

printf("\n %8.2f",x); p1[i]=x; kq<<x<<" ";

for(j=1;j<=m;++j)

{

if(j==3)

{

y[j]=y[j]*M_PI/180;

}

printf("%12.2f",y[j]); kq<<y[j]<< " ";

}

kq<<endl;

for(j=1;j<=m;++j)p2[i][j]=y[j];

module2(ff,f,y,x,m1,m2,l,g,c);

for(j=1;j<=m;++j) f1[j]=h*f[j];

tt=x+hh;

for(j=1;j<=m;++j) yy[j]=y[j]+0.5*f1[j];

module2(ff,f,yy,tt,m1,m2,l,g,c);

for(j=1;j<=m;++j)

{

f2[j]=h*f[j];

yy[j]=y[j]+0.5*f2[j];

}

module2(ff,f,yy,tt,m1,m2,l,g,c);

tt=x+h;

for(j=1;j<=m;++j)

{

f3[j]=h*f[j];

yy[j]=y[j]+f3[j];

}

module2(ff,f,yy,tt,m1,m2,l,g,c);

for(j=1;j<=m;++j)

{

f4[j]=h*f[j];

if(j==3) y[j]=(y[j]+(f1[j]+2*f2[j]+2*f3[j]+f4[j])/6)*180/M_PI;

else y[j]=y[j]+(f1[j]+2*f2[j]+2*f3[j]+f4[j])/6;

}

x=ts+h*i;

if (i%22==0)

{

getch();clrscr();

}

}

printf("\n Nhan ENTER de xem do thi cua co he");

getch();

//***Doan chuong trinh ve do thi cua co he***//

Trang 8

khoitao(); setbkcolor(15);

setcolor(1);

rectangle(4,4,633,475);

setcolor(8);

xd=getmaxx()/2-100;yd=getmaxy()/2;

line(xd-200,yd,xd+340,yd);

line(xd,yd+180,xd,yd-180);

line(xd+333,yd+3,xd+340,yd);

line(xd+333,yd-3,xd+340,yd);

line(xd+3,yd-173,xd,yd-180);

line(xd-3,yd-173,xd,yd-180);

setcolor(1);

for(ii=1;ii<=11;ii++)

{

line(xd+30*ii,yd-2,xd+30*ii,yd+2);

outtextxy(xd+30*ii-5,yd+4,dso[ii]);

}

for(ii=1;ii<=5;ii++)

{

line(xd+2,yd-30*ii,xd-2,yd-30*ii);

outtextxy(xd-9,yd-30*ii-2,dso1[ii]);

}

for(ii=1;ii<=5;ii++) line(xd+2,yd+30*ii,xd-2,yd+30*ii);

for(ii=1;ii<=5;ii++) outtextxy(xd-18,yd+30*ii-4,dso2[ii]);

for(ii=1;ii<=6;ii++) line(xd-30*ii,yd-2,xd-30*ii,yd+2);

for(ii=1;ii<=8;ii++) outtextxy(xd-30*ii-14,yd+4,dso3[ii]);

setcolor(5);

outtextxy(xd+200,yd+150,"DRAWING ");

setcolor(1);

outtextxy(xd-8,yd+5,"O");

outtextxy(xd-30,yd-180,"x,v");

outtextxy(xd+340,yd-8,"t(s)");

setlinestyle(0,1,1);

for(j=1;j<=m;++j)

for(i=1;i<=nstep;++i)

{

if(j==2) setlinestyle(1,1,1);

if(j==3)

{

setcolor(4);

setlinestyle(0,1,1);

}

if(j==4)

{

setcolor(4);

setlinestyle(1,1,1);

}

if(i==1) moveto(xd+round(30*p1[i]),yd-round(30*p2[i][j])); else lineto(xd+round(30*p1[i]),yd-round(30*p2[i][j]));

delay(20);

}

setcolor(1);

setlinestyle(0,1,1); line(xd+300,yd-185,xd+320,yd-185);

setlinestyle(2,1,1); line(xd+300,yd-170,xd+320,yd-170);

setcolor(4);

setlinestyle(0,1,1); line(xd+300,yd-155,xd+320,yd-155);

setlinestyle(2,1,1); line(xd+300,yd-140,xd+320,yd-140);

setcolor(0);

Trang 9

outtextxy(xd+200,yd+150,"DRAWING ");

setcolor(1);

outtextxy(xd+330,yd-190,"y(t)");

outtextxy(xd+330,yd-175,"dy(t)");

setcolor(4);

outtextxy(xd+330,yd-160,"phi(t)");

outtextxy(xd+330,yd-145,"dphi(t)");

setcolor(1);

outtextxy(510,10,"PHAM TUAN LONG");

outtextxy(510,25,"CO TIN A-K43");

outtextxy(xd-120,yd-200,"DO THI MO TA DAO DONG CUA CO HE"); getch();

closegraph();

}

//********chuong trinh chinh*********//

void main()

{

float x,h,ch,m1,m2,l,g,c;

float y[10],yy[10],f1[10],f2[10],f3[10],f4[10],f[10],ff[10]; int ma,n,nstep,m,i;

tt:clrscr();

printf("

******************CHUONG_TRINH_GIAI_PTVT_THEO_RUNGEKUTTA************

********\n");

printf("

====================================================================

========");

n=2;m=4;g=9.8;

printf("\n\nChon1:Giai he ptvp VANDERPOL theo RUNGE_KUTTA"); printf("\nChon2:Ptvp cap 2 cho bai toan con lac ELIPTIC ");

printf("\nBan muon giai he ptvp cap 1 hay 2:");scanf("%d",&ma); switch(ma)

{

case 1:

printf("Nhap so doan can tinh nstep:");scanf("%d",&nstep); printf("Nhap buoc can tinh h:");scanf("%f",&h);

printf("Cho gia tri ban dau cua x:");scanf("%f",&x);

for(i=1;i<=n;++i)

{

printf("Cho gia tri ban dau cua y[%d]:",i);scanf("%f",&y[i]);

}

runge(x,h,nstep,n,y,f,f1,f2,f3,f4,yy);

break;

case 2:

printf("Nhap so doan can tinh nstep:");scanf("%d",&nstep); printf("Nhap buoc can tinh h:");scanf("%f",&h);

printf("Cho gia tri ban dau cua x:");scanf("%f",&x);

printf("Cho khoi luong cua vat 1 m1:");scanf("%f",&m1);

printf("Cho khoi luong cua vat 2 m2:");scanf("%f",&m2);

printf("Cho chieu dai l:");scanf("%f",&l);

printf("Cho do cung cua lo xo c:");scanf("%f",&c);

for(i=1;i<=m;++i)

{

printf("Cho gia tri ban dau cua y[%d]:",i);scanf("%f",&y[i]);

}

runge2(x,h,nstep,m,y,f,ff,f1,f2,f3,f4,yy,m1,m2,l,g,c);

break;

}

Trang 10

printf("\n Ban co muon tinh tiep tuc nua khong(C/K)?"); ch=getch();

if(ch=='c'||ch=='C') goto tt;

}

Trong đó:

nstep: Số các bớc cần tính

h: Khoảng cách giữa 2 nút kế tiếp

m1: Khối lợng của vật một

m2: Khối lợng của con lắc

l: Chiều dài thanh dẫn

c: Độ cứng của lò xo

y[1]: Vị trí ban đầu của vật có khối lợng m1

y[2]: Vận tốc ban đầu của vật có khối lợng m1

y[3]: Vị trí ban đầu của con lắc

y[4]: Vận tốc ban đầu của con lắc

Đó là chơng trình giải hệ phơng trình vi phân cấp một và hai bằng phơng pháp RUNGE_KUTTA Molule 1 nhằm giải hệ phơng trình vi phân cấp một, module hai nhằm giải hệ phơng trình vi phân cấp hai áp dụng cho bài toán cơ Khi cần sử dụng chơng trình với các hệ phơng trình vi phân khác nhau ngời sử dụng chỉ cần thay đổi các module sau:

Đối với hệ phơng trình vi phân cấp một chỉ cần tác động vào module:

void dif(float x,float*y,float*f)

{

………

………

}

Ngời sử dụng chỉ việc đa số phơng trình cần tính toán vào module trên và thay

đổi số n ở chơng trình chính (n cho biết số phơng trình cần đa và để tính toán )

Đối với hệ phơng trình vi phân cấp hai, ngời sử dụng chỉ cần tác động vào module:

void module2(float*ff,float*f,float*y,float x,float m1,float m2,float l,float g,float c)

{

………

………

}

Sau đó thay đổi số phơng trình cần tính toán tại chơng trình chính.

void main()

{

………

………

}

Ngày đăng: 25/06/2016, 16:00

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w