Форум программистов, компьютерный форум, киберфорум
Matlab
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.88/25: Рейтинг темы: голосов - 25, средняя оценка - 4.88
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51

Формулы Бернулли, биномиальные коэффициенты, суммы рядов

29.03.2014, 00:30. Показов 5191. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите пожалуйста с построением графиков вероятностей.
Чтобы Вас не запутывать приведу более понятный код того что мне нужно построить в MathCade (см. картинку)
В конце концов мне нужно построить графики зависимостей P(m,Pэ), т.е. P(m,10^-2), P(m,10^-3), P(m,10^-4), P(m,10^-5).
Я попытался изобразить тоже самое в MatLab. Как видите там есть суммы рядов и число сочетаний.
В Маткаде все построилось без проблем. В Матлабе же постоянно выдает различные ошибки. Некоторые из них я уже исправил. И теперь он выдает следующее:

"The following error occurred converting from sym to double:
Error using mupadmex
Error in MuPAD command: DOUBLE cannot convert the input expression into a
double array.

If the input expression contains a symbolic variable, use the VPA function
instead.

Error in Psync (line 11)
P(k)=(factorial(S(k))/(factorial(r)*factorial(S(k)-r)))*(Pme)^r*(1-Pme)^(S(k)-r)+P(k); "

Читая мануалы никак не пойму в чем здесь причина. Объясните пожалуйста что ему не нравится и что такое Variable precision arithmetic. И если не сложно проверьте пожалуйста код на наличие других ошибок. В Матлабе я новичок.
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Pe=10^(-2);
m=0:1:30;
Py=2*Pe*(1-Pe);
syms m r;
Pme=symsum((factorial(m)./(factorial(r).*factorial(m-r))).*(Py).^r.*(1-Py).^(m-r),r,(m+1)/2,m);
S=[2 2 2 1 1 1 1 1 1 1];
for k=1:10
    P(k)=0;
    for r=1:S(k)
        if mod(r,2)~=0
            P(k)=(factorial(S(k))/(factorial(r)*factorial(S(k)-r)))*(Pme)^r*(1-Pme)^(S(k)-r)+P(k);
        end;
    end;
end;
Pk=P;
t=3;
Pmult=1;
for k=1:10
    Pmult=Pmult*(1-2*Pk(k)*(1-Pk(k)));
end;
P=Pmult^(t-1);
plot(m,P)
Миниатюры
Формулы Бернулли, биномиальные коэффициенты, суммы рядов  
Вложения
Тип файла: rar Code Matlab.rar (710 байт, 6 просмотров)
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2014, 00:30
Ответы с готовыми решениями:

Биномиальные коэффициенты
Мне задали создать программу в которой Вводится 2 числа - n и k. И Необходимо вывести биномиальные коэффициенты. Но к сожалению Я не понял...

Биномиальные коэффициенты
Доказать,что \sum_{k=0}^{n}\frac{1}{k+1}C_{n}^{k}=\frac{1}{n+1}*({2}^{n+1} -1)

Биномиальные коэффициенты
Подскажите, пожалуйста. Найти: Добавлено через 59 секунд \sum_{k=2}^{n}k(k-1)C_{n}^{k}

12
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.03.2014, 14:18
Лучший ответ Сообщение было отмечено AntonyV как решение

Решение

Попробуй такой вариант
Matlab M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
clear, clc
m = 0:30;
Pe = [1e-2, 1e-3, 1e-4, 1e-5]; 
 
Pme = zeros(length(m),length(Pe)); % инициализируем
for j = 1:length(Pe)
  Py = 2*Pe(j)*(1-Pe(j));
  for i = 1:length(m)
     r = fix((m(i)+1)/2):m(i);
     Pem(i,j) = sum( (factorial(m(i))./(factorial(r).*factorial(m(i)-r))) .* Py.^r .* (1-Py).^(m(i)-r) );
   end
   str{j}=['Pe=10^',num2str(log10(Pe(j)))]; % дедаем подпись
end
plot(m, Pe)
grid on
legend(str)
проверяй у меня нет под руками матлаба

*могут быть неточности при больших значениях m (m>20), так как факториал очень большой получается.
1
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
29.03.2014, 19:42  [ТС]
Спасибо! Немного причесал и все заработало! На основе этого доделал остальную часть)
Нашел еще функцию замечательную nshoosek(). Теперь факториалы можно не писать)
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.03.2014, 19:55
AntonyV, покажешь, что вышло?
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
29.03.2014, 20:01  [ТС]
Зосима, конечно)
Matlab M
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
clear, clc
m = 1:2:29;
Pe = [1e-2, 1e-3, 1e-4, 1e-5]; 
S=[2 2 2 1 1 1 1 1 1 1];
t=3;
 
