2010-02-05 8 views
11

मैं एक साधारण फ़ंक्शन लिखने की कोशिश कर रहा हूं जिसमें दो इनपुट, x और y लेते हैं, और इन्हें तीन अन्य सरल कार्यों में भेजते हैं जो उन्हें जोड़ते हैं, गुणा करते हैं और विभाजित करते हैं। मुख्य कार्य को परिणामों को x, y, और कुल मिलाकर एक स्ट्रिंग के रूप में प्रदर्शित करना चाहिए।मैं MATLAB में परिवर्तनीय मानों को टेक्स्ट स्ट्रिंग में कैसे डालूं?

मुझे लगता है कि आउटपुट तर्कों के बारे में मुझे कुछ समझ नहीं आ रहा है। वैसे भी, यहाँ मेरी (दयनीय) कोड है:

function a=addxy(x,y) 
a=x+y; 

function b=mxy(x,y) 
b=x*y; 

function c=dxy(x,y) 
c=x/y; 

मुख्य कार्य है:

function [d e f]=answer(x,y) 
d=addxy(x,y); 
e=mxy(x,y); 
f=dxy(x,y); 
z=[d e f] 

कैसे मैं एक स्ट्रिंग में के लिए x, y, d, e, और f मान मिलता है? मैंने विभिन्न matrices और सामान की तरह कोशिश की:

['the sum of' x 'and' y 'is' d] 

लेकिन कोई भी चर दिखाई नहीं दे रहा है।

दो अतिरिक्त मुद्दों:

  • समारोह क्यों लौटा रहा है "ans 3" भले ही मैंने z की लंबाई के लिए नहीं पूछा?
  • यदि कोई भी शुरुआती लोगों के लिए MATLAB स्क्रिप्टिंग के लिए एक अच्छी पुस्तक की सिफारिश कर सकता है तो मैं वास्तव में इसकी सराहना करता हूं।
+0

उपयोग sprintf है: str = 'डीईएफ़'; var = स्प्रिंट ('एबीसी% sghi', str); => abcDEFghi – KillBill

उत्तर

4

Peter के रूप में और Amro उदाहरण देकर स्पष्ट करना, आप उन्हें प्रदर्शित या उन्हें अन्य चरित्र तार के साथ जोड़ करने के लिए पहले से प्रारूपित तार करने के लिए संख्यात्मक मान कन्वर्ट करना होगा। आप इसे FPRINTF, SPRINTF, NUM2STR, और INT2STR फ़ंक्शंस का उपयोग करके कर सकते हैं।


ans = 3 एक आउटपुट के रूप में हो रही है के संबंध में, यह शायद इसलिए है क्योंकि आप एक चर के लिए answer से उत्पादन बताए नहीं हैं।आप उत्पादन मूल्यों के सभी प्राप्त करना चाहते हैं, तो आप निम्नलिखित तरीके से answer फोन करना होगा:

[out1,out2,out3] = answer(1,2); 

यह मान out1 में d, out2 में मूल्य e, और out3 में मूल्य f स्थापित करेंगे । आप निम्न कर जब:

answer(1,2) 

MATLAB स्वचालित रूप से पहले उत्पादन d (जो इस मामले में मान 3 है) डिफ़ॉल्ट कार्यक्षेत्र चर ans को आवंटित करेगा।


MATLAB सीखने के लिए एक अच्छा संसाधन सुझाव के लिए सम्मान के साथ, आप MATLAB प्रलेखन के मूल्य कम नहीं होना चाहिए। मैंने अपने द्वारा उपयोग किए जाने वाले अधिकांश चीज़ों को सीखा है। आप इसे online उपयोग कर सकते हैं, या MATLAB का आपके प्रति भीतर कार्यों DOC, HELP, या HELPWIN का उपयोग कर।

+0

धन्यवाद, यह बहुत उपयोगी है। बस एक और त्वरित प्रश्न - अगर मैं एक समारोह में एक आउटपुट चर बना सकते हैं - उदाहरण के लिए: समारोह एक = सरल (x); ए = एक्स^2; मैं अन्य कार्यों से 'ए' के ​​मूल्य तक कैसे पहुंच सकता हूं?उदाहरण के लिए: फ़ंक्शन बी = सरल 2 (x); बी = ए * एक्स; 'सरल' – jefflovejapan

+1

