2017-05-27 68 views
-1
MSIZE=100 
    reftype=0 
ident(2,2)=0 

fid1= fopen('MSTRPIN.txt','rt'); 
    if fid1 < 0 
     fprintf('error opening file\n'); 
     return; 
    end 

fid2= fopen('MYPULDAT.txt','w+t'); 
    if fid2 < 0 
     fprintf('error opening file2\n'); 
     return; 
    end 

PI=4.0*atan(1.0); 
V0=2.997925e8; 
V02=V0*V0; 
EPS=1.0/(V02*4.e-7*PI); 
FAC=1./(2.*PI*EPS); 
CMTM=2.54E-5; 

for i=1:MSIZE 
    for j=1:MSIZE 
    ident(i,j)=0.0; 
    ident(i,i)=1.0; 
    end 
end 

    line_number = 1; 
    oneline{line_number} = fgetl(fid1); 
    while ischar(oneline{line_number}) 
    line_number = line_number + 1; 
    oneline{line_number} = fgets(fid1); 
    end 
    fclose(fid1); 
    for i=1:line_number-1 
     Data_1(i,1) = sscanf(oneline{i}(1:3),'%f,'); 
    end 

    n = Data_1(1,1); 
    ncdiv= Data_1(2,1); 
    w = Data_1(3,1); 
sep = Data_1(4,1); 
    t = Data_1(5,1); 
    er = Data_1(6,1); 

    w =w*CMTM; 
    sep =sep*CMTM; 
    t =t*CMTM; 

    DELTA=w/double(ncdiv) 

    %%%%%%%%%Without Dielectric*%%%%%%%%%%%%%%% 
    %%%%%%%%%Fill A1%%%%%%%%%%%%%%%%%%%%%%%%%%% 
    dist=0.0; 
    for i=1:ncdiv 

    A(1,i)=PHI(dist) 
    A(i,1)=A(1,i); 
    dist=dist+DELTA; 
    end 

上面的腳本調用PHI功能(。):Matlab的函數調用從腳本:下標的轉讓尺寸不匹配

function ret= PHI(D) 
global FAC ; 
global DELTA; 
global t; 
DOW=2.0*D./DELTA 
TOW=4.0*t./DELTA 
DOWM=DOW-1.0 
DOWP=DOW+1 
if(D==0) 
ret=FAC*(0.5*log(1.0+TOW*TOW)+TOW*atan(1.0./TOW)) 
else 
ret=DOWM*log(DOWM)DOWP*log(DOWP)-0.5*DOWM*log(DOWM^2+TOW^2)+ 
    0.5*DOWP*log(DOWP^2+TOW^2)-TOW*(atan(DOWM/TOW)-atan(DOWP/TOW)) 
ret=FAC/2.0 
end 
end 

但是,當運行一個錯誤的腳本發生: 下標賦值尺寸不匹配。

錯誤widesefor(線62) A(1,I)= PHI(DIST)

當我手動分配一個值,以在沒有發生錯誤的函數的d輸入變量。是什麼原因?

+0

你給'D'起什麼作用?它返回什麼? – beaker

+0

一個一維的double值,返回值也是一維的double。 – valgrind

+0

結果是:ret [],它是無量綱的! – valgrind

回答

0

在PHI函數中,有全局變量刪除:FAC,DELTA,t。

要使用腳本文件共享這些變量,同樣變量也必須聲明

按照腳本「全球性」,以及在函數定義。

在錯誤的情況下,DELTA和T沒有正確的初始化函數

文件,因爲在腳本文件中缺少「全球性」聲明。