LINUX.ORG.RU

МКР знакопеременное решение


0

0

Приведеный ниже исходник решает ДУ свободных колебаний
(y''+2*e*y'+w^2*y=0) методом конечных разностей. Получаются правильные
решения (для всех случаев e и w). Но в этих решениях неправильный знак у
каждого вторго отсчета (если поменять на противоположеный результат
иделано совпадает с теоретическим).

Что это может быть?

int main()
{
double a[SIZE][SIZE];
double b[SIZE];
double x[SIZE];
int i, j;

int n;
double l, h;
double A, B, C;
double e, w;
double u0, un;

gp = NULL;

l = 5;
n = SIZE;
h = l/n;

e = 1;
w = 2;

u0 = 5;
un = 10;

A = 1/(h*h)-(2*e)/(2*h);
B = 2/(h*h)-(w*w);
C = 1/(h*h)+(2*e)/(2*h);

for (i=0; i<n; i++)
for (j=0; j<n; j++)
a[i][j] = 0;

for (i=0; i<n; i++) {
if (i) a[i][i-1] = A;
a[i][i] = B;
if (i<(n-1)) a[i][i+1] = C;
}

b[0] = -A*u0;
b[n-1] = -C*un;

gauss((double*)&a, (double*)&b, (double*)&x, SIZE);
plot((double*)&x, SIZE);

getc(stdin);
pclose(gp);
return 1;
}

★★★★

Если честно, совершенно непонятно что эта программа делает. Это точно не метод конечных разностей.

anonymous
()
Ответ на: комментарий от anonymous

Программа заполняет трехдиагональную матрицу заранее вычеслеными коэффициентам. И решает полученную СЛАУ методом Гаусса.

А как должна выглядеть правильная программа?

alexru ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.