Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.05.2016, 11:48   #1
nektoto
Новичок
Джуниор
 
Регистрация: 05.05.2016
Сообщений: 1
По умолчанию Решение системы нелинейных уравнений С++

Здравствуйте! Очень нужна помощь. Получила задание написать программу на С++ для решения системы нелинейных уравнений: 0.1-pow(x,2)+2*y*z-x; -0.2+pow(y,2)-3*x*z-y; 0.3-pow(z,2)-2*x*y-z, методом Ньютона.
Что-то получилось, но все никак не удается разобраться до конца
Подскажите, пожалуйста, что не так и как нужно

#include <vcl.h>
#include <iostream.h>
#include <math.h>
#pragma hdrstop

#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int n=2;
int i,j;
double x,y,z,esp;

double f1(double x, double y, double z);
double f1(double x, double y, double z){
return 0.1-pow(x,2)+2*y*z-x; }
double f2(double x, double y, double z);
double f2(double x, double y, double z){
return -0.2+pow(y,2)-3*x*z-y; }
double f3(double x, double y, double z);
double f3(double x, double y, double z){
return 0.3-pow(z,2)-2*x*y-z;}


//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
x=StrToFloat(Edit1->Text);
y=StrToFloat(Edit2->Text);
z=StrToFloat(Edit3->Text);
esp=StrToFloat(Edit4->Text);

double a[2][2], a1[2][2], b[2], det, invdet, f[2], K[2]; //a[2][2]-матрица Якоби;
//a1[2][2]-обратная матрица; b[2]-произведение а1[2] на f[2]; f[2]-массив ф-ций; K[2]-массив переменных
double xk, yk, zk; //изменение значения переменных при k=0,1,2..
int k; //кол-во итераций
{
k=0;
//Строится матрица Якоби
{
for (i=0; i<n; i++)
for (j=0; j<n; j++){
a[0][0]=(-2*x-1);
a[0][1]=(2*z);
a[0][2]=(2*y);
a[1][0]=(-3*z);
a[1][1]=(2*y-1);
a[1][2]=(-3*x);
a[2][0]=(-2*y);
a[2][1]=(-2*x);
a[2][2]=(-2*z-1);
}
//Находится ее определитель
det=a[0][0]*a[1][1]*a[2][2]+a[0][1]*a[1][2]*a[2][0]+a[0][2]*a[1][0]*a[2][1]-
a[0][2]*a[1][1]*a[2][0]-a[0][0]*a[1][2]*a[2][1]-a[0][1]*a[1][0]*a[2][2];
invdet=1/det;
//Обратная матрица
for (i=0; i<n; i++)
for (j=0; j<n; j++){
a1[0][0]=a[1][1]*a[2][2]-a[1][2]*a[2][1]*invdet;
a1[0][1]=-a[0][1]*a[2][2]+a[0][2]*a[2][1]*invdet;
a1[0][2]=a[0][1]*a[1][2]-a[0][2]*a[1][1]*invdet;
a1[1][0]=-a[1][0]*a[2][2]+a[1][2]*a[2][0]*invdet;
a1[1][1]=a[0][0]*a[2][2]-a[0][2]*a[2][0]*invdet;
a1[1][2]=-a[0][0]*a[1][2]+a[0][2]*a[1][0]*invdet;
a1[2][0]=a[1][0]*a[2][1]-a[1][1]*a[2][0]*invdet;
a1[2][1]=-a[0][0]*a[2][1]+a[0][1]*a[2][0]*invdet;
a1[2][2]=a[0][0]*a[1][1]-a[0][1]*a[1][0]*invdet;
}
//Массив ф-ций
for (j=0; j<n; j++){
f[0]=f1(x,y,z);
f[1]=f2(x,y,z);
f[2]=f3(x,y,z);
}
//массив переменных
for (j=0; j<n; j++){
K[0]=x;
K[1]=y;
K[2]=z;
}

do
{
for (i=0; i<n; i++)
for (j=0; j<n; j++){
b[0]=a[0][0]*f[0]+a[0][1]*f[1]+a[0][2]*f[2];
b[1]=a[1][0]*f[0]+a[1][1]*f[1]+a[1][2]*f[2];
b[2]=a[2][0]*f[0]+a[2][1]*f[1]+a[2][2]*f[2];
}
xk=K[0]-b[0];
yk=K[1]-b[1];
zk=K[2]-b[2];
}
while ((abs(xk-x)>esp)&&(abs(yk-y)>esp)&&(abs(zk-z)>esp));
x==xk;
y==yk;
z==zk;

k++;
}
}
Edit5->Text=xk;
Edit6->Text=yk;
Edit7->Text=zk;
Edit8->Text=k;
}
nektoto вне форума Ответить с цитированием
Старый 21.05.2016, 18:27   #2
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Сравните свою работу с другими.

http://www.cyberforum.ru/cpp-beginne...ead257107.html
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
С#. Решение системы нелинейных уравнений методом Ньютона Елена Атмалкина Помощь студентам 2 17.12.2015 18:52
Решение системы нелинейных алгебраических уравнений методом Ньютона (2 уравнения) Неопытный Общие вопросы C/C++ 0 29.05.2012 19:13
Delphi. Решение системы нелинейных уравнений методами Ньютона и простых итераций. Помогите найти ошибку! Sianessa Помощь студентам 8 13.04.2012 17:32
Решение системы нелинейных уравнений методом Ньютона на Pascal spaike619 Помощь студентам 0 28.02.2012 00:33
Решение системы нелинейных уравнений методом итераций на Pascal Кушников Помощь студентам 0 25.02.2011 12:41