Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在MATLAB中绘制循环_Matlab - Fatal编程技术网

在MATLAB中绘制循环

在MATLAB中绘制循环,matlab,Matlab,我对MATLAB非常陌生,正在努力绘制我的数据。在下面的程序中,我模拟了水位(m.a.s.l)和水箱中捕获的水量之间的关系。现在我需要以H(水位)在Y轴,V(水的体积)在x轴的方式来绘制它。然而,我读了很多书,也尝试了很多,但仍然无法理解。有人能帮我吗 我曾尝试使用简单的绘图(X,Y),但它给出了错误。还有很多其他的建议。我还尝试了fprintf函数,让它成为一个txt格式的表格,然后在Excel上打印,但总是打印最后两个H和V。不是所有的 for H = 410.03:0.01:414

我对MATLAB非常陌生,正在努力绘制我的数据。在下面的程序中,我模拟了水位(m.a.s.l)和水箱中捕获的水量之间的关系。现在我需要以H(水位)在Y轴,V(水的体积)在x轴的方式来绘制它。然而,我读了很多书,也尝试了很多,但仍然无法理解。有人能帮我吗

我曾尝试使用简单的绘图(X,Y),但它给出了错误。还有很多其他的建议。我还尝试了fprintf函数,让它成为一个txt格式的表格,然后在Excel上打印,但总是打印最后两个H和V。不是所有的

    for H = 410.03:0.01:414.57

L = 30; v = 0; fun1 = @(x) (0.3.^2-x.^2).^0.5;

if (H<410.03)

%For the heights below the tank, section 0
dis('No Water in the tank')


elseif (H>=410.03 && H<=410.33)
%section (1) 
 h = .3-(H-410.03) ;   
 a = (0.3.^2-h.^2).^0.5 ;
 A = 2*(integral(fun1,0,a)-h*a);
 V = A*L ;

 disp(['H= ' num2str(H)])
 disp(['V= ' num2str(V)])


 elseif (H>410.33 && H<=410.38)
 % section (1+2)
    h = H-410.33 ;
    V1 = L*(2*(integral(fun1,0,0.3)-0));
    V  = V1+(.6*h+22*h.^2)*L ;

    disp(['H= ' num2str(H)])
    disp(['V= ' num2str(V)])


 elseif (H>410.38 && H<=414.57)
    h = H - 410.38;
    V1 = L*(2*(integral(fun1,0,0.3)-0));


    V2 = V1+(0.085)*L;
    V = V2 + (2.8*h)* L ;
     disp(['H= ' num2str(H)])
     disp(['V= ' num2str(V)])



end
end
H=410.03:0.01:414.57的

L=30;v=0;fun1=@(x)(0.3.^2-x.^2)。^0.5;

如果(H=410.03&&H410.33&&H410.38&&H这可能会让您开始学习,尽管我在这里所做的可能不是最容易理解的第一步。我用代码制作了一个函数H->V,它可以获取值H的向量并返回向量V,适合绘图。如果您需要,可以制作一个更简单的函数,看起来更像原始函数(使用if-then-else结构)并获取标量H并返回标量V。然后可以在H的范围内循环,逐步创建V

首先像这样保存一个函数(调用文件
somefunc.m
):


我会避免使用类似的命名变量,尤其是那些仅以大写/小写字母区分的变量。

我无法理解您的部分代码。例如,为什么在第二个
elseif
中,您会计算一点
h
,然后什么也不做?您的意思是显示一点
h
,而不是显示一个大h吗?您喜欢r在每次迭代中重复H和V,这样您就无法绘制或显示它们,只能看到“最后两个H和V”。将V设置为向量:在循环中定义一个计数器,并用
V(计数器)替换
V=…
=…
我编辑了第二个循环。我如何在循环中定义计数器?我如何将值设置为向量?只需在它们周围加上括号?我知道我的问题非常基本。但这仅仅是我为我的论文启动MATLAB的一天,我真的需要帮助。我非常感谢你的帮助guysHey Joshua,感谢你非常详细的回答。我是试图理解你在这里做了什么:1)V=0(大小(H))%这使得我们的V作为向量,初始值为0,大小(H)使它具有相同的维数z H,对吗?2)Find函数可以使用标量并将其转换为向量?当我尝试运行此函数时,它会给出一个错误,即当我看到详细信息时,它会告诉我嵌套函数不能位于控制语句中。但我在那里没有看到任何嵌套函数。可能是什么问题?1)是的。2) 否,Find获取一个向量并将索引向量返回到该向量中。所以find(isprime(1:20))返回向量1:20中素数的索引。3) 如果我理解出了什么问题:要使用函数,需要将其保存在与函数同名的单独文件中(例如“somefunc.m”),然后可以通过在解释器中键入类似于第二个框的内容,或者将其保存为脚本(在单独的文件中!)并运行该脚本来引用它。
function V = somefunc(H)

% constants
L = 30;
fun1 = @(x) (0.3.^2-x.^2).^0.5;

% set up return value (vector)
V = zeros(size(H));

% Section 1 (pick out the parts of H where it's within the first range)
section1 = find(H>=410.03 & H<=410.33);
h = .3-(H-410.03);
a = (0.3.^2-h.^2).^0.5 ;
% Have to loop here because integral won't take a vector of bounds
for i = section1
    A(i) = 2*(integral(fun1,0,a(i))-h(i)*a(i));
end
V(section1) = A(section1)*L ;

% Section 1+2
section_1plus2 = find(H>410.33 & H<=410.38);
h = H-410.33 ;
V1 = L*(2*(integral(fun1,0,0.3)-0)); % scalar
V(section_1plus2)  = V1+(.6*h(section_1plus2)+22*h(section_1plus2).^2)*L ;

% Section 3
section3 =  find(H>410.38 & H<=414.57);
h = H - 410.38;
V1 = L*(2*(integral(fun1,0,0.3)-0)); % scalar
V2 = V1+(0.085)*L; % scalar
V(section3) = V2 + (2.8*h(section3))* L ;
H = 410.03 : 0.01 : 414.57;
V = somefunc(H);

plot(H,V);
xlabel('H')
ylabel('V')