Автор работы: Пользователь скрыл имя, 31 Октября 2013 в 18:56, контрольная работа
Задание №1.
Поиск нулей функции на заданном промежутке.
Дано:
A=1; B=4
Министерство образования и науки Российской Федерации
Федеральное государственное
образовательное бюджетное
высшего профессионального образования
Волгоградский государственный технический университет
Кафедра «Вычислительная техника»
Семестровая работа
по дисциплине «Вычислительная физика»
Вариант №23
студент группы Ф-169
Трофимова О.И.
Еськин Д.Л.
Волгоград 2012 г.
Задание №1.
Поиск нулей функции на заданном промежутке.
Дано:
A=1; B=4
Решение
График функции :
Листинг программы
#include <stdio.h>
#include <math.h>
#include <iostream>
float F(float x)
{
return (log(sqrt(x)*sin(x-1)+0.2));
}
int main()
{
FILE*D;
D=fopen("1.txt","w");
float A,B,x,dx,a[1000],k,F1,F2;
int j;
A=1;
B=4;
dx=0.01;
x=A;
j=1;
while (x<B)
{
if (F(x)*F(x+dx)<0)
{
a[j]=x;
j++;
}
fprintf(D," %f \n",x);
x=x+dx;
}
j=j-1;
k=j;
printf("j=%d \n",j);
j=1;
while (j<=k)
{
printf("koren=%f \n",a[j]);
j++;
}
x=a[1];
F1=F(x);
x=a[2];
F2=F(x);
printf("F1=%f F2=%f",F1,F2);
}
Задание №2. Вычислить значение определенного интеграла
Дано:
A=1; B=4
Решение
Значение интеграла, высчитанного аналитическим способом:
Метод трапеций:
I=0.291124
I=0.321504
I=0.330275
I=0.345820
I=0.345882
I=0.338432
I=0.339560
I=0.340394
I=0.341020
I=0.345960
I=0.341946
I=0.345936
I=0.342612
I=0.345943
I=0.343076
I=0.345948
I=0.343457
I=0.343545
I=0.343706
Метод левых треугольников:
I=0.273140
I=0.310248
I=0.322318
I=0.339219
I=0.340602
I=0.334238
I=0.335938
I=0.337208
I=0.338177
I=0.343319
I=0.339606
I=0.343736
I=0.340624
I=0.344058
I=0.341348
I=0.344298
I=0.341928
I=0.342101
I=0.342337
Метод правых прямоугольников:
I=0.309108
I=0.332760
I=0.338232
I=0.352421
I=0.351163
I=0.342627
I=0.343181
I=0.343579
I=0.343863
I=0.348600
I=0.344285
I=0.348136
I=0.344600
I=0.347829
I=0.344804
I=0.347598
I=0.344985
I=0.344989
I=0.345076
Листинг программы
#include <stdio.h>
#include <math.h>
#include <cmath>
float p(float x)
{
return (log(sqrt(x)*sin(x-1)+0.2));
}
float F1(float a,float b,float dx)
{
float I=0.0,x;
for (x=a; x<b; x=x+dx)
I=I+dx/2*( p(x)+p(x+dx));
return(I);
}
float F2(float a,float b,float dx)
{
float I1=0.0,x;
for (x=a; x<b; x=x+dx)
I1=I1+dx*p(x);
return(I1);
}
float F3(float a,float b,float dx);
{
float I2=0.0,x;
for (x=a; x<b; x=x+dx)
I2=I2+dx*p(x+dx);
return(I2);
}
int main()
{
float x,h,a,b,I,I1,I2,dx;
FILE*z;
z=fopen ("1.txt","w");
FILE*k;
k=fopen ("I.txt","w");
FILE*u;
u=fopen ("I1.txt","w");
FILE*t;
t=fopen ("I2.txt","w");
a=1;
b=4;
{
y=50;
dx=(b-a)/y;
while (y<1000)
{
dx=(b-a)/y;
I=F1(a,b,dx);
I1=F2(a,b,dx);
I2=F3(a,b,dx);
y=y+50;
fprintf (z,"%f\n",y);
fprintf (k,"I=%f \n",I);
fprintf (u,"I1=%f \n",I1);
fprintf (t,"I2=%f \n",I2);
}
}
}
Задание №3.Решить дифференциальное уравнение.
Дано:;
X(0)=100;
X’(0)=30.
Решение:
К такому дифференциальному уравнению приводит задача вида:
Графики:
Листинг программы
#include <stdio.h>
#include <math.h>
float F (float x,float v)
{
if (v==0)
return (-1*(0+10));
return (-1*(0.2*pow(v,3)/fabs(v)+10))
}
int main()
{
float x0,v0,v,dt,m,h,tmax,xnow,
int i,k;
FILE*n;
FILE*o;
FILE*t;
n=fopen ("1.txt","w");
o=fopen ("2.txt","w");
t=fopen ("3.txt","w");
x0=100;
m=1;
v0=30;
k=50;
tmax=5;
for (i=0;i<=2;i++)
{
dt=tmax/k;
k=k*2;
tpast=0;
tnow=0;
xpast=x0;
vpast=v0;
}
while (tnow<tmax)
{
xnow= xpast+vpast*dt;
vnow=vpast+F(xpast,vpast)*dt;
tnow+=dt;
xpast=xnow;
vpast=vnow;
fprintf (n,"%f \n ",tnow);
fprintf (o,"%f \n ",xnow);
fprintf (t,"%f \n ",vnow);
}
}
Информация о работе Семестровая работа по «Вычислительная физика»