More help with probability...

조회 수: 1 (최근 30일)
Nadia
Nadia 2013년 4월 24일
Hey, so I fixed the first part of this code, but now the for loop where I use "strcmpi" is not working properly. It's only accounting for "peach' and my peach_count returns 100000 and the other fruits are 0. It's really weird because my function works fine.
function x = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
x = C
clc; clear all;
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
What am I doing wrong??
  댓글 수: 6
Matt Kindig
Matt Kindig 2013년 4월 24일
To explain a little bit about why I was having you do those commands:
  • 'which produce' indicates the path to the produce.m file. I was specifically curious whether you had multiple 'produce.m' files on your path, which your results indicate you do not.
  • 'whos produce' indicates information about any variables 'produce' in your workspace. I had thought that perhaps you had a variable called 'produce' as well, which was overriding the function call. However, the fact that the whos command returned nothing indicates this is not the case.
I must admit that I'm stumped. Are you putting the function into a separate file as the script? In other words, you should have two different m-files:
=== produce.m
function C = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
=== main.m (or some other name)
clc; clear;
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
Nadia
Nadia 2013년 4월 25일
@Matt Kindig thanks so much!! I hadn't put them in separate m-files. Such a silly mistake, but thanks again!

댓글을 달려면 로그인하십시오.

채택된 답변

Ahmed A. Selman
Ahmed A. Selman 2013년 4월 24일
Just pay attention to how you use function call inside a program. Either you have two files as stated above, or use one main (calling function) which contains another (inner) function as:
% This is the main (calling) function
function output=firstFunction
peach_count = 0; panana_count = 0; papaya_count = 0;
N = 1e6;
for k = 1:N
fruit = produce;
if strcmpi(fruit,'peach')
peach_count = peach_count + 1;
elseif strcmpi(fruit, 'panana')
panana_count = panana_count + 1;
elseif strcmpi(fruit, 'papaya')
papaya_count = papaya_count + 1;
end
end
output=[peach_count;panana_count;papaya_count];
% Here is the inner function
function x = produce
A = 1e5;
B = rand;
C = ceil(A*B);
if (C>=1 && C<= 20000);
C = 'peach';
elseif (C>= 20001 && C<= 55000);
C = 'panana';
elseif (C >= 55001);
C = 'papaya';
end
x = C;
So, when you run:
OutPut=firstFunction
OutPut=
200191
349241
450568
Note: The output varies since it's based on a random creation.
Regards
  댓글 수: 1
Nadia
Nadia 2013년 4월 25일
Thanks so much!!!

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Programming에 대해 자세히 알아보기

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by