जब सी कोड MATLAB सांकेतिक शब्दों में बदलनेवाला का उपयोग कर पैदा करने के साथ उत्पादन आकार infers, व्यवहार भिन्न एक if
एक और if
के मुख्य भाग में या उसके else
खंड में होता है जब है। निम्नलिखित मामले आसानी से उत्पादन होने आकार 5x5 के साथ सी कोड बनाता है:कैसे MATLAB कोड पीढ़ी नेस्टेड शाखाओं
function y = foo1(u)
if u > 0
y = zeros(2,2);
else
y = zeros(5,5);
end
अब इस एक के रूप में अच्छी तरह से काम करता है
function y = foo2(u,v)
if u > 0
y = zeros(2,2);
else
y = zeros(5,5);
if v > 0
y = 2 * y;
end
end
लेकिन यह एक कोड उत्पन्न करने के लिए विफल रहता है, आकार बेमेल के बारे में शिकायत:
function y = foo3(u,v)
if u > 0
y = zeros(2,2);
if v > 0
y = 2 * y;
end
else
y = zeros(5,5);
end
यहां कमांड लाइन में आउटपुट है:
>> codegen foo1.m -args {0}
>> codegen foo2.m -args {0,0}
>> codegen foo3.m -args {0,0}
??? Size mismatch (size [2 x 2] ~= size [5 x 5]).
The size to the left is the size of the left-hand side of the assignment.
Error in ==> foo3 Line: 8 Column: 5
Code generation failed: Open error report.
Error using codegen (line 144)
मैंने MATLAB R2013b और R2015a में यह व्यवहार देखा है।
बस स्पष्ट करने के लिए, क्योंकि इसका स्पष्ट रूप से उल्लेख नहीं किया गया था: 'coder.varsize ('y', [5,5])' मैट्रिक्स के चर आकार के लिए '5 5]' * ऊपरी बाउंड * के रूप में निर्दिष्ट करता है । एक या अधिक आयामों को निश्चित रूप से निर्दिष्ट करना और दूसरों को परिवर्तनीय आकार के रूप में निर्दिष्ट करना भी संभव है - उत्तर में लिंक किए गए दस्तावेज़ पृष्ठ में यह और अधिक। – mikkola
वर्थ नोटिंग यह है कि ओपी में कोई भी उदाहरण मान्य नहीं है। यदि किसी कथन के अंदर घोषित किया गया है तो चर में अलग-अलग दायरे होंगे। चूंकि यह कोड मैटलैब में काम करता है, इसलिए उम्मीद है कि मैटलैब कोडर इसे हल करने में सक्षम होगा, लेकिन कोई इसे नहीं मान सकता है। मुझे लगता है कि 'foo3' में समस्या को' y' के साथ करना है यदि if statement ('y = 2 * y') में उपयोग किया जाता है और फिर अन्य कथन में फिर से परिभाषित किया जाता है, जिसे बाद में पाठ में लिखा जाता है। मुझे लगता है कि यह मैटलैब कोडर को भ्रमित करता है। हालांकि मैं पूरी तरह से यकीन नहीं कर रहा हूँ। – patrik
@patrik, उदाहरणों को वैध सी होने की आवश्यकता नहीं है। MATLAB कोडर का काम MATLAB भाषा के उप-समूह से वैध सी का उत्पादन करना है जो कोडेजन के लिए समर्थित है। उस ने कहा, सी स्टाइल के समान, MATLAB चर के सामने घोषित करना, कोडर को समझने के लिए कोड को आसान बना सकता है। –