Как решить для х для встроенной функции в MATLAB? - PullRequest
0 голосов
/ 11 июля 2019

Я собираюсь найти для p функцию биномиального распределения, где p - вероятность успеха.

Я перепробовал много методов, но ни один из них не работал, показан ниже один из методов, которые я использовал:

syms p

y = 1 - binocdf(5,15,p) == 0.999;

X = vpasolve(y, p,[-1 1]);

Это ошибка, которую я получил после запуска кода:

Ошибка при использовании symengine Невозможно доказать 'p <0 | 1 <p 'буквально. использование 'isAlways', чтобы проверить утверждение математически. Ошибка в sym / subsindex (строка 792) X = find (mupadmex ('symobj :: logic', A.s, 9)) - 1; </p>

Ошибка в sym / privsubsasgn (строка 1067) L_tilde2 = встроенный ('subsasgn', L_tilde, struct ('type', '()', 'subs', {varargin}), R_tilde);

Ошибка в sym / subsasgn (строка 904) C = privsubsasgn (L, R, inds {:});

Ошибка в binocdf (строка 63) y (k1) = NaN;

Ошибка в myfun (строка 6) y = binocdf (5,15, p) == 0,999;

1 Ответ

2 голосов
/ 11 июля 2019

Используйте дескриптор функции вместо функция syms , поскольку binocdf() не позволяет p быть syms переменная

y = 1 - binocdf(5,15,p) == 0.999; 

может быть переписана как

y = 1 - binocdf(5,15,p) - 0.999 == 0;
  • Используя дескриптор функции , опуская правую часть уравнения
y = @(p)1 - binocdf(5,15,p) - 0.999

fzero() находит корень функции, другими словами решает уравнениеy == 0

Также третий параметр в binocdf(5,15,p), а именно p, представляет собой вероятность в диапазоне от 0 до 1

  • изменить диапазон с [-1, 1] на [0, 1]
fzero(y, [0 1])

Весь код выглядит следующим образом

y = @(p)1 - binocdf(5,15,p) - 0.999;
X = fzero(y, [0 1])

Результат

X = 0.7432
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...