[a / aa / ad / au / b / bg / bo / c / d / dg / di / ew / f / fa / fd / fg / fi / fl / g / gg / h / ho / hr / ja / k / ls / m / ma / me / mo / mu / n / ne / o / p / pa / ph / pr / r / re / s / sp / t / td / tr / tv / u / vg / w / wh / wm / wp / y] - [Главная]

[Назад]
Ответ
(оставьте это поле пустым)
Имя (оставьте это поле пустым)
E-mail
Тема
Комментарий
Файл
Перейти к
Подтверждение обновить captcha
Пароль (чтобы удалить пост или файл)
  • Разрешённые типы файлов: GIF, JPG, PNG
  • Максимальный размер файла 1536 килобайт и 2048×2048.
  • Изображения размером более 200x200 точек будут уменьшены.

№1391  

Имеется система линейных уравнений типа:

y0 = A0 + A1*x0_1 + A2*x0_2 +...+ An*x0_n
y1 = A0 + A1*x1_1 + A2*x1_2 +...+ An*x1_n
...
yn = A0 + A1*xn_1 + A2*xn_2 +...+ An*xn_n

Известны игреки и иксы, требуется найти A0...An.

Хотеть алгоритм решения. На гугле буквально вчера забанили.

с:reshush вселяет надежды, что анонимус решает.

>> №1393  

Анонимус решает послать тебя на хуй, первокурсота, до тех пор пока не начнешь писать в общепринятой нотации. Я-то сначала подумал, что тебе матрицу найти надо. Потом посмотрел и стало ясно, что тебе надо найти вектор x при условии, что Ax=b, где а и бэ даны. Решай Гауссом же! И не забудь, что xi_0 у тебя равны единице.

>> №1401  

>>1393
таки да, Гауссом наиболее легко, надёжно, универсально, я гарантирую это!
>>1391
подсказка .. Гаусс работает так:
1) сводишь матрицу к (верхне)треугольному виду, это цикл тройной вложенности
2) снизу вверх восстанавливаешь коэффициенты
3) ???
4) ну ты понел.

>> №1417  

gauss.c:

#include <stdio.h>
#include <malloc.h>
#include <string.h>

#define A(i,j) A[j+i*N]
#define b(i) b[i]
#define x(i) x[i]

void outA(char * s, int N, float * A) {
int i,j;
printf("\n%s\n",s);
for (i=0;i<N;i++) {
for (j=0;j<N;j++)
printf("%4.1f\t",A(i,j));
printf("\n");
}
}

void outB(char * s, int N, float * b) {
int i,j;
printf("\n%s\n",s);
for (i=0;i<N;i++) printf("%4.1f\n",b(i));
}

int main(int argc, char * argv[]) {
int N,i,j,k;
float *A, *A1, *b, *b1, *x, m;
FILE *f;

if (argc < 2) {
printf("Usage: %s <file>\nNow GTFO!\n",argv[0]);
return -1;
}
f = fopen(argv[1],"r");
if (!f) {
printf("GTFO!!!\n");
return -1;
}
fscanf(f,"%u",&N);
A = malloc(N*N*sizeof(float));
b = malloc(N*sizeof(float));
A1 = malloc(N*N*sizeof(float));
b1 = malloc(N*sizeof(float));
x = malloc(N*sizeof(float));
for (i=0;i<N;i++) {
for (j=0;j<N;j++)
fscanf(f,"%f",&A(i,j));
fscanf(f,"%f",&b(i));
}
fclose(f);
printf("N = %u\n",N);
outA("Матрица A",N,A);
outB("Вектор b",N,b);

memcpy(A1,A,N*N*sizeof(float));
memcpy(b1,b,N*sizeof(float));

for (i=0;i<N-1;i++)
for (j=i+1;j<N;j++) {
m = -A(j,i)/A(i,i);
for (k=i;k<N;k++)
A(j,k)+=m*A(i,k);
b(j)+=m*b(i);
}

// outA("Матрица A после прямого хода метода Гаусса",N,A);
// outB("Вектор b после прямого хода метода Гаусса",N,b);

for (i=N-1;i>=0;i--) {
for (j=N-1;j>i;j--) {
b(i) -= x(j)*A(i,j);
}
x(i) = b(i)/A(i,i);
}

printf("\nРешение:\n");
for (i=0;i<N;i++) printf("%4.1f\n",x(i));

memcpy(A,A1,N*N*sizeof(float));
memcpy(b,b1,N*sizeof(float));

printf("\nНевязка:\n");
for (i=0;i<N;i++) {
m = b(i);
for (j=0;j<N;j++)
m -= A(i,j)*x(j);
printf("%e\n",m);
}

return 0;
}

matrix.txt:

6
2 0 -0.5 0 0.5 0 0
0 5.3 0 1.3 0 -2.7 29.4
-8 0 5 0 5 0 -8
0 -2.7 0 9.3 0 -2.7 5.4
-8 0 4 0 6 0 -12
0 -2.7 0 1.3 0 5.3 -34.6
___________________A_________________________ __b__
6 на первой строчке — размерность матрицы.


Удалить пост []
Пароль
[a / aa / ad / au / b / bg / bo / c / d / dg / di / ew / f / fa / fd / fg / fi / fl / g / gg / h / ho / hr / ja / k / ls / m / ma / me / mo / mu / n / ne / o / p / pa / ph / pr / r / re / s / sp / t / td / tr / tv / u / vg / w / wh / wm / wp / y] - [Главная]