Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.06.2015, 01:07   #1
Игорь Густей
Новичок
Джуниор
 
Регистрация: 19.06.2015
Сообщений: 2
По умолчанию Среднее и дисперсия масива (СИ++)

Помогите пожалуйста. Вот мой первый вариант кода

Код:
#include <iostream>
#include <conio>
#include <stdio>
#include <math>
using namespace std;
void main()
{
double  x[10]={1,4,6,14,5,-11,9,2,4,10};
double n=10, serx, dispersiax, otkl1, otkl2, otkl3, otkl4, otkl5, otkl6, otkl7, otkl8, otkl9, otkl10;
{
serx=(x[0]+x[1]+x[2]+x[3]+x[4]+x[5]+x[6]+x[7]+x[8]+x[9])/n;
otkl1=pow(x[0]-serx,2);
otkl2=pow(x[1]-serx,2);
otkl3=pow(x[2]-serx,2);
otkl4=pow(x[3]-serx,2);
otkl5=pow(x[4]-serx,2);
otkl6=pow(x[5]-serx,2);
otkl7=pow(x[6]-serx,2);
otkl8=pow(x[7]-serx,2);
otkl9=pow(x[8]-serx,2);
otkl10=pow(x[9]-serx,2);
dispersiax(otkl1+otkl2+otkl3+otkl4+otkl5+otkl6+otkl7+otkl8+otkl9+otkl10)/(n-1);
printf ("seredniex=%.5f\ndispersiax=%.5f",serx,dispersiax);
}
getch();
}
Вот второй вариант. Когда разобрался как сделать сумму массива.

Код:
#include <iostream.h>
#include <iostream>
#include <conio>
#include <stdio>
#include <math>
using namespace std;
void main()

{
double  x[10]={1,4,6,14,5,-11,9,2,4,10.1};
  double sum=0;
   for (int i=0; i<=9; i++)
   {
    sum=sum+x[i];
   }
double n=10, serx, dispersiax, otkl1, otkl2, otkl3, otkl4, otkl5, otkl6, otkl7, otkl8, otkl9, otkl10;
{
serx=sum/n;
 
for (int i=0; i<=9; i++)
   {
    float otkl=pow(x[i]-serx,2);
   }
otkl1=pow(x[0]-serx,2);
otkl2=pow(x[1]-serx,2);
otkl3=pow(x[2]-serx,2);
otkl4=pow(x[3]-serx,2);
otkl5=pow(x[4]-serx,2);
otkl6=pow(x[5]-serx,2);
otkl7=pow(x[6]-serx,2);
otkl8=pow(x[7]-serx,2);
otkl9=pow(x[8]-serx,2);
otkl10=pow(x[9]-serx,2);
dispersiax=(otkl1+otkl2+otkl3+otkl4+otkl5+otkl6+otkl7+otkl8+otkl9+otkl10)/(n-1);
printf ("seredniex=%.5f\ndispersiax=%.5f",serx,dispersiax);
}
getch();
}
Проблема в том что я не знаю как теперь добавить еще одну сумму массива. (массивы отклонений - pow(x[i]-serx,2)). Вот последний мой вариант, который не работает пока. Подскажите ошибки, что я не так делаю.

Код:
#include <iostream.h>
#include <iostream>
#include <conio>
#include <stdio>
#include <math>
using namespace std;
void main()

{
double  x[10]={1,4,6,14,5,-11,9,2,4,10.1};
  double sum=0;
   for (int i=0; i<=9; i++)
   {
    sum=sum+x[i];
   }
double n=10, serx, dispersiax;
{
serx=sum/n;

for (int i=0; i<=9; i++)
   {
    float otkl[10]={pow(x[i]-serx,2)};
   }
    for (int i=0; i<=9; i++)
   {
    sum=sum+otkl[10];
   }

dispersiax=sum/(n-1);
printf ("seredniex=%.5f\ndispersiax=%.5f",serx,dispersiax);
}
getch();
}
И что меня смущает, то что в двух разных формулах я использую переменную sum. (sum/n - среднее; sum/(n-1) - дисперсия).

Последний раз редактировалось Игорь Густей; 19.06.2015 в 01:20. Причина: не знаю как вставить картирнку
Игорь Густей вне форума Ответить с цитированием
Старый 19.06.2015, 04:39   #2
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

А если бы массив был размером не 10, а 100, или 300, то что, писали бы ?
Код:
otkl299=pow(x[298]-serx,2);
otkl300=pow(x[299]-serx,2);
Чушь какая...

И вообще, зачем вам массив отклонений? Вам надо суммы искать.

Кстати, насчет дисперсии могу подсказать.
Дисперсия D[X] = M[(X-M[X])^2]
То есть надо считать сначала среднее, а потом снова в цикле - среднее квадратов отклонений.

Но обычно считают другим способом - за один заход
Вот,смотрите здесь , после слов Замечания
D[X] = M[X^2]-(M[X])^2
среднее квадратов минус квадрат среднего
type_Oleg вне форума Ответить с цитированием
Старый 19.06.2015, 09:57   #3
Игорь Густей
Новичок
Джуниор
 
Регистрация: 19.06.2015
Сообщений: 2
По умолчанию

Массив отклонений хочу найти, чтобы потом найти его сумму.
Игорь Густей вне форума Ответить с цитированием
Старый 19.06.2015, 18:41   #4
type_Oleg
Старожил
 
Аватар для type_Oleg
 
Регистрация: 02.03.2008
Сообщений: 2,499
По умолчанию

Вот, работает, без этих ваших 100500 переменных otkl..
Код:
#include<conio.h>
#include<iostream>

using namespace std;

double meanX(double xx[],int nn)  // функция для вычисления среднего
{
 double s=0;
 for(int i = 0; i<nn; i++) {s+=xx[i];}
	return s/nn;}

double varX(double xx[],int nn,double mean)	// функция для вычисления дисперсии
{
 double sotk=0;
 for(int i = 0; i<nn; i++) {sotk+=(xx[i]-mean)*(xx[i]-mean);}  // просто тупо умножая, без всяких pow,  поэтому и math не нужен 
	return sotk/nn;
	}

int main()
{
 double  x[10]={1,4,6,14,5,-11,9,2,4,10},serx,dispersiax;
 int n=10;
 serx=meanX(x,n);
 dispersiax=varX(x,n,serx);
 cout<<"M(X)= "<<serx<<"  D(x)= "<<dispersiax;
_getch();
}
Инклуды может быть у вас другие, у меня так.

Последний раз редактировалось type_Oleg; 19.06.2015 в 18:49.
type_Oleg вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Оброботка масива.найти елемент масива с указанием его адреса в строке и в столбце Rokko195 Паскаль, Turbo Pascal, PascalABC.NET 3 20.12.2012 07:22
Дисперсия и график Avatar1 C++ Builder 0 15.10.2012 21:16
Дисперсия tema654 Microsoft Office Excel 3 15.12.2011 14:28
Дисперсия CesaR_JC Помощь студентам 15 23.05.2010 01:48
Дисперсия. Гистограмма p4serhiy Помощь студентам 2 15.04.2010 08:34