Вопрос пользователя:
Ответ нейросети:
#include <iostream>
#include <vector>
#include <cmath>
const double EPSILON = 1e-6; // критерий сходимости
const int MAX_ITERATIONS = 1000;
std::vector<double> solveSystem(const std::vector<std::vector<double>>& A, const std::vector<double>& b) {
int n = A.size();
std::vector<double> x(n, 0.0);
std::vector<double> x_new(n, 0.0);
int iterations = 0;
while(iterations < MAX_ITERATIONS) {
for(int i = 0; i < n; i++) {
double sum = 0.0;
for(int j = 0; j < n; j++) {
if(j != i) {
sum += A[i][j] * x[j];
}
}
x_new[i] = (b[i] - sum) / A[i][i];
}
double error = 0.0;
for(int i = 0; i < n; i++) {
error += std::abs(x_new[i] - x[i]);
}
if(error < EPSILON) {
break;
}
x = x_new;
iterations++;
}
return x_new;
}
int main() {
std::vector<std::vector<double>> A = {{2, -1, 0},
{-1, 2, -1},
{0, -1, 2}};
std::vector<double> b = {1, 0, 1};
std::vector<double> solution = solveSystem(A, b);
std::cout << "Solution:" << std::endl;
for(int i = 0; i < solution.size(); i++) {
std::cout << "x" << i+1 << " = " << solution[i] << std::endl;
}
return 0;
}
Этот код решает систему линейных уравнений методом итераций. Критерий сходимости выбран как сумма разности между предыдущей и текущей итерацией.
Обратите внимание: ответы, предоставляемые искусственным интеллектом, могут не всегда быть точными. Не рассчитывайте на них в критически важных областях, таких как медицина, юриспруденция, финансы или в вопросах, связанных с безопасностью. Для важных решений всегда обращайтесь к квалифицированным специалистам. Администрация сайта не несет ответственности за контент, сгенерированный автоматически.