Matlab определить функцию - PullRequest
2 голосов
/ 02 апреля 2020

У меня есть физическое уравнение P = (n RT / V - nb) - (an ^ 2 / V ^ 2)

, где n, b, a, R являются константами, а V, T являются независимыми переменными

вопрос, заданный для построения анонимной функции (давление)> P, а затем создать функцию скрипта с именем (vanderWall), которая возвращает P, V, T и заставляет меня sh контурный график of (P, V, T) и график (P, V) для 10 значений T.

функция должна генерировать T с пределами T1 до T2 с шагом nT, также генерировать V с пределами От V1 до V2 с шагом nV

, используя эти значения для практического вывода T1=77, T2=800, nT=10, V1=35, V2=200, nV=150, n=1, a=55.37, b=30.4.

Я пытался этот код поставить бесполезный ответ

%constants
n=1;
a=55.37;
b=30.4;
R=8.314;

%anonymous function of independent variables V and T
Pressure=@(V,T) ((n*R.*T)./(V-n*b))-((a*n^2)./V.^2);

[P,V,T]=vanderWall(Pressure,77,800,10,35,200,150,1,55.37,30.4);

%function to return Pressure,Volume and Temperature
function[P,V,T]=vanderWall(Pressure,T1,T2,nT,V1,V2,nV,varargin)

%Volume and temperature generatd by function
T=T1:nT:T2;
V=V1:nV:V2;
P=Pressure(V,T);

%mesh contour plot between T,V and P
meshc(T,V,P)

%plot of V and P (isotherms)
plot(V,P)

end

Ответы [ 2 ]

0 голосов
/ 02 апреля 2020

Проблема в том, что в вашей функции вы используете V и T в качестве векторов. Как вы используете свою анонимную функцию, непонятно, какую T поделить, на какую V. Я предполагаю, что вы хотите все комбинации - тогда вы можете заменить V на V' в вашей анонимной функции.

0 голосов
/ 02 апреля 2020

Возможно, вы можете попробовать следующий код для функции vanderWall, где [T,V]=meshgrid(t,v) - это ключевой шаг, чтобы ваш код работал

function[P,V,T]=vanderWall(Pressure,T1,T2,nT,V1,V2,nV,varargin)

%Volume and temperature generatd by function
t = T1:nT:T2;
v = V1:nV:V2;
[T,V]=meshgrid(t,v);

P=Pressure(V,T);

%mesh contour plot between T,V and P
meshc(T,V,P)

%plot of V and P (isotherms)
plot(V,P)
end

Или вы можете применить неявное одноэлементное расширение ( спасибо за совет @ CrisLuen go), т.е.

function[P,V,T]=vanderWall(Pressure,T1,T2,nT,V1,V2,nV,varargin)

%Volume and temperature generatd by function
T = T1:nT:T2;
V = V1:nV:V2;

P=Pressure(V,T.')';

%mesh contour plot between T,V and P
meshc(T,V,P)

%plot of V and P (isotherms)
plot(V,P)
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...