Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.71
natasho
0 / 0 / 0
Регистрация: 27.12.2008
Сообщений: 3
#1

Решение системы линейных уравнений с помощъю LU-разложения и обратной матрицы - C++

27.12.2008, 11:03. Просмотров 2871. Ответов 0
Метки нет (Все метки)

помогите пожалуйста....Мне нужно решить систему линейних уравнений с помощью этих методов у меня есть коды, но компилятор все время видает ошибки.Буду очень признателна, если мне поможите разобраться в этих кодах....И матрицу Жакобиана я ищу в ручныю-это производние от функций

Код
#include "nrutil.h"
#include <iostream>
#define TINY 1.0e-20;
#define NRANSI
void LU::lubksb(float **a, int n, int *indx, float b[])
{
	int i,ii=0,ip,j;
		float sum;

		for (i=1;i<=n;i++) {
			ip=indx[i];
			sum=b[ip];
			b[ip]=b[i];
			if (ii)
				for (j=ii;j<=i-1;j++) sum -= a[i][j]*b[j];
			else if (sum) ii=i;
			b[i]=sum;
		}
		for (i=n;i>=1;i--) {
			sum=b[i];
			for (j=i+1;j<=n;j++) sum -= a[i][j]*b[j];
			b[i]=sum/a[i][i];
		}
}

void LU::ludcmp(float **a, int n, int *indx, float *d)
{
	int i,imax,j,k;
	float big,dum,sum,temp;
	float *vv;

	vv=vector(1,n);
	*d=1.0;
	for (i=1;i<=n;i++) {
		big=0.0;
		for (j=1;j<=n;j++)
			if ((temp=fabs(a[i][j])) > big) big=temp;
		if (big == 0.0) nrerror("Singular matrix in routine ludcmp");
		vv[i]=1.0/big;
	}
	for (j=1;j<=n;j++) {
		for (i=1;i<j;i++) {
			sum=a[i][j];
			for (k=1;k<i;k++) sum -= a[i][k]*a[k][j];
			a[i][j]=sum;
		}
		big=0.0;
		for (i=j;i<=n;i++) {
			sum=a[i][j];
			for (k=1;k<j;k++)
				sum -= a[i][k]*a[k][j];
			a[i][j]=sum;
			if ( (dum=vv[i]*fabs(sum)) >= big) {
				big=dum;
				imax=i;
			}
		}
		if (j != imax) {
			for (k=1;k<=n;k++) {
				dum=a[imax][k];
				a[imax][k]=a[j][k];
				a[j][k]=dum;
			}
			*d = -(*d);
			vv[imax]=vv[j];
		}
		indx[j]=imax;
		if (a[j][j] == 0.0) a[j][j]=TINY;
		if (j != n) {
			dum=1.0/(a[j][j]);
			for (i=j+1;i<=n;i++) a[i][j] *= dum;
		}
	}
	free_vector(vv,1,n);
}
#undef TINY
#undef NRANSI

Inverse of matrixe
float **a,**y,d,*col;
int i,j *index;
ludcmp(a,N,indx,&d);
for(j=1;j<=N;j++)
 {
    for (i=1;i<=N;i++)
        col[i]=0.0;
       col[j]=1.0;
       lubksb(a,N,indx,col);
       for(i=1;i<=N;i++) y[i][j]=col[i];
 }


#ifndef _NR_UTILS_H_
#define _NR_UTILS_H_

static float sqrarg;
#define SQR(a) ((sqrarg=(a)) == 0.0 ? 0.0 : sqrarg*sqrarg)

static double dsqrarg;
#define DSQR(a) ((dsqrarg=(a)) == 0.0 ? 0.0 : dsqrarg*dsqrarg)

static double dmaxarg1,dmaxarg2;
#define DMAX(a,b) (dmaxarg1=(a),dmaxarg2=(b),(dmaxarg1) > (dmaxarg2) ?\
        (dmaxarg1) : (dmaxarg2))

static double dminarg1,dminarg2;
#define DMIN(a,b) (dminarg1=(a),dminarg2=(b),(dminarg1) < (dminarg2) ?\
        (dminarg1) : (dminarg2))

static float maxarg1,maxarg2;
#define FMAX(a,b) (maxarg1=(a),maxarg2=(b),(maxarg1) > (maxarg2) ?\
        (maxarg1) : (maxarg2))

static float minarg1,minarg2;
#define FMIN(a,b) (minarg1=(a),minarg2=(b),(minarg1) < (minarg2) ?\
        (minarg1) : (minarg2))

static long lmaxarg1,lmaxarg2;
#define LMAX(a,b) (lmaxarg1=(a),lmaxarg2=(b),(lmaxarg1) > (lmaxarg2) ?\
        (lmaxarg1) : (lmaxarg2))

static long lminarg1,lminarg2;
#define LMIN(a,b) (lminarg1=(a),lminarg2=(b),(lminarg1) < (lminarg2) ?\
        (lminarg1) : (lminarg2))

static int imaxarg1,imaxarg2;
#define IMAX(a,b) (imaxarg1=(a),imaxarg2=(b),(imaxarg1) > (imaxarg2) ?\
        (imaxarg1) : (imaxarg2))

static int iminarg1,iminarg2;
#define IMIN(a,b) (iminarg1=(a),iminarg2=(b),(iminarg1) < (iminarg2) ?\
        (iminarg1) : (iminarg2))

#define SIGN(a,b) ((b) >= 0.0 ? fabs(a) : -fabs(a))

#if defined(__STDC__) || defined(ANSI) || defined(NRANSI) /* ANSI */

void nrerror(char error_text[]);
float *vector(long nl, long nh);
int *ivector(long nl, long nh);
unsigned char *cvector(long nl, long nh);
unsigned long *lvector(long nl, long nh);
double *dvector(long nl, long nh);
float **matrix(long nrl, long nrh, long ncl, long nch);
double **dmatrix(long nrl, long nrh, long ncl, long nch);
int **imatrix(long nrl, long nrh, long ncl, long nch);
float **submatrix(float **a, long oldrl, long oldrh, long oldcl, long oldch,
	long newrl, long newcl);
float **convert_matrix(float *a, long nrl, long nrh, long ncl, long nch);
float ***f3tensor(long nrl, long nrh, long ncl, long nch, long ndl, long ndh);
void free_vector(float *v, long nl, long nh);
void free_ivector(int *v, long nl, long nh);
void free_cvector(unsigned char *v, long nl, long nh);
void free_lvector(unsigned long *v, long nl, long nh);
void free_dvector(double *v, long nl, long nh);
void free_matrix(float **m, long nrl, long nrh, long ncl, long nch);
void free_dmatrix(double **m, long nrl, long nrh, long ncl, long nch);
void free_imatrix(int **m, long nrl, long nrh, long ncl, long nch);
void free_submatrix(float **b, long nrl, long nrh, long ncl, long nch);
void free_convert_matrix(float **b, long nrl, long nrh, long ncl, long nch);
void free_f3tensor(float ***t, long nrl, long nrh, long ncl, long nch,
	long ndl, long ndh);

#else /* ANSI */
/* traditional - K&R */

void nrerror();
float *vector();
float **matrix();
float **submatrix();
float **convert_matrix();
float ***f3tensor();
double *dvector();
double **dmatrix();
int *ivector();
int **imatrix();
unsigned char *cvector();
unsigned long *lvector();
void free_vector();
void free_dvector();
void free_ivector();
void free_cvector();
void free_lvector();
void free_matrix();
void free_submatrix();
void free_convert_matrix();
void free_dmatrix();
void free_imatrix();
void free_f3tensor();

#endif /* ANSI */

#endif /* _NR_UTILS_H_ */
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2008, 11:03
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Решение системы линейных уравнений с помощъю LU-разложения и обратной матрицы (C++):

Решение системы линейных уравнений с помощью обратной матрицы - C++
Нужно решить систему уравнений с помощью обратной матрицы на с++ x1 + x2 + 2x3 = -1 2x1 - x2 + 2x3 = -4 4x1 + x2 + 4x3 = -2 ...

Решение системы линейных уравнений - C++
Компилятор wxDev-c++. Ошибка:C:\Program Files\Dev-Cpp\çàäà÷è\ãëàâà1\Ïåðâàÿ çàäà÷à\Makefile.win Error 1 #include &lt;cstdlib&gt; #include...

Решение системы линейных уравнений - C++
Помогите решить на Си

Решение системы линейных уравнений - C++
Не могу сделать прогу на С++. Кто сделает - огромное спасибо. Решить систему линейных уравнений 3x-5y+2z=2, 3x-7y+2z=0, x+5y-4z=-2

Решение системы линейных уравнений. - C++
\begin{cases} &amp; \text{ } cos(ax+2)...... x&gt;2 \\ &amp; \text{ } tg |x-2a| .... .. x\leq 2 \end{cases} x а h по а = 0.2 ...

Найти решение системы линейных уравнений - C++
привет всем, пожалуста помогите составить программу или испроваить ошибки в моей условие задачи даны действительные числа a,b,c,d,e,f....

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.12.2008, 11:03
Привет! Вот еще темы с ответами:

Найти решение системы линейных уравнений - C++
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что |a1*b2-a2*b1|&gt;=0.0001, и если верно, то найти решение системы...

Найти решение системы линейных уравнений - C++
Даны действительные числа a1, b1, c1, a2, b2, c2. Выяснить, верно ли, что a1b2-a2b1 0.0001 и если верно, то найти решение системы...

Численное решение системы линейных уравнений - C++
Решить систему линейных уравнений: -сформировать матрицу А коэффициентов и матрицу В правых частей (матрицы должны быть размещены в...

Решение системы линейных алгебраических уравнений - C++
Добрый вечер!!! Помогите, пожалуйста, написать программу для решения системы уравнений итерационным методом(метод А-минимальных...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru