我正在尝试让我的函数文件输出一个可计算的方程式,它计算,Enth。我已声明为匿名函数,但在读取程序时,错误显示为:“Enth是未定义的变量/函数”。我有一个矩阵,A,定义从中拉出值。
function [Enth]= Enthalpy(num, H)
syms t; %Declare t
ntotal=0;
for i=1:1:num %Request mass of each species
n(i)=input('Enter mass fraction of next species in kg: ');
ntotal=ntotal+n(i); %Running total of mass fractions
hs(i)= (A(i,1)*t)+(A(i,2)/2*t^2)+(A(i,3)/3*t^3)+(A(i,4)/4*t^4)+(A(i,5)/5*t^5)+A(i,6);
end
Enth=@(t)(n(1)*hs(1)+n(2)*hs(2)+n(3)*hs(3)-H);
如何将Enth作为't'的可行方程输出?提前感谢您的帮助。
答案 0 :(得分:0)
虽然在这里使用匿名函数可能没什么优势,但有些指针:
1)不要使用syms
。 t
是匿名函数的输入,而不是符号变量。
2)根据hs
将循环中的每个t
定义为单个匿名函数。
3)将Enth
计算为匿名函数的函数,如下所示:
function [Enth]= Enthalpy(num, A, H)
ntotal=0;
for i=1:1:num %Request mass of each species
n(i)=input('Enter mass fraction of next species in kg: ');
ntotal=ntotal+n(i); %Running total of mass fractions
hs{i}= @(t)(A(i,1)*t)+(A(i,2)/2*t^2)+(A(i,3)/3*t^3)+(A(i,4)/4*t^4)+(A(i,5)/5*t^5)+A(i,6);
end
Enth=@(t)(n(1).*hs{1}(t)+n(2)*hs{2}(t)+n(3)*hs{3}(t)-H);
我还建议您使用./
,.*
和.^
(元素分割,乘法,幂等) - 这样您就可以传递{{{ 1}}而不是单个值。目前,您对t
的定义也假设Enth
为3.如果它小于3,那么如果它超过三个,您将收到错误你没有使用某些输入。
在这种情况下,一旦获得了所有num
值,您就可以在循环中计算单个匿名函数,而不是在循环中定义事物。例如而不是等同于n
,你会得到像n(1)*A(i,1)*t + n(2)*A(i,2)*t...