#1
28.12.2010, 16:17
| | Новичок | | Регистрация на форуме: 28.12.2010
Сообщений: 2
| |
Я пишу курсовую на тему "Численные методы решения систем нелинейных уравнений".
завтра уже защита, а у меня не хватает времени на практику.
Есть прога на С#, нужно:
Разработка алгоритма решения
Выбор и описание входных и выходных данных
Структура программы
Составление и отладка кодов программы
Тестирование программы
Инструкция пользователя.
Помогите мне пожалуйста.... Цитата: |
using System;
/*программа предназначена для решения системы нелинейных уравнений.
Программа выполнена 19 ноября 2010 года. Обем необходимой памяти для работы составляет 124 КБ. Версия программы №1.Автор Абашева Эльмира Ренатовна.*/
using System.Collections.Generic;
//using System.Linq;
using System.Text;
namespace kyrs
{
class Program
{
static void Main(string[] args)
{
int N = 2;
Console.WriteLine("Система уравнений");
Console.WriteLine("x+y-3" + "\n" + "x^2+y^2-9");
double[,] yakob = new double[N, N];
Console.WriteLine("введите элементы матрицы Якоби");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
yakob[i, j] = Convert.ToDouble(Console.ReadLine());
}
}
double[] V = new double[N];
double[] B = new double[N];
double[] Bnach = new double[N];
double e;
Console.WriteLine("введите удовлетворяющую погрешность ");
e = Convert.ToDouble(Console.ReadLine());
Console.WriteLine("введите начальный вектор");
for (int i = 0; i < N; i++)
{
Bnach[i] = Convert.ToDouble(Console.ReadLine());
}
int maunI = 0;
int naid = 0;
int stop = 0;
double S=0;
Console.WriteLine("Матрица Якоби");
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
Console.Write(yakob[i, j] + "\t");
}
Console.WriteLine();
}
while ((maunI != 10) && (naid != 1) && (stop != 1))
{
maunI++;
Bnach[0] = V[0] + V[1] - 3;
Bnach[1] = V[0] * V[0] + V[1] * V[1] - 9;
int iter = 0;
double[,] A = new double[N, N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = yakob[i, j];
}
}
while (iter != N - 1)
{
for (int h = 0; h < N; h++) { B[h] = Bnach[h] * (-1); }
double pomny = A[iter, iter];
for (int j = iter; j < N; j++)
{
A[iter, j] = A[iter, j] / pomny;
}
B[iter] = B[iter] / pomny;
for (int i = iter + 1; i < N; i++)
{
double zap = A[i, iter];
for (int j = iter; j < N; j++)
{
A[i, j] = A[i, j] - A[iter, j] * zap;
}
B[i] = B[i] - B[iter] * zap;
}
iter++;
}
double[] X = new double[N];
if (A[N - 1, N - 1] != 0)
{
X[N - 1] = B[N - 1] / A[N - 1, N - 1];
}
else X[N - 1] = 0;
double SYM = 0;
int l = N - 2;
for (int i = N - 2; i >= 0; i--)
{
SYM = 0;
for (int j = i + 1; j <= N - 1; j++)
{
SYM = SYM + A[i, j] * X[j];
}
if (A[i, l] != 0)
{
X[i] = (B[i] - SYM) / A[i, l];
}
else X[i] = 0;
l--;
}
double[] XJ = new double[N];
double promq = 0; double mq = 0; double nq = 0;
S = 0;
for (int i = 0; i < N; i++)
{
XJ[i] = V[i] + X[i];
if (X[i] >= 0)
{
promq = X[i] + promq;
}
else
{
promq = -X[i] + promq;
}
if (V[i] >= 0)
{
mq = mq + V[i];
}
else
{
mq = mq - V[i];
}
if (XJ[i] >= 0)
{
nq = nq + XJ[i];
}
else
{
nq = nq - XJ[i];
}
}
if (mq != 0)
{
S = promq / mq;
}
else
{
S = promq / nq;
}
if (S < 0)
{
S = -S;
}
if (S < e)
{
Console.WriteLine("S "+S);
naid = 1;
Console.WriteLine("Найдено решение");
for (int i = 0; i < N; i++)
{
Console.WriteLine("{0:n3}", XJ[i]);
}
Console.WriteLine("Количество итераций " + maunI);
}
else
{
if (S > 20)
{
Console.WriteLine("Процесс расходится"); stop = 1;
}
else
{
if (maunI == 10)
{
Console.WriteLine("За 10 титераций решение не найдено");
}
else
{
double[] Y = new double[N];
Y[0] = (XJ[0] + XJ[1] - 3) - Bnach[0];
Y[1] = (XJ[0] * XJ[0] + XJ[1] * XJ[1] - 9) - Bnach[1];
double[,] J = new double[N, N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
J[i, j] = yakob[i, j];
yakob[i, j] = 0;
}
}
double[] ymnMAS = new double[N]; double[] PRMAS = new double[N];
for (int i = 0; i < N; i++)
{
double Ymn = 0;
for (int j = 0; j < N; j++)
{
Ymn = Ymn + J[i, j] * X[j];
}
ymnMAS[i] = Ymn;
PRMAS[i] = Y[i] - ymnMAS[i];
}
double del = 0;
for (int i = 0; i < N; i++)
{
del = del + X[i] * X[i];
}
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
yakob[i, j] = J[i, j] + ((PRMAS[i] * X[j]) / del);
}
}
for (int i = 0; i < N; i++)
{
V[i] = XJ[i];
}
}
}
}
}
}
}
}
| | |
#2
28.12.2010, 21:38
| | Новичок | | Регистрация на форуме: 27.12.2010
Сообщений: 55
| |
сказывается мне что здесь таких программистов мало | |
#3
12.01.2011, 16:14
| | Новичок | | Регистрация на форуме: 12.01.2011
Сообщений: 10
| |
вот есть одна и еще одна заготовка - не знаю как она на тебе поможет, но кое-что взять от туда сможешь:
#include <stdio.h>
#include <conio.h>
void main ()
{
const unsigned short n=10;
short c[n];
char i;
for (i=0;i<n;i++){
printf ("\nc[%d]=",i);
scanf ("%d",&c[i]);
}
char count=0;
for (i=0;i<n;i++) if (c[i]%c[0]==0) count++;
printf ("%d",count);
getch();
}
2).
#include <iostream>
#include <conio.h>
using namespace std;
int main(){
int mas[100],j,i=0,S=0;
do
{
cin>>mas[i];
} while(mas[i++]!=0);
for(j=1;j<=i;j++)
if(j%2==0) S+=mas[j-1];
cout<<"Summ= "<<S<<endl;
getch();
return 0;
}
| | |