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

Аппроксимация и СКО - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Реализовать класс (родительский + наследник) http://www.cyberforum.ru/cpp-beginners/thread1000226.html
Родительский класс: "Уравнение", свойства: количество корней, динамический массив корней. Методы: читание корней. Класс-Наследник: "Линейное уравнение", свойства:коофичиенты А,В. Методы: нахождение корней. Класс_наследник: "Квадратное уравнение"б свойства: коофициенти A, B, C, дискриминант.Методы: нахождение дискриминанта и корней. Заранее Всем Спасибо!!
C++ Запись в файл .txt во время исполнения програмы Есть цикл, когда он находит определенную строку, то он должен записать ее в файл. Если найдет еще подходящую строку, то должен снова записать в тот же файл, не удалив предыдущую запись. Подскажите пожалуйста. for (la-la-la) //look for DNA sequence ori_C { if (i_Repeat >= 3) { ofstream f_out("d:\\DNA1.txt"); if (!f_out) { cout<<"Файл DNA1 невозможно открыть";... http://www.cyberforum.ru/cpp-beginners/thread1000223.html
C++ Составить и отладить программу вычисления заданной в таблице функции y(x)
Составить и отладить программу вычисления заданной в таблице функции y(x) для каждого из заданных значений параметра a и при всех заданных значениях аргумента x.
Time Limit Randomized Quicksort C++
Помогите, пожалуйста, сдаю программу с этой сортировкой в систему контеста, выдает таймлимит на 91ом из 100 тесте. Что делать? Вроде как всё учёл при сортировке. Буду безмерно благодарен. #include <iostream> #include <vector> #include <cstdlib> #include <iterator> #include <utility> using namespace std;
C++ Использовать готовый код http://www.cyberforum.ru/cpp-beginners/thread1000203.html
Доброго времени суток. Есть готова реализация Хеш-таблицы с поиком, добавлением и удалением элементов. Вопрос в том, как воспользоваться функцией поиска и отразить результат поиска ? Поиск выполняется по значению - есть в таблице, выводим. Сам код: #include <iostream.h> #include <fstream> #define compEQ(a,b) (a == b)
C++ поиск через рекурсию С помощью массива структур описать каталог компьютерных игр, предусмотрев следующие характеристики: название, производитель, год издания, жанр, объем на диске, платформа. Предусмотреть операцию поиска по жанру, платформе. #include <conio.h> #include <iostream> #include <stdio.h> #include <locale> using namespace std; int main() подробнее

Показать сообщение отдельно
maxick96
0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 41

Аппроксимация и СКО - C++

07.11.2013, 00:56. Просмотров 304. Ответов 0
Метки (Все метки)

Тут возникла проблемка, вот задание:
"Сделать аппроксимацию(квадратичную), тобишь найти полином второй степени и найти среднеквадратичное отклонение"
аппроксимирующий многочлен я нашёл, но вот среднеквадратичное отклонение не получается
нужно сделать на Mathcad и на с++
на Маткаде сделано: ответ = 0.006393
такой же ответ должен получиться и на сишке
а получается какое то большое число
вопрос: что я сделал не так?!

P.S. на часть кода можете внимание не обращать
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
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
//Правая часть дифференциального уравнения
long double fdiff(long double x, long double y, int k)
{
    return k*sqrt(y)+sqrt(x);
}
//Точное(Аналитическое) решение
long double ft(long double x, int k)
{
    if(k==1)
        return x+2*sqrt(x+1)+2;
}
//Массив значений X
void masX(long double* x, long double a, long double h, int n)
{
    for(int i=0; i<=n; i++)
        x[i]=a+i*h;
}
//Массив значений Y численного решения
void masY(long double* x, long double* y, long double h, int n, int k)
{
    y[0]=1;
    for(int i=0; i<n; i++)
        y[i+1]=y[i]+h*fdiff(x[i], y[i], k);
}
//Массив значений Y аналитического решения
void masYT(long double* x, long double* yt, int n, int k)
{
    for(int i=0; i<=n; i++)
        yt[i]=ft(x[i],k);
}
//Аппроксимация численного решения, поиск коэффициетов полинома методом Гаусса
void approx(long double* x, long double* y, int k, long double& c0, long double& c1, long double& c2)
{
    int n=3, m=4;
    long double a[3][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0}},
                a0[3][4]={{0,0,0,0},{0,0,0,0},{0,0,0,0}};
    a0[0][0]=a[0][0]=k+1;
    for(int i=0; i<=k; i++)
        a0[0][1]=a0[1][0]=a[0][1]=a[1][0]=a[1][0]+x[i];
    for(int i=0; i<=k; i++)
        a0[0][2]=a0[1][1]=a0[2][0]=a[0][2]=a[1][1]=a[2][0]=a[2][0]+pow(x[i],2);
    for(int i=0; i<=k; i++)
        a0[1][2]=a0[2][1]=a[1][2]=a[2][1]=a[2][1]+pow(x[i],3);
    for(int i=0; i<=k; i++)
        a0[2][2]=a[2][2]=a[2][2]+pow(x[i],4);
    for(int i=0; i<=k; i++)
        a0[0][3]=a[0][3]=a[0][3]+y[i];
    for(int i=0; i<=k; i++)
        a0[1][3]=a[1][3]=a[1][3]+x[i]*y[i];
    for(int i=0; i<=k; i++)
        a0[2][3]=a[2][3]=a[2][3]+pow(x[i],2)*y[i];
    int i,j,k;
    float buf,x[3];
    //Прямой ход метода Гаусса
    for(i=0;i<n-1;i++)
    for(j=i+1;j<n;j++)
    {
        buf=a[i][i]/a[j][i];
        for(k=0;k<=n;k++) a[j][k]=a[j][k]*buf-a[i][k];
    }
    //Обратный ход метода Гаусса
    x[n-1]=a[n-1][n]/a[n-1][n-1];
    for(i=n-2;i>=0;i--)
    {
        buf=0;
        for(j=i+1;j<n;j++)
            buf+=a[i][j]*x[j];
        x[i]=(a[i][n]-buf)/a[i][i];
    }
    c0=x[0];
    c1=x[1];
    c2=x[2];
    cout<<endl<<"Решение (полином второй степени)"<<endl;
    cout<<"P2(x) = "<<x[2]<<" * x^2 + "<<x[1]<<" * x + "<<x[0]<<endl;
}
long double sko(long double* y, long double* yt, int n)
{
    long double summ=0;
    for(int k=0; k<=n-1; k++)
        summ=summ+(pow(y[k]-yt[k], 2)/(n+1)); //сумма(s)
    return sqrt(summ);
}
void main()
{
    long double h=0.1, a=0, b=1, c0, c1, c2, q=0;
    int n=(b-a)/h, k=1;
    setlocale(LC_ALL, "rus");
    long double x[11], y[11], yt[11];
    masX(x, a, h, n);
    masY(x, y, h, n, k);
    masYT(x, yt, n, k);
    for(int i=0; i<=n; i++)
        cout<<endl<<"x= "<<x[i]<<"\t"<<"y= "<<y[i]<<endl;
    approx(x, y, n, c0, c1, c2);
    q=sko(y, yt, n);
    cout<<"q= "<<q<<endl;
    k=-1;
    _getch();
}
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru