Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Инструментарий программиста

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

XPerformer



Silver Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Исходник:

Код:
 
#include <math.h>
#include "nrutil.h"
void qrdcmp(float **a, int n, float *c, float *d, int *sing)
{
int i,j,k;
float scale,sigma,sum,tau;
*sing=0;
for (k=1;k<n;k++) {
scale=0.0;
for (i=k;i<=n;i++) scale=FMAX(scale,fabs(a[i][k]));
if (scale == 0.0) { Singular case.
*sing=1;
c[k]=d[k]=0.0;
} else {  
for (i=k;i<=n;i++) a[i][k] /= scale;
for (sum=0.0,i=k;i<=n;i++) sum += SQR(a[i][k]);
sigma=SIGN(sqrt(sum),a[k][k]);
a[k][k] += sigma;
c[k]=sigma*a[k][k];
d[k] = -scale*sigma;
for (j=k+1;j<=n;j++) {
for (sum=0.0,i=k;i<=n;i++) sum += a[i][k]*a[i][j];
tau=sum/c[k];
for (i=k;i<=n;i++) a[i][j] -= tau*a[i][k];
}
}
}
d[n]=a[n][n];
if (d[n] == 0.0) *sing=1;
}
 

Результаты теста:

Код:
 
#include <math.h>
#include 'nrutil.h'
void qrdcmp(Single **a, Integer n, Single *c, Single *d, Integer *sing)
begin  
Integer i,j,k;
Single scale,sigma,sum,tau;
*sing := 0;
for (k := 1;k<n;k++) begin  
scale := 0.0;
for (i := k;i< := n;i++) scale := FMAX(scale,fabs(a[i,k]));
if (scale = 0.0) then begin Singular  
*sing :=1;
c[k] := d[k] := 0.0;
end else begin  
for (i := k;i< := n;i++) a[i,k] / := scale;
for (sum := 0.0,i := k;i< := n;i++) sum + := SQR(a[i,k]);
sigma := SIGN(sqrt(sum),a[k,k]);
a[k,k] + := sigma;
c[k] := sigma*a[k,k];
d[k] := -scale*sigma;
for (j := k+1;j< := n;j++) begin  
for (sum := 0.0,i := k;i< := n;i++) sum + := a[i,k]*a[i,j];
tau := sum/c[k];
for (i := k;i< := n;i++) a[i,j] - := tau*a[i,k];
end;  
end;  
end;  
d[n] := a[n,n];
if (d[n] = 0.0) then *sing := 1;
end;  
 

Всего записей: 2545 | Зарегистр. 20-06-2011 | Отправлено: 16:05 21-05-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Инструментарий программиста


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru