Matlab函数不会输出可行的等式

时间:2014-10-05 19:33:28

标签: matlab anonymous-function argument-passing

我正在尝试让我的函数文件输出一个可计算的方程式,它计算,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'的可行方程输出?提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

虽然在这里使用匿名函数可能没什么优势,但有些指针:

1)不要使用symst是匿名函数的输入,而不是符号变量。

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...

这样的东西