Matlab

2009-02-23 11 views
7

से एक्सेल शीट संशोधित करें क्या मैटलैब से एक्सेल में वर्कशीट खोलना और सूत्रों को संपादित करना संभव है? विचार पिछले सेल से मूल्य के लिए प्रत्येक सेल में अनिश्चितता के साथ दूसरी शीट बनाकर अनिश्चितता विश्लेषण को स्वचालित करना है। अनिवार्य रूप से, मैं कोशिकाओं को चर के रूप में देखना चाहता हूं और प्रत्येक सेल के लिए एसक्यूआरटी (एसयूएम (आंशिक (xi)^2)) करना चाहता हूं। Matlab को कैल्क के साथ कोई समस्या नहीं होनी चाहिए, लेकिन क्या यह चादरों में सूत्रों को संपादित कर सकता है?Matlab

वर्तमान में प्रक्रिया एक्सेल से मैटलैब में कॉपी और पेस्ट करना है। यहां एक छोटा समारोह है कि समीकरणों के सरणी पर के खिलाफ matlab में अनिश्चितता करता है:

=(9*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^4/C!Y3^6/(C!U3^C!Z3)^6*F3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*O3^2+1/4*C!S3^2/C!V3^4*C!W3/(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*P3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^4*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*Q3^2+1/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*S3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*C!Z3^2/C!U3^2*U3^2+4*C!S3^2/C!V3^6*C!W3*(C!O 
3-C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*V3^2+1/4*C!S3^2/C!V3^4/C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*W3^2+1/4*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3^3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*X3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^8/(C!U3^C!Z3)^6*Y3^2+9*C!S3^2/C!V3^4*C!W3*(C!O3- 
C!P3)/C!X3*C!Q3^6*C!F3^6/C!Y3^6/(C!U3^C!Z3)^6*LOG(C!U3)^2*Z3^2)^(1/2) 
:

function [f_u_total f_u] = uncertAnalysis(f, vars, vars_u) 
    f_u = []; 
    f_u_total = []; 
    for(i=1:length(f)) 
     f(i) 
     item = uncertAnalysisi(f(i), vars, vars_u); 
     f_u = [f_u; item(1)]; 
     f_u_total = [f_u_total; item(1)]; 
    end 
end 


function [f_u_total f_u] = uncertAnalysisi(f, vars, vars_u) 
    f_u = []; 
    % take the partials and square them 
    for i=1:length(vars) 
     f_u = [f_u; vars(i) (diff(f, vars(i)).*vars_u(i)).^2]; 
    end 
    % calculate the RSS 
    f_u_total = (sum(f_u(:,2))).^.5; 
end 

एक अलग रूप में के रूप में, समीकरण कुछ इस तरह (कारण है कि मैं इस हाथ से नहीं कर रहा हूँ) देखो

+0

मैं पूछने के लिए, तुम क्यों सब पर इस बात के लिए Excel का उपयोग कर रहे हैं? यह वास्तव में इस तरह के वैज्ञानिक डेटा विश्लेषण के लिए इरादा नहीं है। आप पाठ फ़ाइलों को डेटा निर्यात करने, MATLAB में आयात करने, अपने परिणामों की गणना करने, फिर पाठ के रूप में सहेजने और Excel में वापस आयात करने से बेहतर हो सकते हैं। –

+1

डेविड, यह हमारी प्रयोगशाला में 'मानक' (मैकेनिकल इंजीनियरिंग प्रयोगशाला) है। मैं सहमत हूं, और अगर मैं कर सकता हूं तो मैटलैब में चीजों को पूरी तरह से रखना पसंद करता हूं। हालांकि मुझे कहना होगा कि एक्सेल के पास इसकी योग्यता है। उदाहरण के लिए जब आप डेटा लेते हैं तो शीट 'प्रोग्राम किए गए' होने पर कुछ अच्छी वास्तविक समय गणना/विज़ुअलाइज़ेशन प्रदान करता है। – ccook

उत्तर

5

आप कॉम/ActiveX/स्वचालन के माध्यम से यह करने के लिए सक्षम होना चाहिए। External Interfaces दस्तावेज़ देखें; एक्सेल के ऑटोमेशन इंटरफेस के माध्यम से Excel दस्तावेज़ों तक पहुंचने के लिए एक उदाहरण है।

मेरे पास एक्सेल में इस तरह से मैनिप्लेट करने का कोई अनुभव नहीं है, लेकिन मुझे पता है कि आप एक्सेल में ऑटोमेशन के माध्यम से कुछ भी कर सकते हैं और सेल सूत्रों को संपादित करना मुश्किल नहीं लगता है।

संपादित करें: मैं एक्सेल ऑब्जेक्ट मॉडल के लिए एक संदर्भ नहीं मिल सकता है, लेकिन यहाँ एक और उदाहरण है: http://support.microsoft.com/kb/301982

+0

धन्यवाद जेसन, यह आशाजनक लग रहा है। ऐसा लगता है कि मैं कार्यपुस्तिका में एक अतिरिक्त वर्कशीट भी जोड़ सकता हूं। – ccook

+0

उदाहरण के लिए http://www.mathworks.com/support/solutions/data/1-17PWC.html?solution=1-17PWC पर एक नज़र डालें। – nimrodm

2

संपादित करें: मेरी पिछली धारणा है कि XLSWRITE काम नहीं करेगा गलत था। मैंने MATLAB में निम्नलिखित कोशिश की:

xlswrite('xltest.xls',{'1' '2' '=SUM(A1,B1)'}); 

और जब मैंने एक्सेल में फ़ाइल खोली, तो वास्तव में यह कार्य था! इस पर सीमा यह होगी कि आपको Excel में केवल फ़ंक्शंस का उपयोग करना होगा।

दुर्भाग्य से, मैं XLSREAD विश्वास नहीं है MATLAB में सूत्रों (यह सिर्फ परिणाम प्राप्त करने के लिए प्रकट होता है) पढ़ सकते हैं।

पहले का सुझाव दिया विकल्प:

आप MathWorks वेबसाइट पर Spreadsheet Link EX सॉफ्टवेयर की जाँच करने के लिए हालांकि मैं थोड़ा इसके साथ अपरिचित हूँ और यकीन नहीं करता है, तो भी है कि तुम क्या जरूरत है क्या कर सकते हैं कर सकते हैं। आपको कुछ और देखना चाहिए जो आपको देखना चाहिए MATLAB Builder EX, जो "आपको MATLAB® अनुप्रयोगों को आपके संगठन की एक्सेल® कार्यपुस्तिकाओं में मैक्रो फ़ंक्शन या एड-इन्स के रूप में एकीकृत करने देता है"। होनहार ध्वनि ...

+0

लैब व्यू में उपयोग किए गए कुछ एक्सएलएस पढ़ने के तरीकों के समान लगता है ... एचएम। लिंक को चेक आउट करते हुए, – ccook

+0

मुझे लगता है कि वे निश्चित रूप से काम करेंगे, हालांकि कुछ हद तक कीमत बाधा है। अगर मुझे एक मुफ्त विकल्प नहीं मिलता है तो मुझे लगता है कि मैं दूसरे की तरह दिखने वाला हूं। टाई +1 – ccook

+0

अपडेट के लिए धन्यवाद। शेड पढ़ना काम नहीं करता है :( – ccook

2

यह एक बहुत सुरुचिपूर्ण समाधान नहीं है, लेकिन यदि आप एक नया .xls स्प्रैडशीट बस एक टैब-सीमांकित (या CSV) फ़ाइल, आप मैटलैब सूत्रों उत्पन्न हो सकता है बचाने के लिए और जब एक्सेल दस्तावेज़ को खोलता है मूल्य populate जाएगा।

पर्ल में, मैं यह कुछ इस तरह संभाला है:

 
open(OUTPUT,'>tmpfile.xls'); 
print OUTPUT "1\t2\t=A1+B1\n"; 
close(OUTPUT); 

और जब tmpfile.xls Excel में खोला जाता है, सेल C1 3 के रूप में प्रदर्शित करेगा, जो प्रभावी रूप से अपडेट करेंगे उचित रूप से करता है, तो A1 या B1 बदल रहे हैं।

(मैं Matlab के साथ अच्छा नहीं कर रहा हूँ, इसलिए मैं प्लग इन की किसी भी प्रकार का ज्ञान नहीं है)

+0

स्पष्टीकरण के लिए, आप इसे एक एक्सएलएस के रूप में सहेज सकते हैं और यह समीकरण बनाए रखेंगे, मूल्यों को नहीं? – ccook

+0

यह सही है। यह निश्चित रूप से जंकी है, लेकिन एक्सेल ऑटो-ट्रांसलेशन करेगा और फॉर्मूला बनाएगा। संदेह में, इसे खोलें और फिर इसे "असली" .xls के रूप में सहेजें :) (मुझे यह भयानक लगता है, हालांकि) – kyle

+0

लॉल, वास्तव में 'जंकी'। लेकिन यह सूत्र प्राप्त करने का सबसे आसान तरीका हो सकता है। – ccook

2

उपयोग कॉम/ActiveX।आप निम्न आदेश के माध्यम से एक एक्सेल उदाहरण खोल सकते हैं:

xlApp = COM.Excel.Application; 

फिर कोड पूर्ण होने के संयोजन का उपयोग करें और एक्सेल में वीबीए सहायता स्वयं को बाकी काम करने के लिए करें।

,

xlApp.Quit; 
delete(xlApp); 

साथ एक्सेल बंद करने के लिए एक तरफ ध्यान दें पर याद रखें तथाकथित सीएसई (नियंत्रण-Shift-Enter) सूत्रों मदद मिल सकती है? Google देखें।

+0

क्या आपको COM शुरू करने के लिए अपने पहले कमांड को आगे बढ़ाने की आवश्यकता नहीं है? यदि आप करते हैं, तो आदेश क्या है? – Hans

+0

नहीं। यह सिर्फ काम करना चाहिए। – Nzbuu

+0

क्या यह xlApp = actxserver ('Excel.Aplication') जैसा ही है; ? – Hans