Pme = zeros(length(m),length(Pe)); % инициализируем, создаем матрицу из нулей размером m  x Pe
Pk = zeros(length(S)); % инициализируем, создаем строку из нулей размером 1 x 10
P = zeros(length(m),length(Pe)); % инициализируем, создаем матрицу из нулей размером m  x Pe
Pmult = zeros(length(m),length(Pe)); % инициализируем, создаем матрицу из нулей размером m  x Pe
for j = 1:length(Pe)
  Py = 2*Pe(j)*(1-Pe(j)); % БПУ
  for i = 1:length(m)
     r = (m(i)+1)/2:m(i);
     Pme(i,j) = sum( (nchoosek(m(i),r)) .* Py.^r .* (1-Py).^(m(i)-r) );
     %Вероятность ошибочной оценки символа на выходе МЭ
     
     %Вероятность ошибки определения координат:
     for k=1:length(S)
         Pk(k)=0;
         for r=1:S(k)
             if mod(r,2)~=0
                 Pk(k)=(nchoosek(S(k),r))*((Pme(i,j))^r)*((1-Pme(i,j))^(S(k)-r))+Pk(k);
             end;
         end;
     end;
     
     %Вероятность правильной синхронизации:
     Pmult(i,j)=1;
     for k=1:length(S)
         Pmult(i,j)=Pmult(i,j)*(1-2*Pk(k)*(1-Pk(k)));
     end;
     P(i,j)=(Pmult(i,j))^(t-1); 
     
  end;
   str{j}=['Pe=10^',num2str(log10(Pe(j)))]; % делаем подпись
end
subplot(1,2,1); plot(m, Pme)
subplot(1,2,2); plot(m, P)
grid on
legend(str)
Сейчас попробовал заменить factorial на nchoosek. Пишет ошибку:
Matlab M
1
2
3
4
5
Error using nchoosek (line 24)
The second input has to be a non-negative integer.
 
Error in Ps2 (line 17)
     Pme(i,j) = sum( (nchoosek(m(i),r)) .* Py.^r .* (1-Py).^(m(i)-r) );
Не понимаю в чем дело. r в обоих случаях больше 1. Впринципе не критично, но хотелось бы разобраться.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.03.2014, 20:17
в моем варианте r - массив значений, может поэтому не хочет?
попробуй отдельно проверить: nchoosek(10,[3,4,5])
*не хотелось бы еще один цикл лепить
**еще меня смущают строки 20-23: там Р(к) просто перезаписывается? если да, тогда после цикла получим результат только для последнего значения r и какой тогда смысл в цыкле?...
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
29.03.2014, 20:32  [ТС]
Проверил nchoosek(10,[3,4,5]) пишет тоже самое. Похоже там только переменные стоять должны.
Цитата Сообщение от Зосима Посмотреть сообщение
еще меня смущают строки 20-23: там Р(к) просто перезаписывается? если да, тогда после цикла получим результат только для последнего значения r и какой тогда смысл в цыкле?...
Там в 23 строке:
Цитата Сообщение от AntonyV Посмотреть сообщение
Matlab M
1
Pk(k)=(nchoosek(S(k),r))*((Pme(i,j))^r)*((1-Pme(i,j))^(S(k)-r))+Pk(k);
я пытаюсь получить сумму ряда при r=1..S(k) для каждой координаты Pk(k) (Для каждой координаты r=1..S(k) свое). По аналогии с mathcad я в конце строки наращиваю сумму на значение предыдущего P(k), полученного при предыдущем r. На выходе цикла for для каждого k свое Pk(k). Или здесь все по другому?)
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.03.2014, 20:55
а может местами поменять нужно? nchoosec([2,3,4],10)
и еще r должно быть целым, для чего я писал fix((m(i)+1)/2), т.е. берем целую часть от деления

ааа, если вконце есть +Р(к), то все впорядке я сквозь телефон его не увидел
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
29.03.2014, 21:07  [ТС]
Если поменять местами то пишет:
ans =

Empty matrix: 0-by-10
Но тогда это будет уже другое сочетание.
Я вот, кстати, не понял почему Вы поставили fix) В принципе исходя из теор формул мне вроде и не нужно целую часть выделять. Подумал что расчеты будут точнее если писать сумму без fix.
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
29.03.2014, 21:18
если nchoosec от массива не работает, остается делать еще один цикл по r и накапливать сумму:
Pem(i,j) = Pem(i,j) + nchoosec......

почему должно быть целым? а сколько будет факториал от 5.5 (если m=10)?
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
30.03.2014, 16:19  [ТС]
Цитата Сообщение от Зосима Посмотреть сообщение
почему должно быть целым? а сколько будет факториал от 5.5 (если m=10)?
Согласен). Прошу прощения.
Но как же тогда стандартный калькулятор windows вычисляет этот факториал?)
0
 Аватар для Зосима
5246 / 3574 / 379
Регистрация: 02.04.2012
Сообщений: 6,477
Записей в блоге: 18
30.03.2014, 20:44
Скорее всего там используется гамма-функция но в данном случае, когда мы считаем кол-во перестановок и комбинаций, оное не может быть дробным
0
0 / 0 / 0
Регистрация: 02.03.2013
Сообщений: 51
31.03.2014, 20:58  [ТС]
Спасибо Вам большое.) Без Вас бы не справился!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2014, 20:58
Помогаю со студенческими работами здесь

Биномиальные коэффициенты
Пожалуйста помогите решить. Никак не могу сообразить, как это делается.

Биномиальные коэффициенты
Биномиальные коэффициенты . расписать сгласно утверждению. 1. Сnr основание n стпень r 2. Cnr= Cnn-r 3. Cnr=Cn-1r +Cn+1r ...

Биномиальные коэффициенты. Делимость
Ребята помогите пожалуйста...Очень важно!!! Доказать или опровергнуть след. утверждение Пусть p>=7-такое простое число, что р+1...

Биномиальные коэффициенты по модулю
Дано n и k Требуеться посчитать биномиальный коэффицент по mod mod = 998244353 Модуль простой (С_n^k) % mod Помню была...

Вычислить биномиальные коэффициенты
Вычислить биномиальный коэффициент: C(M, N) = \frac{N!}{M!(N - M)!} где 0<=M<=N кто может помочь?


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru