[英]Matlab function will not output workable equation
我試圖讓我的函數文件輸出一個可行的方程式,它計算得出,恩斯。 我已經將h聲明為匿名函數,但是在讀取程序時錯誤顯示為:“ 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)不要使用syms
。 t
是您的匿名函數的輸入,而不是符號變量。
2)將循環中的每個hs
定義為基於t
的單個匿名函數。
3)這樣計算Enth
作為匿名函數的函數的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);
我也建議你使用./
, .*
,和.^
(逐元素除法,乘法,權力等) -這樣你可以傳遞的載體t
,而不是一個單一的值。 目前,您對Enth
的定義還假定num
為3。如果小於3,則將出現錯誤;如果大於3,則不使用某些輸入。
在這種情況下,一旦擁有所有n
值,則無需在循環中定義事物,而可以在最后計算一個匿名函數。 例如,而不是等價於n(1)*A(i,1)*t + n(2)*A(i,2)*t...
您會得到類似@(t) n.*A(1:num,1).*t+n.*A(1:num,2)./2*t.^2...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.