@jefflovejapan से% कॉलिंग: ऐसे मामले में, आपका दूसरा फ़ंक्शन 'फ़ंक्शन बी = सरल 2 (x) बी = सरल (x) * x; 'होगा। दूसरे शब्दों में, आप 'simple2 'के भीतर' सरल 'को कॉल करेंगे और इसका आउटपुट' बी' के समीकरण में उपयोग किया जाएगा। – gnovice

12

करने का तरीका यहां तार करने के लिए संख्या बदलती है, और अन्य चीजों के लिए तार में शामिल होने के (यह अजीब है):

>> ['the number is ' num2str(15) '.'] 
ans = 
the number is 15. 
+0

बहुत बहुत धन्यवाद। – jefflovejapan

+0

यह सहायक था, लेकिन यह अभी भी जिस तरह से मैं चाहता हूं उस पर काम नहीं कर रहा हूं। जब मैं फ़ंक्शन चलाता हूं (1,2) मुझे ans = 3 मिलता है, जिसका अर्थ है कि अन्य दो फ़ंक्शंस, mxy और dxy, x और y के मान नहीं देख रहे हैं। साथ ही, सभी आउटपुट तर्कों के मान खाली हैं। मुझे लगता है कि वहाँ वास्तव में सरल कुछ है कि मैं यहाँ चर के साथ नहीं कर रहा हूँ है, लेकिन मैं समझ नहीं कि यह क्या है। – jefflovejapan

6

आप परिचित सी वाक्य रचना के साथ fprintf/sprintf का उपयोग कर सकते हैं। हो सकता है कि कुछ की तरह:

fprintf('x = %d, y = %d \n x+y=%d \n x*y=%d \n x/y=%f\n', x,y,d,e,f) 

अपनी टिप्पणी पढ़ने, यह कैसे आप मुख्य कार्यक्रम से अपनी कार्यों का उपयोग है:

x = 2; 
y = 2; 
[d e f] = answer(x,y); 
fprintf('%d + %d = %d\n', x,y,d) 
fprintf('%d * %d = %d\n', x,y,e) 
fprintf('%d/%d = %f\n', x,y,f) 
इसके अलावा जवाब() समारोह के लिए

, आप निर्दिष्ट कर सकते के बजाय एक वेक्टर के लिए उत्पादन मूल्यों तीन अलग चर:

function result=answer(x,y) 
result(1)=addxy(x,y); 
result(2)=mxy(x,y); 
result(3)=dxy(x,y); 

और के रूप में बस इसे कहते हैं:

out = answer(x,y); 
+0

धन्यवाद, यह निश्चित रूप से सरल है, लेकिन अभ्यास विशेष रूप से आपको कार्यों का निर्माण करने और उन्हें आगे और आगे चर करने के लिए कहता है। – jefflovejapan

+0

यह बहुत अच्छा है, बहुत बहुत धन्यवाद। यह अच्छा है कि आपको पहले से 'परिणाम' का आकार निर्दिष्ट करने की आवश्यकता नहीं है। – jefflovejapan

2

मैं सिर्फ महसूस किया कि मैं क्यों इतना परेशानी हो रही किया गया था - MATLAB में आप एक सरणी वर्ग कोष्ठकों के उपयोग के रूप में अलग-अलग लंबाई के तार की दुकान नहीं कर सकते हैं। वर्ग कोष्ठक का उपयोग करना एक भी चरित्र सरणी में अलग-अलग लंबाई की तार संयोजित करता।

>> a=['matlab','is','fun'] 

a = 

matlabisfun 

>> size(a) 

ans = 

    1 11 

एक वर्ण सरणी में, एक स्ट्रिंग में प्रत्येक वर्ण एक तत्व के रूप में गिना जाता है, जो बताता है कि 1x11 का आकार क्यों है।

एक सरणी के तत्वों के रूप लंबाई में परिवर्तन के तार की दुकान करने के लिए, आप एक सेल सरणी के रूप में बचाने के लिए घुंघराले ब्रेसिज़ का उपयोग करने की जरूरत है। सेल सरणी में, लंबाई के बावजूद, प्रत्येक स्ट्रिंग को एक अलग तत्व के रूप में माना जाता है।

>> a={'matlab','is','fun'} 

a = 

    'matlab' 'is' 'fun' 

>> size(a) 

ans = 

    1  3 
0

मैं जो कुछ चाहता था उसके साथ कुछ ढूंढ रहा था, लेकिन इसे वापस एक चर में रखना चाहता था।

तो यह मैं

variable = ['hello this is x' x ', this is now y' y ', finally this is d:' d]

क्या किया मूल रूप से

variable = [str1 str2 str3 str4 str5 str6]

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