Variable not found in parfor loop

If I run the script:
z=1:1000;
parfor i=1:numel(z)
zfun(z(i))
end
which calls the function:
function zfun(z)
for j=1:50
for k=1:100
myz=z*10+myz*k;
end
end
save(fullfile('filepath', num2str(myz)), 'myz');
end
I get an error of Undefined function or variable 'myz' for the save command.
Any ideas how to fix this?

2 件のコメント

Walter Roberson
Walter Roberson 2017 年 1 月 20 日
Which MATLAB version?
My spidy-senses are suggesting you might be using R2015b or R2016a but not R2016b ?
JohnDylon
JohnDylon 2017 年 1 月 20 日
R2016b trial for Linux. (No error for 2014a on PC though!)

サインインしてコメントする。

 採用された回答

Walter Roberson
Walter Roberson 2017 年 1 月 20 日

0 投票

You do not initialize the variable in the zfun loop.

5 件のコメント

JohnDylon
JohnDylon 2017 年 1 月 21 日
Initializating "myz=[]" outside of the zfun loop and passing it through the function as zfun(z(i), myz) done the job. Thanks again!
Walter Roberson
Walter Roberson 2017 年 1 月 21 日
There should not be a need for that; you should be able to just initialize it to 1 inside zfun.
Initializing to [] is going to result in a lot of multiplying with the empty matrix, which will not be productive.
JohnDylon
JohnDylon 2017 年 1 月 21 日
Then you say
function zfun(z)
myz=1;
for j=1:50
for k=1:100
myz=z*10+myz*k;
end
end
save(fullfile('filepath', num2str(myz)), 'myz');
end
is better to do?
Walter Roberson
Walter Roberson 2017 年 1 月 21 日
Yes, that would have less overhead. However, due to finite precision of floating point numbers, the result of the above is going to be -inf below about -1/17 and +inf above it. The zero is at about -0.058197670686932642438500200510901 . If you were trying to find the zero, it would be much more effective to use the symbolic toolbox.
JohnDylon
JohnDylon 2017 年 1 月 22 日
Thank you for all valuable guidance.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeParallel for-Loops (parfor) についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by