2009-12-25 13 views
7

मैं एक समारोह y है मान लीजिए (टी, x) = exp (-t) * sin (x)किसी भी लूप का उपयोग किए बिना दो चर के फ़ंक्शन कैसे उत्पन्न करें?

मैटलैब में, मैं परिभाषित

t = [0: 0.5: 5]; 
x = [0: 0.1: 10*2*pi]; 
y = zeros(length(t), length(x)); % empty matrix init 

अब, मैं मैट्रिक्स y कैसे परिभाषित करते हैं बिना किसी भी लूप का उपयोग करके, जैसे कि प्रत्येक तत्व y (i, j) में वांछित फ़ंक्शन y का मान (t(i), x(j)) पर होता है? नीचे यह है कि मैंने लूप का उपयोग करके इसे कैसे किया।

for i = 1:length(t) 
    y(i,:) = exp(-t(i)) .* sin(x); 
end 
+0

सुनिश्चित नहीं है कि आप कर सकते हैं - लूप चलाने के लिए लंबे समय तक ले रहा है, या आप क्यों चाहते हैं? –

+0

इस सरल उदाहरण में लूप एक समस्या नहीं है। लेकिन मैं वास्तव में बड़े वैक्टरों के लिए बिना लूप के इसे करने का तरीका सीखना चाहता हूं! – Aamir

उत्तर

12

आपका इनपुट वैक्टर x1xN है और t1xM, उत्पादन मैट्रिक्स yMxN है। x और t दोनों कोड को वेक्टरिज़ करने के लिए y के समान आयाम होना चाहिए।

[x_,t_] = meshgrid(x,t); 
y_ = exp(-t_) .* sin(x_); 

आपका उदाहरण एक साधारण 2 डी केस है। फंक्शन meshgrid() भी 3 डी काम करता है। कभी-कभी आप लूप से बच नहीं सकते हैं, ऐसे मामलों में, जब आपका लूप या तो 1: एन या 1: एम जा सकता है, सबसे छोटा चुनें। वेक्टरीकृत समीकरण (वेक्टर एक्स मैट्रिक्स गुणा) के लिए वेक्टर तैयार करने के लिए उपयोग करने वाला एक अन्य कार्य diag() है।

+0

वॉयला! इस तरह के एक सुरुचिपूर्ण समाधान के लिए धन्यवाद। एक सरल और सुरुचिपूर्ण मैट्रिक्स-गुणा समाधान के लिए – Aamir

6

meshgrid की कोई आवश्यकता नहीं है; बस उपयोग करें:

y = exp(-t(:)) * sin(x(:)'); %multiplies a column vector times a row vector. 
+0

+1। – gnovice

संबंधित मुद्दे

 संबंधित मुद्दे