2016-03-23 13 views
2

Ben Octave kullanıyorum, ama cevap alma şansını arttırmak için Matlab'dan gelen her şeyi deneyeceğim. Çeşitli giriş ve çıkışlarla fplot işlevi

Ben

function [ a, b ] = myfunc(x, y) 
    a = 1; 
    b = 2; 
endfunction; 

yılında, çeşitli değerler döndüren bir işlevi var nasıl olurdu ben fplot b (x, 1)? Aslında bunu doğrudan çizen bir ifade almam gerekiyordu. Şu andan itibaren, önce b'yi çıkarmam ve sonra çizimi yapmam gerektiği sonucuna vardım. Aslında bunun için bir kod yazmamıştım, ama eğer önlenebilirse, ben de bunu yapardım.

ben yapmak

x = 0 : 0.1 : 4; 
[ a, b ] = myfunc(x, 1); 
plot(x, b); 

olabilir olduğunu ama fplot bir veya iki hatlarında, böyle bir şey yapabileceğini merak ediyordum ne.

+0

buna benzer: http://stackoverflow.com/q/36098404/97160. Bir fonksiyon birden fazla değişken döndürürse, onları "almanız" gerekir, bunun etrafında başka bir yol yoktur. Yapabilecekleriniz, ilgilenmediğiniz şeyleri görmezden gelmektir, yani [~, b] = myfunc (x, y) '. Tabii ki, eğer başlangıçta meydana gelirlerse, 'a'nın' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'a''' yazıp yazabilirsiniz. Daha da iyisi, bir vektör veya hücre dizisini ayrı değişkenler yerine döndürmek için işlevinizi değiştirebilirsiniz. Bu şekilde, Octave'de tam olarak hbaderts gibi önerilen – Amro

+0

@ Amro - Bu iletiyi gönderdiğiniz mesaj benim soruma uygulanmış gibi görünüyor. İlk başta bir işlevi döndürmek için işlevimi ilk başta yazdım, ancak özel durumumda birkaç değer döndürmek için değiştirmek zorunda kaldım. Belki de bunu düzeltebilirim, ancak şu andan itibaren bunu nasıl yapacağımı bilmiyorum, benim özel durumumda (detaylar buraya ait değil). Birazcık tamir edeceğim ve gerekirse bununla ilgili ayrı bir soru yayınlayacağım. Her halükarda, cevapların/yorumların, sorunun önemli bir parçası olan 'fplot' ile nasıl birleştirileceğine açıklık getirmiyorum. –

+0

dürüstçe buna değmez, sadece şu anda sahip olduğunuz kodu iki ayrı ifadede saklayın. Okuması daha basit ve kolay, tek bir satırda olması gerekmiyor! İstenmeyen çıktıları yok saymak için sadece '~' kullanın. – Amro

cevap

3

Belirli bir dönüş değeri almak için Octave'nin nthargout kullanabilirsiniz. Bir anonymous function ile birleştirerek fplot'a geçirebilirsiniz.

fplot(@(x) nthargout(2, @myfunc, x, 1), [0 1]) 
+0

+1 çünkü daha önce nthargout'u görmedim. Ama sadece açık olmak gerekirse, 'düzenleme nthargout'u düzenleme uygulamasına bakarak, daha önce tanımladığımız şeyi yapıyor, tüm çıktı argümanlarını alıyor ve talep edileni geri getiriyor. Çıkışların yakalanması ya açık değişkenler ile yapılabilir [out1, out2, .., outN] = f() 'ya da daha kolay bir şekilde, virgülle ayrılmış listeler sözdizimi olan bir hücre dizisi kullanılarak [out {:}] = f () 'böylece keyfi sayıda çıktı ile çalışır. – Amro

+0

Harika! Denedim ve işe yaradı. –