याकूबियन मैट्रिक्स का निर्माण करें


10

अज्ञात के वेक्टर को ले लो यहाँ छवि विवरण दर्ज करें, और कुछ सामान्य भिन्न फ़ंक्शन को लागू करें यहाँ छवि विवरण दर्ज करेंJacobian तो एक मैट्रिक्स द्वारा दिया जाता है यहाँ छवि विवरण दर्ज करेंऐसी है कि:

यहाँ छवि विवरण दर्ज करें

उदाहरण के लिए, मान लीजिए m=3और n=2। तब (0-आधारित अनुक्रमण का उपयोग करके)

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

जैकोबियन fतो है

यहाँ छवि विवरण दर्ज करें

इस चुनौती का लक्ष्य इस याकूब मैट्रिक्स को प्रिंट करना है।

इनपुट

आपका कार्यक्रम / समारोह इनपुट दो धनात्मक पूर्णांक के रूप में लेना चाहिए mऔर n, जिनमें से घटकों की संख्या का प्रतिनिधित्व करते हैं fऔर uक्रमशः। इनपुट किसी भी वांछित स्रोत (stdio, फ़ंक्शन पैरामीटर, आदि) से आ सकता है। आप उस आदेश को प्राप्त कर सकते हैं जिसमें ये प्राप्त होते हैं, और यह आपके उत्तर के लिए किसी भी इनपुट के अनुरूप होना चाहिए (कृपया अपने उत्तर में निर्दिष्ट करें)।

उत्पादन

कुछ जो याकूब मैट्रिक्स का प्रतिनिधित्व करता है। इस प्रतिनिधित्व को स्पष्ट रूप से जेकोबिएन मैट्रिक्स के सभी तत्वों को स्पष्ट करना चाहिए, लेकिन प्रत्येक शब्द का सटीक रूप कार्यान्वयन तब तक परिभाषित किया जाता है जब तक कि यह स्पष्ट नहीं है कि क्या विभेदित किया जा रहा है और किस के संबंध में है, और प्रत्येक प्रविष्टि तार्किक क्रम में आउटपुट है। मैट्रिक्स का प्रतिनिधित्व करने के लिए स्वीकार्य स्वीकार्य उदाहरण:

  1. उन सूचियों की एक सूची जहां बाहरी सूची का प्रत्येक प्रवेश जैकबियन की एक पंक्ति से मेल खाता है, और आंतरिक सूची का प्रत्येक प्रविष्टि याकूब के एक स्तंभ से मेल खाती है।
  2. एक स्ट्रिंग या शाब्दिक आउटपुट जहां प्रत्येक पंक्ति याकूबियन की एक पंक्ति है, और प्रत्येक सीमांकक रेखा में अलग-अलग प्रविष्टि जैकोबियन के एक स्तंभ से मेल खाती है।
  3. एक मैट्रिक्स के कुछ चित्रमय / दृश्य प्रतिनिधित्व। उदाहरण: MatrixFormकमांड का उपयोग करते समय मैथेमेटिका द्वारा क्या दिखाया गया है
  4. कुछ अन्य सघन मैट्रिक्स ऑब्जेक्ट, जहां हर प्रविष्टि पहले से ही मेमोरी में संग्रहीत होती है और क्वियर किया जा सकता है (यानी आप जनरेटर ऑब्जेक्ट का उपयोग नहीं कर सकते हैं)। उदाहरण होगा कि कैसे गणितज्ञ आंतरिक रूप से एक मैट्रिक्स ऑब्जेक्ट का प्रतिनिधित्व करता है

उदाहरण प्रविष्टि प्रारूप:

  1. प्रपत्र की एक स्ट्रिंग d f_i/d u_j, जहाँ iऔर jपूर्णांक हैं। उदाहरण के लिए: d f_1/d u_2। ध्यान दें कि इन स्थानों के बीच dऔर f_1या x_2वैकल्पिक हैं। इसके अतिरिक्त, अंडरस्कोर भी वैकल्पिक हैं।
  2. रूप की एक स्ट्रिंग d f_i(u_1,...,u_n)/d u_jया d f_i(u)/d u_j। यही है, फ़ंक्शन घटक के इनपुट पैरामीटर f_iवैकल्पिक हैं, और या तो स्पष्ट रूप से वर्तनी या कॉम्पैक्ट रूप में छोड़ा जा सकता है।
  3. एक स्वरूपित चित्रमय आउटपुट। पूर्व: जब आप अभिव्यक्ति का मूल्यांकन करते हैं तो गणितज्ञ क्या कहता हैD[f_1[u_,u_2,...,u_n],u_1]

आप चुन सकते हैं कि आरंभिक सूचकांक uऔर क्या fहैं (कृपया अपने उत्तर में निर्दिष्ट करें)। आउटपुट किसी भी वांछित (stdio, रिटर्न वैल्यू, आउटपुट पैरामीटर, आदि) के लिए हो सकता है।

परीक्षण के मामलों

निम्नलिखित परीक्षण मामले कन्वेंशन का उपयोग करते हैं m,n। इंडेक्स को 0-आधारित दिखाया गया है।

