我在课堂上有一个作业,并且能够完成大部分作业,但这给我带来了一些麻烦。如果我手动将代码复制并粘贴到命令窗口中,则可以运行和绘制所有内容,但是如果仅调用该函数,它将提供输出,但由于某些原因将无法绘制。有什么想法吗?
我还尝试了我的朋友代码,在我看来,它几乎是一样的,除了出于某种原因,他允许他调用它,然后它会绘图。今天,我已经花了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
答案 0 :(得分:1)
首先,请确保在调用函数之前打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
的{{1}}传递到这些图形/轴作为函数的第三个参数。在脚本中:
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
可以省略。