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

Линейный Метод Наименьших Квадратов, ошибка в расчетах - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Решение квадратных уравнений http://www.cyberforum.ru/cpp-beginners/thread621346.html
#include <iostream> #include <conio.h> #include <cmath> using namespace std; void roots(float a, float b, float c) { float d = b * b - 4 * a * c; cout << "Discriminant = " << d << endl; float x1 = - b + sqrt(d) / 2 * a;
C++ Двухмерный динамической массив Привет, помогите пожалуйста написать программу, половину уже написал. Задание такое: 1.Вставить ряд в массив.(Зделал) char a = "__________________________________________________"; 2.Вставить цифры в ряд.(Зделал) char b = " 5 5 5 5 " Тоисть у меня есть 5 тяких массивов char a = "__________________________________________________"; //50 http://www.cyberforum.ru/cpp-beginners/thread621342.html
C++ Выход в случае ввода пустой строки
Опять 25 =( Порылся в своих старых темах, опять полистал учебник, но голова не хочет соображать. Где-то допускаю ошибку и прям чую, что знаю где, но не могу понять как :p Программа работает отлично, но в одной из функций нужно осуществить выход в случае пустой строки. Почему не работает break? Хотел проверить и для этого после цикла всунул cout<< i; но циклу пофиг, после ввода пробела ничего не...
Массивы. Ошибка в программе C++
Почему я с клавиатуры ввожу в массив данные русским текстом, а массив запоминает какие-то "кракозябли"? И из за этого проверка условия не срабатывает... Помогите решить проблему. #include <fstream> #include <iostream> #include <string> using namespace std; void main() {
C++ Конус в воде http://www.cyberforum.ru/cpp-beginners/thread621262.html
Помогите плиз. Дан конус с радиусом B и высотой А, который плавает в воде. В зависимости от плотности конуса, необходимо найти расстояние от воды до верхушки конуса. Я задал плотность 0<p<=1000 #include "stdafx.h" #include <iostream> #include <conio.h> #include <math.h>
C++ Факториал через рекурсию Подскажите, как можно вычислить факториал некоторого числа через рекурсию функций (через цикл либо другим методом не интересует). Есть следующий кусок кода, но я не могу понять как заставить перемножаться функции друг с другом. Т.е строка result=result*m; не работает так, как хотелось бы мне, она не запоминает результат прошлого перемножения, а постоянно представляется как result=1*m; Выручайте... подробнее

Показать сообщение отдельно
prettynetty
2 / 2 / 1
Регистрация: 09.07.2012
Сообщений: 14
09.07.2012, 15:20     Линейный Метод Наименьших Квадратов, ошибка в расчетах
Разработка программы аппроксимации табличной функции степенным рядом( линейный метод наименьших квадратов).
использование глобальных переменных не допускается. Ошибка в расчетах. Думаю, что проблема тут
C++
1
2
3
4
5
6
7
8
9
while(!strstr(s1,"EOF"))
        {
            fscanf(f,"%s%s",s1,s2);
            x[nCount]=atof(s1);
            y[nCount]=atof(s2);
            nCount++;
            x = (double *)realloc((void *)x,(nCount + 1)*sizeof(double));
            y = (double *)realloc((void *)y,(nCount + 1)*sizeof(double));
        }
ВЕСЬ ТЕКСТ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
#include <windows.h>
#include <conio.h>
#include <stdio.h>
#include <math.h>
 
void p1();
void p2();
double * MNK(double *x, double *y, int n, int k);
void PryamoiHod(int n, double **a, double *b);
void ObratniHod(int n, double **a, double *b, double *x);
double F(double x, double *c, int k);
 
 
void main()
{
    SetConsoleOutputCP(1251);
    int key;
    printf("\t\tАппроксимация методом НК\r\n");
    printf("\tМеню:\r\n");
    printf("1 - Диалоговый ввод\r\n");
    printf("2 - Данные из файла\r\n");
    scanf("%d", &key);
    if(key == 1)
        p1();
    if(key == 2)
        p2();
    if(key!=1 && key!=2){ printf("Неверный ввод!"); exit(0);}
}
 
void p1()
{
    int nCount;
    double *x, *y;
    int k;
    double a,rez, *c;
    printf("Введите число эксперементальных точек\r\n");
    scanf("%d", &nCount);
    x=(double *)malloc(nCount*sizeof(double));
    y=(double *)malloc(nCount*sizeof(double));
    for(int i=0; i<nCount; i++)
    {
        printf("\tТочка %d:\r\n", i+1);
        printf("Аргумент\t"); scanf("%f", &x[i]);
        printf("Функция \t");scanf("%f", &y[i]);
    }
    printf("Ввод окончен\r\n");
    printf("Данные введены\r\n");
    printf("Введите степень разложения\r\n");
    printf("Большие значения степени (более 10) увеличивают точность расчёта\r\n");
    scanf("%d", &k);
    c=MNK(x,y,nCount,k);
    printf("Введите значение аргумента\t");
    scanf("%f", &a);
    rez = F(a,c,k);
    printf("Расчётное значение функции :\t%f\r\n", rez);
    }
 
void p2()
{
    FILE *f;
    double *x, *y, *c;
    int k;
    if((f=fopen("dannie.txt","rb")) )
    {
        fseek(f,0,SEEK_END);
        long fLen=ftell(f);
        fseek(f,0,SEEK_SET);
        char s1[16], s2[16];
        int nCount=0;
        x=(double *)malloc((nCount + 1)*sizeof(double));
        y=(double *)malloc((nCount + 1)*sizeof(double));
        while(!strstr(s2,"y"))
            fscanf(f,"%s%s",s1,s2);
        while(!strstr(s1,"EOF"))
        {
            fscanf(f,"%s%s",s1,s2);
            x[nCount]=atof(s1);
            y[nCount]=atof(s2);
            nCount++;
            x = (double *)realloc((void *)x,(nCount + 1)*sizeof(double));
            y = (double *)realloc((void *)y,(nCount + 1)*sizeof(double));
        }
        nCount--;
        fclose(f);
        printf("Данные введены\r\n");
        printf("Введите степень разложения\r\n");
        printf("Большие значения степени (более 10) увеличивают точность расчёта\r\n");
        scanf("%d",&k);
        c = MNK(x, y, nCount, k);
        double a,rez;
        printf("Введите значение аргумента\t");
        scanf("%f",&a);
        rez = F(a,c,k);
        printf("Расчётное значение функции :\t%f\r\n", rez);
    }
}
 
double * MNK(double *x, double *y, int n, int k)
{
    double **a =new double *[k];
    double *b=new double [k];
    double *c=new double [k];
    for(int m=0,i,j; m < k; m++)
    {
        a[m]=new double[k];
        for(j=0; j<k; j++)
        {
            a[m][j]=0;
            for(i=0; i<n;i++)
                a[m][j]+=pow(x[i],m+j);
        }
        b[m]=0;
        for(i=0; i<n; i++)
            b[m]+=pow(x[i],m)*y[i];
    }
    PryamoiHod(k,a,b);
    ObratniHod(k,a,b,c);
    return c;
}
 
void PryamoiHod(int n, double **a, double *b)
{
    double v;
    for(int k=0,i,j,im; k<n-1; k++)
    {
        im=k;
        for(i=k+1; i<n; i++)
        {
            if(fabs(a[im][k]) < fabs(a[i][k]))
            {im=i;}}
        if(im!=k)
        {for(j=0; j<n; j++)
            {v=a[im][j];
            a[im][j]=a[k][j];
            a[k][j]=v;}
            v=b[im];
            b[im]=b[k];
            b[k]=v;}
        for(i=k + 1; i<n; i++)
        {
            v=a[i][k]/a[k][k];
            a[i][k]=0;
            b[i]=b[i]-v*b[k];
            for(j=k+1; j<n; j++)
            {a[i][j]=a[i][j]-v*a[k][j];}}}}
 
void ObratniHod(int n, double **a, double *b, double *x)
{
    double s=0;
    x[n-1]=b[n-1]/a[n-1][n-1];
    for(int i=n-2,j; 0<=i; i--)
    {   s=0;
        for(j=i+1; j<n; j++)
        {       s=s+a[i][j]*x[j];}
        x[i]=(b[i]-s)/a[i][i];
    }
}
 
double F(double x, double *c, int k)
{
    double RetVal=1;
    for(int i=0; i<k; i++)
    RetVal+=c[i]*pow(x,i);
    return RetVal;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:27. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru