С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Уравнение методом простых итераций - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Вычислить сумму ряда http://www.cyberforum.ru/cpp-beginners/thread12244.html
Вычислить сумму ряда для заданного в режиме диалога с ЭВМ |x|<1. Вычисления заканчиваются, когда очередной член ряда становится меньше 0.0001:
C++ Сортировка Двумерного массива Создать двумерный массив. Отсортировать каждую строку по возрастанию. Одномерный смог отсортировать а.двух мерный слабо =( #include<iostream> #include<time.h> using namespace std; void... http://www.cyberforum.ru/cpp-beginners/thread12227.html
C++ Задача на циклы
Помогите пожалуйста, люди добрые, решить задачу подобии такой A B C D E B C D E F C D E F G D E F G H E F G H I #include <stdio.h> #include <conio.h>
C++ TCHAR в char
Подскажите как правильно перевести TCHAR в char ? Например получаем текст из диалогового окна функцией GetDlgItemText(hwndDlg,IDC_EDIT1,tmp,10); // копируя его в буфер TCHAR tmp; А дальше...
C++ Почему не может быть такой функции? http://www.cyberforum.ru/cpp-beginners/thread12141.html
ofstream input_file(str1) ; такой строкой кода я открываю файл. ofstream - тип обекта input_file - обект типа ofstream а тепрь я хочу открывать файл в другом месте программы использую...
C++ списки и динамическое выделение памяти Помогите разобраться в примере. Вместо нормального вывода на экран выводится всякий мусор либо вобще вылетает из компилятора. Использую Borland C++ 3.1 #include <stdio.h> #include <alloc.h>... подробнее

Показать сообщение отдельно
Blackstarr
2 / 2 / 0
Регистрация: 26.02.2011
Сообщений: 14
18.10.2011, 18:28
// С++ Natal_Math_Mod_метод итераций.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <iomanip>
#include <Windows.h>
using namespace std;



int _tmain(int argc, _TCHAR* argv[])
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
int i,j;
int k;

float V1,V2,V3,V4;

float MaxC;
float MaxE;
float devide[5];
float C[5];

float A[5][5];
float B[5][5];

float e[5];
float d[5];
Go_to:

for(i=1;i<5;i++)
for(j=1;j<5;j++)
{
cout<<"Введите элементы матрицы А ["<<i<<"]["<<j<<"] ";
cin>>A[i][j];
}
//for(i=1;i<2;i++)
for(i=1;i<5;i++)
{
cout<<"Введите элементы матрицы d["<<i<<"] ";
cin>>d[i];
}

for(i=1;i<5;i++)
for(j=1;j<5;j++)
{
if(i==j)
devide[i]=A[i][j];
//B[i][j]=(-A[i][j])/devide;
}

for(i=1;i<5;i++)
for(j=1;j<5;j++)
{
B[i][j]=(-A[i][j])/devide[i];
}



//devide[4];
for(i=1;i<5;i++)
for(j=1;j<5;j++)
{
if(i==j)
B[i][j]=0;


}

C[1]=(B[1][1]+B[1][2]+B[1][3]+B[1][4])*-1;
C[2]=(B[2][1]+B[2][2]+B[2][3]+B[2][4])*-1;
C[3]=(B[3][1]+B[3][2]+B[3][3]+B[3][4])*-1;
C[4]=(B[4][1]+B[4][2]+B[4][3]+B[4][4])*-1;

MaxC=C[1];
for(i=1;i<5;i++)
{
//MaxC=0;
if(MaxC<C[i])
MaxC=C[i];
}

if(MaxC>1)
{
system("cls");
goto Go_to;
}

for(i=1;i<5;i++)
{
e[i]=d[i]/devide[i];

}
MaxE=0;
for(i=1;i<5;i++)
{
if(MaxE<abs(e[i]))
MaxE=abs(e[i]);

}
//cout<<MaxE;

k=((log(0.0001)-log(MaxE)+log(1-MaxC))/log(MaxC))-1;

for(i=1;i<k;i++)
{
V1=B[1][2]*e[2]+B[1][3]*e[3]+B[1][4]*e[4];
e[1]=e[1]+V1;
V2=B[2][1]*e[1]+B[2][3]*e[3]+B[2][4]*e[4];
e[2]=e[2]+V2;
V3=B[3][1]*e[1]+B[3][2]*e[2]+B[3][4]*e[4];
e[3]=e[3]+V3;
V4=B[4][1]*e[1]+B[4][2]*e[2]+B[4][3]*e[3];
e[4]=e[4]+V4;

}


cout<<"Х1= "<<e[1]<<endl;
cout<<"Х2= "<<e[2]<<endl;
cout<<"Х3= "<<e[3]<<endl;
cout<<"Х4= "<<e[4]<<endl;

getch();
return 0;
}

Добавлено через 2 минуты
Задание: Написать программу которая бы вычисляла СЛАУ 4х4(х1,х2,х3,х4). Самая фишка в том, что программа должна вычислить корень с точностью 0.0001 и за определенное колличество итераций(k), колличество которых вычисляется по формуле k=((log(0.0001)-log(MaxE)+log(1-MaxC))/log(MaxC))-1(это единственная формула, которую я нашел, для вычислений итераций).

V1=B[1][2]*e[2]+B[1][3]*e[3]+B[1][4]*e[4];
e[1]=e[1]+V1;
V2=B[2][1]*e[1]+B[2][3]*e[3]+B[2][4]*e[4];
e[2]=e[2]+V2;
V3=B[3][1]*e[1]+B[3][2]*e[2]+B[3][4]*e[4];
e[3]=e[3]+V3;
V4=B[4][1]*e[1]+B[4][2]*e[2]+B[4][3]*e[3];
e[4]=e[4]+V4;

V1,V2,V3,V4-это вычисляют за 1 итерацию числа на которые нужно изменить корень e[n], чтобы приблизить к нужной точности!!! У меня получаются ОГРОМНЫЕ числа после 20 итераций, может я неправильно использую формулу вычесления итераций??? Иили что то другое??? (Вычислял за 1 итерацию корни были правильные!)

Матрица А:
6 , 0.7 , 0.5 , 0.8
0.6 , 11 , 3.4 , 1.3
1.5 , 1.2 , 5 , 0.3
1.5 , 0.3 , 0.7 , 10

Матрица d:
4
8
-11
8

Корни должны получиться: Х1=0.6146,Х2=1.453,Х3=-2.784,Х4=0.85913
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.