Автор Тема: подскажите  (Прочитано 3987 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
подскажите
« : 29 Марта 2011, 23:32:26 »
Как создать решение уравнений методом Гаусса!!!

Оффлайн tig81

  • Глобальный модератор
  • *****
  • Сообщений: 15181
    • Просмотр профиля
Re: подскажите
« Ответ #1 : 29 Марта 2011, 23:34:34 »
1. На каком языке программирования?
2. Что сами пробовали сделать?
3. Гуглили? В сети много кодов.

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: подскажите
« Ответ #2 : 29 Марта 2011, 23:50:57 »
я нашла,кое-что с помощью интернета ,книг и т.д. написала,но толком ничего не понимаю......

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: подскажите
« Ответ #3 : 29 Марта 2011, 23:52:20 »
вот,что получилось,ну так как не я считай писала, а мне еще и помогали,то чет не очень понимаю все....
#include "stdafx.h"
#include <stdio.h>
#include <process.h>
float **a, *b, *x;
int N;
char filename[256];
FILE* InFile=NULL;
void count_num_lines(){
//count number of lines in input file - number of equations
int nelf=0; //non empty line flag
do{
nelf = 0;
while(fgetc(InFile)!='\n' && !feof(InFile)) nelf=1;
if(nelf) N++;
}while(!feof(InFile));
}

void freematrix(){
//free memory for matrixes
int i;
for(i=0; i<N; i++){
delete [] a;
}
delete [] a;
delete [] b;
delete [] x;
}

void allocmatrix(){
//allocate memory for matrixes
int i,j;
x = new float[N];
b = new float[N];
a = new float*[N];
if(x==NULL || b==NULL || a==NULL){
printf("\nNot enough memory to allocate for %d equations.\n", N);
exit(-1);
}
for(i=0; i<N; i++){
a = new float[N];
if(a==NULL){
printf("\nNot enough memory to allocate for %d equations.\n", N);
}
}
for(i=0; i<N; i++){
for(j=0; j<N; j++){
a[j]=0;
}
b=0;
x=0;
}
}

void readmatrix(){
int i=0,j=0;
//read matrixes a and b from input file
for(i=0; i<N; i++){
for(j=0; j<N; j++){
fscanf(InFile, "%f", &a[j]);
}
fscanf(InFile, "%f", &b);
}
}

void printmatrix(){
//print matrix "a"
int i=0,j=0;
printf("\n");
for(i=0; i<N; i++){
for(j=0; j<N; j++){
printf(" %+f*X%d", a[j], j);
}
printf(" =%f\n", b);
}
}

void testsolve(){
//test that ax=b
int i=0,j=0;
printf("\n");
for(i=0; i<N; i++){
float s = 0;
for(j=0; j<N; j++){
s += a[j]*x[j];
}
printf("%f\t%f\n", s, b);
}
}
void printresult(){
int i=0;
printf("\n");
printf("Result\n");
for(i=0; i<N; i++){
printf("X%d = %f\n", i, x);
}
}
void diagonal(){
int i, j, k;
float temp=0;
for(i=0; i<N; i++){
if(a==0){
for(j=0; j<N; j++){
if(j==i) continue;
if(a[j] !=0 && a[j]!=0){
for(k=0; k<N; k++){
temp = a[j][k];
a[j][k] = a[k];
a[k] = temp;
}
temp = b[j];
b[j] = b;
b = temp;
break;
}
}
}
}
}
void cls(){for(int i=0; i<25; i++) printf("\n");}

int _tmain(int argc, _TCHAR* argv[])
{int i=0,j=0, k=0;
cls();
do{
printf("\nInput filename: ");
scanf("%s", filename);
InFile = fopen(filename, "rt");
}while(InFile==NULL);
count_num_lines();
allocmatrix();
rewind(InFile);
//read data from file
readmatrix();
//check if there are 0 on main diagonal and exchange rows in that case
diagonal();
fclose(InFile);
printmatrix();
//process rows
for(k=0; k<N; k++){
for(i=k+1; i<N; i++){
if(a[k][k]==0){
printf("\nSolution is not exist.\n");
return 1;
}
float M = a[k] / a[k][k];
for(j=k; j<N; j++){
a[j] -= M * a[k][j];
}
b -= M*b[k];
}
}
printmatrix();
for(i=N-1; i>=0; i--){
float s = 0;
for(j = i; j<N; j++){
s = s+a[j]*x[j];
}
x = (b - s) / a;
}

InFile = fopen(fi

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: подскажите
« Ответ #4 : 30 Марта 2011, 00:22:37 »
Забыла....на си++

Оффлайн tig81

  • Глобальный модератор
  • *****
  • Сообщений: 15181
    • Просмотр профиля
Re: подскажите
« Ответ #5 : 30 Марта 2011, 00:27:06 »
Забыла....на си++
Ждем пользователя Данила, он подскажет.

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: подскажите
« Ответ #6 : 30 Марта 2011, 00:35:38 »
я еще нашла,ну там выдает у меня 85 ошибок((((((

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: подскажите
« Ответ #7 : 30 Марта 2011, 02:21:32 »
такс. начнем с начала. у вас он считывает из файла. вы ему оный даете? и что за метод гаусса для уравнения? может для системы все же?
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Данила

  • Глобальный модератор
  • *****
  • Сообщений: 1657
  • Математик-экстрасенс
    • Просмотр профиля
Re: подскажите
« Ответ #8 : 30 Марта 2011, 02:28:53 »
Тут посмотрите http://sancpp.blogspot.com/2010/11/blog-post.html метод написан уже,нужно только дописать вспомогательные функции заполнения,создания и тд
http://forum.vingrad.ru/faq/topic-188858.html тут уже готовый код,с комментариями даже.
Просьба не кидать мне в ЛС Ваши задания...создаем тему,пишем свое задание,наработки\идеи...полностью и нахаляву ничего не решаю

Вам в помощь:
∫ ¼ ½ ¾ ⅓ ⅔ ⅛ ⅜ ⅝ ⅞ ² ³ ± ~ ‰ ∞ √ ∑ ∆ ℮ ∩ ≡ ≤ ≥ ≈ ∩

Оффлайн Бароха

  • Новичок
  • *
  • Сообщений: 12
    • Просмотр профиля
Re: подскажите
« Ответ #9 : 30 Марта 2011, 09:07:32 »
Большое спасибо!

 

Помогите с задачами. написать на языке Си. хоть что нибудь подскажите.

Автор veraStud

Ответов: 0
Просмотров: 3277
Последний ответ 21 Декабря 2012, 19:06:31
от veraStud
Подскажите решение в маткаде. Как найти коэффициенты уравнения?

Автор SE

Ответов: 5
Просмотров: 6496
Последний ответ 17 Октября 2011, 01:20:47
от tig81
Подскажите ...

Автор siyu1989

Ответов: 4
Просмотров: 2272
Последний ответ 20 Января 2012, 00:16:31
от sp