1,1
[[d f0/d u0]]

2,1
[[d f0/d u0],
 [d f1/d u0]]

2 2
[[d f0/d u0, d f0/d u1],
 [d f1/d u0, d f1/d u1]]

1,2
[[d f0/d u0, d f0/d u1]]

3,3
[[d f0/d u0, d f0/d u1, d f0/d u2],
 [d f1/d u0, d f1/d u1, d f1/d u2],
 [d f2/d u0, d f2/d u1, d f2/d u2]]

स्कोरिंग

यह कोड गोल्फ है; बाइट्स में सबसे छोटा कोड जीतता है। मानक खामियों को मना किया जाता है। आपको किसी भी अंतर्निर्मित वांछित का उपयोग करने की अनुमति है।

जवाबों:


4

पायथन, 63 बाइट्स

lambda m,n:["df%d/du%%d "%i*n%tuple(range(n))for i in range(m)]

के लिए m=3,n=2, आउटपुट

['df0/du0 df0/du1 ', 'df1/du0 df1/du1 ', 'df2/du0 df2/du1 ']

स्ट्रिंग स्वरूपण 1 बाइट से अधिक स्पष्ट है

lambda m,n:[["df%d/du"%i+`j`for j in range(n)]for i in range(m)]

3

आर, 93 78 बाइट्स

function(M,N){v=vector();for(i in 1:N){v=cbind(v,paste0("df",1:M,"/du",i))};v}

नंबरिंग 1-आधारित है।

-15 बाइट्स @AlexA को धन्यवाद। रिमेक!


1
आप फ़ंक्शन नाम को हटाकर कुछ बाइट्स को सहेज सकते हैं, अर्थात f=, जैसा कि यहाँ सामान्य अभ्यास है। R किसी फ़ंक्शन में मूल्यांकित अंतिम चीज़ को भी लौटाता है, इसलिए आप vइसके बजाय बस उपयोग कर सकते हैं return(v)
एलेक्स ए।

1
आपको 0 के बजाय 1 से अनुक्रमित करके बाइट्स को बचाने में सक्षम होना चाहिए, जिसे ओपी द्वारा अनुमति है।
एलेक्स ए।

@AlexA। बहुत दिलचस्प टिप्पणी, बहुत बहुत धन्यवाद!
Frédéric

मेरा सौभाग्य। :)
एलेक्स ए।

3

मैक्सिमा, 68 बाइट्स

यह बहुत बुरा है मैं मैक्सिमा को नहीं जानता जैसे मैं अपने प्रिय सी और मतलूब को जानता हूं। लेकिन मैं फिर भी कोशिश करूँगा।

f(m,n):=(x:makelist(x[i],i,m),g:makelist(g[i](x),i,n),jacobian(g,x))

मैक्सिमा दुभाषिया के रूप में TeXmacs का उपयोग करके उदाहरण सत्र, ज्यादातर स्वच्छ गणित प्रतिपादन के लिए:

TeXmacs में मैक्सिमा सत्र

बहुत अच्छी तरह से सूची बनाने के बेहतर तरीके हो सकते हैं और जैसे कि मैक्सिमा (मैं विशेष रूप से सूची मार्करों के बिना कार्यों को प्रदर्शित करना चाहूंगा, []), लेकिन मैं भाषा को अच्छी तरह से नहीं जानता।


1

रूबी, 53 बाइट्स

f0-अनुक्रमित है, u1-अनुक्रमित है। इसे ऑनलाइन आज़माएं!

->m,n{m.times{|i|p (1..n).map{|j|"d f#{i}/d u#{j}"}}}

प्रत्येक पंक्ति एक रेखा को एक सरणी प्रतिनिधित्व के रूप में देखती है जैसा कि नीचे देखा गया है। यदि यह कल्पना करने के लिए आज्ञाकारी नहीं है, तो कृपया मुझे बताएं और मैं इसे ठीक कर दूंगा।

["d f0/d u1", "d f0/d u2", "d f0/d u3"]
["d f1/d u1", "d f1/d u2", "d f1/d u3"]


0

जेली, 18 बाइट्स

ps⁴’“ df“/du”ż$€€G

कोशिश करके देखो!

दिया (एम, एन) = (3, 2) , प्रिंट (रिक्त स्थान के रूप में चिह्नित ·:)

·df0/du0·df0/du1
·df1/du0·df1/du1
·df2/du0·df2/du1

0

सी, 125 बाइट्स:

main(w,y,b,q){scanf("%d %d",&w,&y);for(b=0;b<w;b++){for(q=0;q<y;q++)printf("d f%d/du u%d%s",b,q,q<y-1?", ":"");printf("\n");}}

इनपुट को 2 अलग-अलग पूर्णांक के रूप में लेता है b y, और लाइनों yपर कॉमा को अलग किए गए तार के रूप में याकूबियन मैट्रिक्स को आउटपुट करता है b

सी यह ऑनलाइन! (Ideone) या टेस्ट सूट (Ideone)

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.