c0d3r
что то в моей проге нет упоминания о массиве у
в общем есть код который нужно перевести на pascal. Помогите пожалуйста
Цитата:
что то в моей проге нет упоминания о массиве у
в общем есть код который нужно перевести на pascal. Помогите пожалуйста
Цитата:
//////////////////////////////////////////////////////////////////////////////
//
// Solving differential equations (Eiler-Coshi method)
// (c) Johna Smith, 1996
//
// Method description:
// Given differential equation y'=f(x,y) and starting conditions
// x=x0, y(x0)=y0. We should find solution of this equation
// at [a;b] interval.
// y(i+1) calculated as y(i) + delta y(i)
// delta y=h*(f(x,y(i))+f(x,z))/2, z=y(i)+h*(f(x(i),y(i))
//
// In this example y'=cos(y)+3x, [a;b]=[0;1], x0=0, y0=1.3
//
//////////////////////////////////////////////////////////////////////////////
#include <math.h>
#include <stdio.h>
const float a=0,b=1; // bound of the interval
const int num_points=10; // number of point to solve
float x0=0,y0=1.3; // initial conditions
int M=1;
float f(float x, float y)
{
return (cos(y)+3*x); // y'=cos(y)+3*x
}
void calculate(int m,float *y)
{
float x,yi,h,z;
h=(b-a)/(num_points*m);
yi=y0; x=x0;
for (int i=0;i<num_points;i++)
{
for (int k=0;k<m;k++)
{
z=yi+h*f(x,yi);
yi+=h*(f(x,yi)+f(x,z))/2;
x+=h;
}
*(y+i)=yi;
}
}
void main(void)
{
float yh[num_points],yh2[num_points];
calculate(M,yh);
calculate(2*M,yh2); // doubled step for better accuracy
// epsilon is difference between solutions with single
// and double steps
printf("X\t\tYH\t\tYH2\t\tEPSILON\n");
for (int i=0;i<num_points;i++)
printf("%f\t%f\t%f\t%f\n",(x0+((i+1)*(b-a))/num_points),
yh[i],yh2[i],yh2[i]-yh[i]);
}