Нахождение пересечения гиперболической спирали: ρ = a/φ , a = 2.7 с окружностью единичного радиуса

Страницы работы

Содержание работы

Курсовая работа

по информатике

Факультет                       ФТФ

Группа                             ФЛ-71

Студент                           Алюкаева О.З.

Преподаватель                Корель И.И.

Новосибирск,2009

 1 Нарисовать гиперболическую спираль: ρ = a/φ , a = 2.7. Найти длину

  спирали φ ∈ [0.1, 5.7]. Найти её пересечения с окружностью единичного радиуса.

 Текст програмы:

#include <stdio.h>

#include <math.h>

#define a 2.7

double fun (double f){

return a/f;}

double dfun(double f)

{return -a/(f*f);}

double X(double f){

return a*cos(f)/f;}

double Y(double f)

{return a*sin(f)/f;}

          int main (void)

          {double l=0.0,f,b1,b2,r1,r2,df;

          b1=0.1;

          b2=5.7;

          f=b1;

          df=0.0001;

          FILE *DF;

          DF=fopen("kurs.dat","w");

          while (f<b2){

                    r1=fun(f);

                    r2=dfun(f);

                    l=l+sqrt(r1*r1+r2*r2)*df;

                    fprintf(DF,"%e %e\n",X(f),Y(f));

                    f+=df;

                    if (fabs(Y(f)-sqrt(1-X(f)*X(f)))<0.00001) printf("(%f,%f)\n",X(f),Y(f));}

fclose(DF);

printf("\nDlina spirali=%f\n",l);}


Графики:

Получаем ответ:

Точка пересечения имеет координаты (-0.904072,0.427380)

Длина спирали равна 30.728720

1. Написать программу для приближенного интегрирования задачи Ко-

ши, используя методы Эйлера и Рунге-Кутты для:

          (a) обыкновенного дифференциального уравнения    

Метод Эйлера

 Уравнение вида:  y'+у*tan(x)=sin(2x)

  приведем к стандартному виду   y'=F(x,y), т.е

                                                       y'=sin(2x)-y*tan(x)

Текст программы:

# include <stdio.h>

# include <math.h>

double fun (double x, double y){

return sin(2*x)-y*tan(x);}

int main (void){

double a, b, n, h, x1, x2, y1, y2;

a=0;

b=2;

n=1500;

h=(b-a)/n;

x1=0;

y1=2;

FILE *DF;

DF=fopen("ky2.dat","w");

while (x1<b){ x2=x1+h;

           y2=y1+h*(fun(x1,y1)+fun(x2,y1+h*fun(x1,y1)))/2.0;

          fprintf(DF,"%e %e \n",x2,y2);

x1=x2;

y1=y2;}

fclose(DF);}

График решения уравнения:

Метод Рунге-Кутте

Текст программы:

# include <stdio.h>

# include <math.h>

double fun (double x, double y){

return sin(2*x)-y*tan(x);}

int main (void){

double a, b, n, h, x1, x2, y1, y2, k1, k2, k3, k4;

a=0;

b=2;

n=1500;

h=(b-a)/n;

x2=0;

y2=2;

FILE *DF;

DF=fopen("ky.dat","w");

while (x1<b){ x1=x2+h;

              k1=fun(x2,y2)*h;

              k2=fun(x2+h/2.0,y2+k1/2.0)*h;

              k3=fun(x2+h/2.0,y2+k2/2.0)*h;

              k4=fun(x2+h/2.0,y2+k3/2.0)*h;

y1=y2+(k1+2.0*k2+2.0*k3+k4)/6;

fprintf(DF,"%e %e \n",x1,y1);

x2=x1;

y2=y1;}

fclose(DF);}

График решения уравнения:

          (b) Написать программу для вычисления системы дифференциальных уравнений методом Рунге-Кутта.

Дано: система   

x'=2*x

y'=3*x-2*y

z'=2*y+z

Начальные условия (4,8,-7)

отрезок  [0;10]

Текст программы:

# include <stdio.h>

# include <stdlib.h>

# include <math.h>

double fun1 (double t, double x){

return 2*x;}

double fun2 (double t, double x, double y ){ return 3*x-2*y;}

double fun3 (double t, double y, double z){ return 2*y+z;}

int main (void){ double t0, k11, k12, k13, k14, k21, k22, k23, k24, k31, k32, k33, k34, xk, yk, zk, n, h, i,t;

double xk1, yk1, zk1;

t0=0; k11=0; k12=0; k13=0; k14=0; k21=0; k22=0; k23=0; k24=0; k31=0; k32=0; k33=0;k34=0;

xk=4;

yk=8;

zk=-7;

n=100;

h=(10)/n;

i=0;

FILE *DF;

DF=fopen("sis.dat", "w");

for (i=0; i<=n; i++){ t=t0+i*h;

                               k11=fun1(t,xk)*h;

                                k12=fun1(t+h/2.0, xk+k11/2.0)*h;

                                k13=fun1(t+h/2.0, xk+k12/2.0)*h;

                                k14=fun1(t+h,xk+k13)*h;

                                xk1=xk+(k11+2.0*k12+2.0*k13+k14)/6.0;

                               k21=fun2(t,xk,yk)*h;

                                k22=fun2(t+h/2.0, xk+k21/2.0, yk+k21/2.0)*h;

                                k23=fun2(t+h/2.0, xk+k22/2.0, yk+k22/2.0)*h;

                                k24=fun2(t+h,xk+k23,yk+k23)*h;

                                yk1=yk+(k21+2.0*k22+2.0*k23+k24)/6.0;

                               k31=fun3(t,yk,zk)*h;

                                k32=fun3(t+h/2.0, yk+k31/2.0, zk+k31/2.0)*h;

                                k33=fun3(t+h/2.0, yk+k32/2.0, zk+k32/2.0)*h;

                                k34=fun3(t+h,yk+k33,zk+k33)*h;

                                zk1=zk+(k31+2.0*k32+2.0*k33+k34)/6.0;

                              fprintf(DF,"%e %e %e\n",xk1,yk1,zk1);

                               xk=xk1;

                               yk=yk1;

                               zk=zk1; }

fclose(DF);}


Похожие материалы

Информация о работе