sdzx112233 发表于 2006-10-26 10:27

请教??? One or more output arguments not assigned during call to '***'.

各位大虾 ,偶碰到这个问题n久也没弄明白怎么回事,请各位指点一下

哦,对了,补充一下,程序里所有的输出变量的值都能算出来,然后最后出现这个报错的

function CeqHE=Heater(HEObj)
%Heater calculates the residual error of aHeater block.
% Input: HEObj is a block with the following structure
%      HEObj = struct('T',[],'P',[],'Q',[],'Sin',[],'SoutL',[],'SoutV',[],'r1',[],'r2',[]);
%      T: Heater temperature (K);
%      P: Heater pressure (psi);
%      Q: Heater input duty (MJ/s);
%      Sin: Heater feed(s), stream structure;
%      SoutL: Heater liquid product, stream structure;
%      SoutV: Heater vapor product, stream structure;
% Output:CeqHE is the residual error of block HEObj;
%

% For DOF analysis reference:
% DOF = No.(Sin)*NV(Stream) + 2;Degree of freedom;
% NFreeVar = No.(SoutL,SoutV)*NV(Stream) + 1;No. of free variables;
Stream = struct('T',[],'P',[],'F',[],'C',[]);
SinL = Stream;
SinV = Stream;

disp(HEObj.Sin);
disp(HEObj.SoutL);
disp(HEObj.SoutV);

= VL(HEObj.Sin,HEObj.r1,HEObj.Sin.T);

SinL.F = HEObj.Sin.F*HEObj.Sin.C'*K';
SinV.F = HEObj.Sin.F-SinL.F;

disp(SinL);
disp(SinV);
disp(K);

TBub = 290;
TDew = 310;

% NC: Number of components;

NC = length(HEObj.Sin.C);

% Calculation of the enthalpies of the feeds using srk function;
%Temporarily,to be revised later;

% = srk(HEObj.Sin.T,HEObj.Sin.P,SinL.C(:),SinV.C(:)); %MJ/kmol;43682458.1/1e6;

SinL_H=2;
SinV_H=3;


Sout_K   =[.4 .3 .2 .3];
SoutL_H=4;
SoutV_H=5;



% Residual error between temperature and pressure state of the heater object and the product streams;
CeqF(1) = HEObj.SoutL.T-HEObj.T;
CeqF(2) = HEObj.SoutV.T-HEObj.T;
CeqF(3) = HEObj.SoutL.P-HEObj.P;
CeqF(4) = HEObj.SoutV.P-HEObj.P;

disp(CeqF);

% Residual error of Equilibrium equations
for i=1:NC
    CeqE(i) = - HEObj.SoutV.C(i) + Sout_K(i)*HEObj.SoutL.C(i);
    end

Sin   = HEObj.Sin;

SoutL = HEObj.SoutL;

SoutV = HEObj.SoutV;


T = SoutL.T;
if T<TBub
    SoutV() = 0;   
    CeqE = zeros(1,NC);
elseif T>TDew
    SoutL() = 0;   
    CeqE = zeros(1,NC);
end

disp(CeqE);
% Efficiency of the followings can be enhanced later by removing the original 'for' statement using vector operations
% Residual error of Mass balance equations;
for i=1:NC
   
    SumSinMi = Sin.F*HEObj.Sin.C(i);
   
    CeqM(i) = -SumSinMi + SoutL.F*HEObj.SoutL.C(i) + SoutV.F*HEObj.SoutV.C(i);
end   

disp(CeqM);
% Conditional Modeling %

% Residual error of Summation equations
CeqSx = sum( HEObj.SoutL.C)-1;
CeqSy = sum( HEObj.SoutV.C)-1;
if T<TBub
   CeqSy = (sum(HEObj.SoutV.C)-1)*SoutV.F;
elseif T>TDew
   CeqSx = (sum(HEObj.SoutL.C)-1)*SoutL.F;
end

disp(CeqSx);
disp(CeqSy);
% Conditional Modeling %

% Residual error of entHalpy equations% with potential problem

SumSinH = SinL.F*SinL_H + SinV.F*SinV_H;

CeqH = - SumSinH - HEObj.Q + SoutV.F*SoutV_H+ SoutL.F*SoutL_H;

disp(CeqH);
% Residual error of r

r1 = HEObj.r1;
disp(r1);
CeqSum1 = 0;
disp(CeqSum1);

r2 = HEObj.r2;
disp(r2);
CeqSum2 = 0;
disp(CeqSum2);

% Total residual errors of HEObj
CeqPA = ;

disp(CeqPA);

程序就是这样的,执行到最后的disp(CeqPA)结果可以出的,然后就是报错……

[ 本帖最后由 sdzx112233 于 2006-10-26 10:40 编辑 ]

happy 发表于 2006-10-26 10:30

你所调用的函数是有输出的,但是该输出在函数内部没定义。

官方的解释如下:
Explanation:
One of the functions you have called is defined to return an output argument but that output argument does not exist in that function when it tries to return.

Common causes:
You have misspelled the name of one of your output arguments inside your function, or you have forgotten to assign a value to one of the output arguments of your function. Alternatively, the function was originally written with one or more output arguments, but the section of the function that computed the output argument was removed or modified in such a way that the output argument is now extraneous.

Solution:
Stop MATLAB on the last line of the function listed in the warning or error message. Verify that each of the output arguments listed in the function declaration line at the beginning of the function exists after that last line is executed (using the DBSTEP function or the Step button in the Editor). If the arguments do not, examine the function to determine where you intended the arguments to be declared. Verify that those lines of code are being executed and have no typographical errors.

Example demonstrating this error:
OutputNotAssigned.m

eight 发表于 2006-10-26 10:34

原帖由 sdzx112233 于 2006-10-26 10:27 发表
各位大虾 ,偶碰到这个问题n久也没弄明白怎么回事,请各位指点一下

哦,对了,补充一下,程序里所有的输出变量的值都能算出来,然后最后出现这个报错的


贴一下程序吧,估计你有一个以上的输出变量没有赋值,也许是使用了条件判断导致的

sdzx112233 发表于 2006-10-26 10:47

谢谢happy的指点,茅塞顿开阿,呵呵
也谢谢eight的热心帮助拉

sdzx112233 发表于 2006-10-26 10:48

小弟在function CeqHE=Heater(HEObj)
和CeqPA = ;
上两个变量名不一致造成的,哈,低级错误,不要见笑哈

sdzx112233 发表于 2006-10-26 11:17

另外还有个问题想请大虾们帮忙了,能教我如何写这个方程吗?我是初学的,好多还不懂……

E{ X(i) [ K(i) - 1) ] / [( K(i) - 1 ) r-1 ]}=0

E做加和的那个c戈马用,那个符号不会打……
X和K都是数组
方程用来求 r

happy 发表于 2006-10-26 11:22

原帖由 sdzx112233 于 2006-10-26 11:17 发表
另外还有个问题想请大虾们帮忙了,能教我如何写这个方程吗?我是初学的,好多还不懂……

E{ X(i)/ }=0

E做加和的那个c戈马用,那个符号不会打……
X和K都是数组
方程用来求 r

把方程描述的清楚点,这样还是没太看明白

sdzx112233 发表于 2006-10-26 11:25

方程式       X(i)* [ K(i) - 1) ]
          E------------------------ = 0
                   [ K(i) - 1 ]* r - 1


E做加和的那个c戈马用,那个符号不会打……
X和K都是数组
方程用来求 r
r是一个数

[ 本帖最后由 sdzx112233 于 2006-10-26 11:27 编辑 ]

happy 发表于 2006-10-26 11:27

是对i求c戈马吧?

sdzx112233 发表于 2006-10-26 11:29

是的,加和等于0

happy 发表于 2006-10-26 11:32

原帖由 sdzx112233 于 2006-10-26 11:29 发表
是的,加和等于0

和普通的方程求解没什么区别,用矩阵运算或者循环把方程表示出来然后求解就行了
看你用哪个熟练吧,建议用矩阵运算,效率比较高

sdzx112233 发表于 2006-10-26 11:40

只是分母上的[ K(i) - 1 ]* r 怎么处理?好像没办法做循环吧……
另外这个能用矩阵来算吗?没头绪……呵呵
能不能写段程序让我参考一下,呵呵,不胜感激!~

happy 发表于 2006-10-26 17:49

syms r
x0=solve(sum(x.*(k-1)./((k-1)*r-1)));

sdzx112233 发表于 2006-10-27 10:22

谢谢happy

[ 本帖最后由 sdzx112233 于 2006-10-28 12:20 编辑 ]

gmerphy 发表于 2008-3-26 20:47

真是太对了 我也有这个问题 刚刚解决 谢了 很对啊
页: [1]
查看完整版本: 请教??? One or more output arguments not assigned during call to '***'.