2012-09-29 61 views
2

我已經在MATLAB中編寫了一個函數,但它不會返回我的輸出。它將第一個輸出返回爲ans = a#但就是這樣。我認爲function[argout1,argout2,...argoutn=funcname(in1,in2,...inn)以格式argout1= a #argout2= a #等格式返回所有輸出。MATLAB將不會返回我的輸出

我意識到我可以使用disp()或其他一些內置函數,但是當你有一個函數文件時,所有這些都有什麼意義。該函數正在訪問Excel電子表格中的輸入,但我認爲這不應該有所作爲。任何幫助將不勝感激。

代碼如下。

function[y_int1, y_int2, Youngs_Modulus, Poissons_Ratio, Youngs_Modulus_Percent_diff, Poissons_Ratio_Percent_diff, RMS1, RMS2]= Lab3_EC(elong1,elong2,elat1,elat2,thick,width,load,N) 



%average longitudinal strain 
avgLongs=((elong1)+(elong2))/2; 



%average lateral strain 
avgLats=((elat1)+(elat2))/2; 


%Find's the area of the sample 

A=thick*width; 


%Finds the applied stress 
stress=load./A; 


%declares a variable x1 for Long Strain 
x1=avgLongs; 


%declares a variable y1 for Applied Stress 
y1=stress; 

%Declares variables to compute slope1 

x1bar=mean(x1); 
y1bar=mean(y1); 
sxy1=sum(x1.*y1); 
sx1=sum(x1); 
sy1=sum(y1); 
sx1s=sum(x1.*x1); 
sx11s=(sum(x1))^2; 
slope1=(N*sxy1-sx1*sy1)/(N*sx1s-sx11s); 
y_int1=y1bar-slope1*x1bar; 

%x points 
xp=linspace(min(x1),max(x1)); 

% y points 
yp1=slope1*xp+y_int1; 

%Declares variables to compute slope 2 

%Since our second calculation of linear regression uses Average 
%Longitudinal Stress we can re-use the variable x1 

y2=abs(avgLats); 
y2bar=mean(y2); 
sxy2=sum(x1.*y2); 
sy2=sum(y2); 
slope2=(N*sxy2-sx1*sy2)/(N*sx1s-sx11s); 
y_int2=y2bar-slope2*x1bar; 


%y points 
yp2=slope2*xp+y_int2; 


%preallocate space for error1 vector 
Error1=zeros(N,1); 

%compute error1 
for i=1:N; 
    Error1(i)= (stress(i)-y_int1-slope1*avgLongs(i))^2; 
end 
Error1=sum(Error1(5)); 

%preallocate space for error2 vector 

Error2=zeros(N,1); 
for i=1:N; 
    Error2(i)=(abs(avgLats(i))-y_int2-slope2*avgLongs(i))^2; 
end 
Error2=sum(Error2(5)); 

RMS1=sqrt(Error1/N); 

RMS2=sqrt(Error2/N); 


Lab_2_E=(stress(5)-stress(1))/(avgLongs(5)-avgLongs(1)); 
Lab_2_v=(abs(avgLats(5)-avgLats(1))/(avgLongs(5)-avgLongs(1))); 
Youngs_Modulus=slope1; 
Poissons_Ratio=slope2; 
Youngs_Modulus_Percent_diff=((abs(Youngs_Modulus-Lab_2_E))/Lab_2_E)*100; 
Poissons_Ratio_Percent_diff=((abs(Poissons_Ratio-Lab_2_v))/Lab_2_v)*100; 



%Plot stress strain diagram and poisson's ratio 
figure(1), plot(avgLongs,stress,'k',x1,y1,'o',xp,yp1,':g'),hold on,... 
    xlabel('Long Strain(in/in)'),ylabel('Stress(psi)'),... 
    title('Stress vs. Long Strain'), legend('Exp','data points','Calc',... 
    'Location','SouthEast') 
figure(2),plot(avgLongs,abs(avgLats),x1,y2,'+',xp,yp2,'-- m'),hold on,... 
    xlabel('Long Strain(in/in)'),ylabel('Lat Strain(in/in)'),... 
    title('Poisson''s Ratio'),legend('Exp','data points','Calc',... 
    'Location','SouthEast') 

回答

2

假設你有一個函數fun

[o1, o2, o3, o4, o5] = fun(i1, i2, i3, i4); 

如果執行

fun(in1, in2, in3) 

只有一個輸出參數:ans默認的輸出參數。這將獲得函數頭中定義的第一個輸出參數的值(即o1)。

如果你想要更多的輸出,你必須指定它們:

[out1, out2, out3] = fun(in1, in2, in3); 

現在out1out2out3將分別包含在功能分配給o1o2o3值。

你一定要通讀function documentation

+0

感謝Gunther。我之前編寫了一些程序,並且實際上編寫了函數,它已經被展開。 –