我是matlab的新手,今年过去取决于这项任务,我没有太多时间去探索matlab,而且我已经浪费了很多时间试图以我的方式完成这项任务。 我已经在纸上写了方程,但将方程转换成matlab代码对我来说真的很难。 我现在所拥有的只有:
syms h
l = (0.75-h.^2)/(3*sqrt((5*h.^2)/4)); %h is h_max
V_default = (h.^2/2)*l;
dv = diff(V_default); %it's max. when the derivative is max.
h1 = solve( dv ==0);
h_max = (h1>0);
l_max = (0.75-h_max.^2)/(3*sqrt((h_max/2).^2+(h_max.^2)));
V_max = ((h_max.^2)./(2.*l_max));
but it keep give me error "Error using ./
Matrix dimensions must agree.
Error in triangle (line 9)
V_max = ((h_max.^2)./(2.*l_max)); "
答案 0 :(得分:1)
这里并没有真正帮助完成任务,而是使用Matlab语法。在以下行中:
l_max = (0.75-h_max.^2)/(3*sqrt((h_max/2).^2+(h_max.^2)));
你正在使用/
这是一个矩阵划分。您可能希望使用./
,它将逐个元素地划分术语。如果我这样做
l_max = (0.75-h_max.^2) ./ (3*sqrt((h_max/2).^2+(h_max.^2)));
然后您的代码不会返回任何错误。但我不知道这是否是你作业的正确解决方案,我会留给你的!
答案 1 :(得分:0)
在第5行中,结果h1
是两个值的向量,但变量本身仍然是符号数学工具箱中的符号。 MATLAB对这些变量略有不同。出于这个原因,行h_max = (h1>0)
并没有真正按照您的预期行事。我想从这一点开始,您对一个值h_max
感兴趣,我会将h1
转换为常规MATLAB变量并将您的代码更改为以下内容:
h1 = double(solve( dv ==0)); % converts symbolic to regular vectors
h_max = h1(h1>0); % filters out all negative and zero values
l_max = (0.75-h_max.^2)/(3*sqrt((h_max/2).^2+(h_max.^2)));
V_max = ((h_max.^2)./(2.*l_max));
EDIT。
如果您仍然有错误,则表示solve( ...)
返回的值超过1。在这种情况下,正如建议的那样,使用虚线操作,例如./
,但l_max
和V_max
中的结果不是单个值,而是与{{1}相同大小的矢量}。这意味着你没有一个最大音量。