2010-02-05 10 views
11

İki girdiyi (x ve y10) alan basit bir işlev yazmaya çalışıyorum ve bunları ekleyen, çoğaltan ve bölen diğer üç basit işleve iletiyorum. Ana işlev daha sonra sonuçları x, y ve toplamları içeren bir dize olarak göstermelidir.MATLAB'de değişken değerleri bir metin dizesine nasıl koyarım?

Bence çıktı bağımsız değişkenlerini anlamadığım bir şey var. Neyse, işte (acınacak) kod:

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

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

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

ana fonksiyonudur:

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

Nasıl bir dizeye x, y, d, e ve f değerlerini alabilirim? Farklı matrisleri ve benzeri şeyleri denedim:

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

Ancak değişkenlerin hiçbiri gösterilmiyor.

İki ek sorunlar:

  • Neden fonksiyonu dönüyor "ans 3" Ben z uzunluğu için sormadım rağmen?
  • Herkes yeni başlayanlar için MATLAB komut dosyası için iyi bir kitap önerebilirse, bunu gerçekten takdir ediyorum. Eğer dizeleri numaralar dönüştürmek ve diğer şeyler dizeleri katılma şeklini İşte
+0

kullanım sprintf

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

ne yaptığını geçerli: str = 'DEF'; var = sürat ('abc% sghi', str); => abcDEFghi – KillBill

cevap

4

Peter olarak ve Amro onları ilk görüntüler veya diğer karakter dizeleri ile bitiştirmek için biçimlendirilmiş sayısal değerler dizgeye dönüştürmek zorunda göstermektedir. Bunu FPRINTF, SPRINTF, NUM2STR ve INT2STR işlevlerini kullanarak yapabilirsiniz. Eğer bir değişkene answer çıkışı atama olmadığı için bir çıkış olarak ans = 3 alma ile ilgili olarak


, muhtemelen öyledir.Eğer çıkış tüm değerleri elde etmek istiyorsanız, aşağıdaki şekilde answer aramak zorunda kalacak:

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

Bu değer dout1 yılında, out2 değerini e ve out3 değeri f yerleştirecektir . aşağıdakileri yapmanız olduğunda:

answer(1,2) 

MATLAB otomatik ans değişken varsayılan çalışma alanına ilk çıkışını d (bu durumda değeri 3 olan) atar. MATLAB öğrenme için iyi bir kaynak düşündüren ilgili olarak


, sen MATLAB belgelerin değerini hafife alınmamalı. Bildiğim şeyin çoğunu kendi başıma öğrendim. online adresine veya MATLAB kopyasına DOC, HELP veya HELPWIN işlevlerini kullanarak erişebilirsiniz.

+0

Teşekkürler, bu çok yararlı. Sadece bir tane daha hızlı soru - bir fonksiyonda bir çıkış değişkeni oluşturursam - örneğin: fonksiyonu a = basit (x); a = x^2; Diğer işlevlerden 'a' değerine nasıl erişebilirim?Örneğin: işlevi b = basit2 (x); b = a * x; 'basit' – jefflovejapan

+1

@jefflovejapan üzerinden arama: Böyle bir durumda, ikinci işleviniz, işlev b = basit2 (x) b = basit (x) * x; 'olacaktır. Diğer bir deyişle, basit ''basit' olarak adlandırırsınız ve çıkışı 'b' için denklemde kullanılır. – gnovice

12

var (bu garip): Tanıdık C sözdizimi ile fprintf/sprintf'i kullanabilirsiniz

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

Çok teşekkür ederim. – jefflovejapan

+0

Bu yardımcı oldu, ancak hala istediğim şekilde çalışmıyor. Fonksiyonu çalıştırdığımda (1,2) ans = 3 alırım, yani diğer iki işlev olan mxy ve dxy, x ve y değerlerini görmez. Ayrıca, tüm çıkış argümanlarının değerleri boştur. Bence burada, değişkenler ile burada yapmadığım çok basit bir şey var, ama ne olduğunu anlayamıyorum. – jefflovejapan

6

. Belki bir şey gibi:

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

Yorumunuzu okuma, bu ana programdan işlevlerini kullanın nasıl: cevap() işlevi için de

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) 

, sen atayabilirsiniz üç ayrı değişken yerine bir vektöre çıktı değerleri:

gibi basitçe diyoruz:

out = answer(x,y); 
+0

teşekkürler, bu kesinlikle daha basittir, ancak egzersiz özellikle sizden işlevler oluşturmanızı ve değişkenleri ileri ve geri iletmelerini ister. – jefflovejapan

+0

Bu harika, çok teşekkürler. Önceden 'sonuç' boyutunu belirtmeniz gerekmediği için harika. – jefflovejapan

2

Neden bu kadar çok sorun yaşadığımı anladım - MATLAB'te farklı uzunluklardaki dizeleri köşeli parantez kullanarak bir dizi olarak saklayamazsınız. Köşeli parantezlerin kullanılması, değişen uzunluklardaki dizeleri tek bir karakter dizisine birleştirir. Bir karakter dizisi olarak

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

a = 

matlabisfun 

>> size(a) 

ans = 

    1 11 

bir boyutu 1X11 olduğunu açıklıyor biri eleman olarak bir dize sayılarında her karakter.

Bir dizinin öğeleri olarak değişen uzunluklardaki dizeleri depolamak için, bir hücre dizisi olarak kaydetmek için kaşlı ayraç kullanmanız gerekir. Hücre dizilerinde, her bir dizgi uzunluktan bağımsız olarak ayrı bir eleman olarak ele alınır.

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

a = 

    'matlab' 'is' 'fun' 

>> size(a) 

ans = 

    1  3 
0

İstediğiniz şey boyunca bir şey arıyordum, ancak bir değişkene geri koymak istedim.

Yani bu temelde

variable = [str1 str2 str3 str4 str5 str6]

İlgili konular