簡體   English   中英

Matlab函數將不會輸出可行方程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM