Matlab по какой-то причине не будет строить мою функцию - PullRequest
0 голосов
/ 07 марта 2019

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

Я также попробовал код моих друзей, который, на мой взгляд, почти идентичен, за исключением того, что по какой-то причине он позволяет ему вызывать его, и он заговорит.Я уже работал над этой небольшой суммой в течение 6 часов сегодня, и любая помощь очень ценится.

Спасибо!

function [totalheat1,totalheat2] = dheat(Tday,Tnight)


foot=10*sum('Todd');
height=9; %ft
Ctm=0.35; %BTU/lb degF 
mt= 20000; %lbs
A= foot + 4*((sqrt(foot)*height)); %surface area of house (ft^2)
R=25; %degF*ft^2*hour/BTU
To=30; %degF

dt=0.1;
t=dt:dt:24;
n=24/dt;
Td=Tday;
Tn=Tnight;

%regime 1
for i=1:n
  Q1(i)=dt*((A*(Td-To))/(R));  
end

%regime 2

therm=[1:240];
therm(1:70)=Tn;
therm(71:100)=Td;
therm(101:160)=Tn;
therm(161:230)=Td;
therm(231:240)=Tn;

Td=therm(1);

for i=1:n
   Q=dt*((A*(Td-To))/(R));
   chgT=(Q)/(Ctm*mt);
   Ti=Td-chgT;
   if Ti< therm(i)
       Q=(therm(i)-Ti)*(Ctm*mt);
       if Q<3000
           F(i)=Q;
           temp(i)=Td;
       else
          F(i)=3000;
          temp(i)=Ti+((3000)/(Ctm*mt));

       end
   else
       F(i)=0;
       temp(i)=Ti;
   end
   Td=temp(i);
end


totalheat1=sum(Q1);
totalheat2=sum(F);

figure(1)
plot(t,temp)

figure(2)
plot(t,Q1,t,F)

end

1 Ответ

1 голос
/ 07 марта 2019

Во-первых, убедитесь, что вы нажали close all force перед вызовом вашей функции. Это закроет все открытые (но, возможно, не видимые) фигуры.

Далее этот фрагмент явно указывает, какую фигуру и оси использовать:

f1 = figure();
ax1 = axes(f1);
p1 = plot(ax1, t,temp);

f2 = figure();
ax2 = axes(f2);
p2 = plot(ax2, t, Q1, t, F);

Если это все еще не работает: попробуйте передать struct, содержащий handles, этим цифрам / осям в качестве третьего параметра вашей функции. в скрипте:

s = struct();
s.f1 = figure();
s.ax1 = axes(f1);

s.f2 = figure();
s.ax2 = axes(f2);

dheat(Tday,Tnight,s)

и функция:

function [s,totalheat1,totalheat2] = dheat(Tday,Tnight,s)

и тогда часть графика будет выглядеть так:

p1 = plot(s.ax1, t,temp);
p2 = plot(s.ax2, t, Q1, t, F);

Лично я предпочел бы возвращать вычисленные значения и вызывать определенные сюжеты из сценария. p1 и p2 могут быть опущены.

...