0 / 0 / 0
Регистрация: 16.10.2012
Сообщений: 41
1

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

07.11.2013, 00:56. Показов 1073. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Тут возникла проблемка, вот задание:
"Сделать аппроксимацию(квадратичную), тобишь найти полином второй степени и найти среднеквадратичное отклонение"
аппроксимирующий многочлен я нашёл, но вот среднеквадратичное отклонение не получается
нужно сделать на 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();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.11.2013, 00:56
Ответы с готовыми решениями:

Отрицательное СКО
Здравствуйте. Как известно, среднее квадратическое отклонение (СКО) = корень из, простите,...

Энтропия и СКО изображения
Для качественного изображения энтропия ( функция entropy) - лучше, когда она большая или маленькая?...

Динамический диапазон СКО
Здравтсвйуте. Есть необходимость сделать следующее. Ряд чисел. Для них нужно посчитать СКО, но с...

Определение СКО двух АЧХ
Всем привет! Такой вопрос у меня есть 2 АЧХ фильтра - реальная и идеальная. Подскажите пожалуйста,...

0
07.11.2013, 00:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.11.2013, 00:56
Помогаю со студенческими работами здесь

Определить мат ожидание и ско
Добрый день. Прошу помощи - не могу понять как решать задачу. Подскажите куда копать, или может...

Найти пару (2 и более) векторов СКО = 0
Есть массив double data Содержит значения -100..100 Нужно найти сумму строк(векторов) и...

Как сформировать шум с мат ожиданием и ско
Ребят не очень понимаю как можно сформировать в матлабе шум с заданным мат ожиданием и ско,...

Среднее отклонение модуля и СКО напряжения и силы тока
Подскажите пожалуйста как расчитать среднее отклонение модуля напряжения и силы тока, и...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru