[問題] 副程式裡有副程式的問題已回收

看板MATLAB作者時間15年前 (2010/09/07 09:58), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
恩..這是我的主程式的一部分: temp_param=truncreg_mle(delta_hat(:,1),Z,trun_left_mle); truncreg_mle是我要呼叫的 因此另外在副程式 寫了一個truncreg_mle的函數 ----副程式:----- function [para_est]=truncreg_mle(dep_data,indep_data,c) openR; putRdata('y',y); putRdata('z',z); putRdata('n',n); evalR('bstart=chol2inv(chol(t(z) %*% z)) %*% t(z) %*% y'); evalR('ehat = y - z %*% bstart'); evalR('sig = sqrt(sum(ehat * ehat)/n)'); intial_p=getRdata('bstart'); intial_p(end+1)=getRdata('sig'); closeR; neg_log_like=@(p) trunc_neg_log_like(y,z,p,c,n); exitflag=0; tolfun=1e-11; while exitflag~=1 tolfun=tolfun*10; [temp_param fval exitflag]=fminsearch(neg_log_like,intial_p,optimset(... 'Display','off','MaxFunEvals',inf,'TolFun',tolfun, 'TolX',tolfun)); end; para_est=temp_param; function [fval]=trunc_neg_log_like(y,z,p,c,n) fval=n.*log(p(end))-sum(log(normpdf((y-z*p(1:(end-1)))./p(end))))+... sum(log(1-normcdf((c-z*p(1:(end-1)))./p(end)))); if fval==-inf fval=inf; end; --------------------------------------------------------------------------- 原本在 matlab7.9的版本 這樣執行是ok的 不過因為一些原因必須使用matlab6.5的版本執行 可是卻跑出錯誤了 它顯示在 neg_log_like=@(p) trunc_neg_log_like(y,z,p,c,n); 錯誤訊息: ??? Error: File: C:\Program Files\tomlab\work\NLP_Algorithm1-home\truncreg_mle.m Line: 35 Column: 15 "identifier" expected, "(" found. 我將它改成 neg_log_like=@p,trunc_neg_log_like(y,z,p,c,n); 在家執行 這行沒有出現錯誤 是出現openr的錯誤 不過因為家裡電腦沒有R 所以沒想太多 將它帶來學校執行 結果不行....很奇怪 = =''(我同樣是用matlab6.5版本執行的) 跑出了下列的錯誤訊息: neg_log_like = @p ??? Undefined function or variable 'p'. Error in ==> C:\Program Files\tomlab\work\NLP_Algorithm1-home\truncreg_mle.m On line 34 ==> neg_log_like=@p,trunc_neg_log_like(y,z,p,c,n); 想請問大家 該怎麼改? 謝謝!!! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 140.126.147.48
文章代碼(AID): #1CXPnEe0 (MATLAB)