集成一个函数,然后在 Matlab 中绘制它的图形

计算科学 matlab
2021-12-26 05:09:00

我已经在这段代码上工作了几个小时,似乎我做错了什么,我无法弄清楚。我有一个函数,我集成然后绘制它的值。但我得到的图表看起来很奇怪。我期待某种形式的指数函数,但我得到的那个与我的预期相去甚远,当我尝试改变我的一些常数时,它的行为仍然很奇怪。这是代码的样子:

y = 0:0.5:D;
p = 65.5;
k = 1;
D =10:0.5:100; %Create a vector for D

M =zeros(1,181); %an array
for j = k:181 %For loop for all water values

  M(k) = integral(@(y) Func5(p,D,k,y),0,D(k));
  k+1;  
end

plot(D,M)
title('Hydrostatic pressure in bars');
xlabel('water level in fot');
ylabel('pressure i bars');

这是我的功能的代码:

function FD = Func5(p,D,k,y)
 w = 40-20*exp(-(0.01*y))*2; %Width of the dam
 FD = p.*(D(k)-y).*w; %Claculate the pressure
end

提前感谢您的帮助。

1个回答

我认为您遇到的主要问题是您的 for 循环可能没有达到您的预期。

k = 1;
M =zeros(1,181);
for j = k:181 
  M(k) = integral(@(y) Func5(p,D,k,y),0,D(k));
  k+1;  # does not increase k
end

这里的问题是该声明k+1是无用的并且不会增加k,我认为这就是你所追求的。这样做的问题是,j每次迭代仍然会增加,但是积分的值被分配给M(k)它,M(1)而不是随着循环而增加。论点也D(k)保持不变,我猜它也应该随着迭代而改变。

试试这个:

M =zeros(1,181);
for j = 1:181
  M(j) = integral(@(y) Func5(p,D,j,y),0,D(j));
end

这至少给了我一个类似于某种指数函数的图表。

关于您的代码的一些一般性建议:尝试使用添加有用信息的注释来提高可读性。M =zeros(1,181); %an array不是一个有用的评论,因为我已经可以看到这是“一个数组”,我看不到是什么M意思;更好的评论是% preallocate the results vector,同样适用D =10:0.5:100; %Create a vector for D什么是D就此而言,所有其他变量?通常最好使用有意义的变量名,例如resultsorpressure而不是Dand M此外,在像这样的函数Func5中,在顶部包含一个更大的注释块来说明函数计算的内容(哪个方程)以及它的输入/输出是什么是很有用的。

其它你可能感兴趣的问题