>%你好。我必须通过使用 Matlab 解决一个问题。我需要你的帮助
m1=3; %mass-1
m2=[0.25:0.25:3]; %mass-2 changing
f=[1:0.25:3]'; %frequency Hz
w=f*2*pi; %natural frequency rad/s
k2all=(w.^2)*m2;
k2=k2all(:,1); %spring constant N/m
%I need to find k1 from the formula below:
w=(((k1+k2)*m2+k2*m1)/(2*m1*m2))+(0.5*sqrt((((k1+k2)*m2+m1*k2)/(m1*m2))^2-(((k1+k2)*k2-k2^2)/(m1*m2))));
%As you see m2,k2 and w are changing
请帮忙
正如@RodyOldenhuis所示,代数在这里是微不足道的,但你通常可以通过使用符号数学来简化这样的过程——这也是检查答案的有用方法(尽管你仍然可能打错方程)。使用solve
:
syms k1 k2 m1 m2 w
fun = ((k1+k2)*m2+k2*m1)/(2*m1*m2)+...
0.5*sqrt((((k1+k2)*m2+m1*k2)/(m1*m2))^2-((k1+k2)*k2-k2^2)/(m1*m2));
k1 = solve(w==fun,k1)
这将返回:
k1 =
(4*k2*m1*w - 4*m1*m2*w^2 + 4*k2*m2*w)/(k2 - 4*m2*w)
计算机不是一切的答案;你只需要解决一个(相对简单的)代数问题。
正如我在评论中指出的那样,这对于Stack Overflow来说并不是真正的问题。
但是,请继续供将来参考;现在,我会为您省去一些麻烦。我将使用 Unicode 字符,既可以避免 SO 不支持 MathJax 的问题,也可以 100% 明确它不是代码。
您的原始公式,删除了一些无关的括号并添加了一些间距:
w = ((k1+k2)·m2 + k2·m1)/(2·m1·m2) + ...
½·√( (((k1+k2)·m2 + m1·k2)/(m1·m2))² - ((k1+k2)·k2 - k2²)/(m1·m2) );
将两边乘以 2:
2·w = ((k1+k2)·m2 + k2·m1)/(m1·m2) + ...
√( (((k1+k2)·m2 + m1·k2)/(m1·m2))² - ((k1+k2)·k2 - k2²)/(m1·m2) );
从两侧减去右侧的第一个项:
2·w - ((k1+k2)·m2 + k2·m1)/(m1·m2) = ...
√( (((k1+k2)·m2+m1·k2)/(m1·m2))² - ((k1+k2)·k2 - k2²)/(m1·m2) );
正方形两侧:
( 2·w - ((k1+k2)·m2 + k2·m1)/(m1·m2) )² = ...
(((k1+k2)·m2 + m1·k2)/(m1·m2))² - ((k1+k2)·k2 - k2²)/(m1·m2)
将两边乘以m1·m2
:
m1·m2·( 2w - ((k1+k2)·m2 + k2·m1)/(m1·m2) )² = ...
((k1+k2)·m2+m1·k2)²/(m1·m2) - (k1+k2)·k2 + k2²
展开左侧的正方形,然后用m1·m2
进行乘法:
4·w²·m1·m2 - 4·w·((k1+k2)·m2 + k2·m1) + ((k1+k2)·m2 + k2·m1)²/(m1·m2) = ...
((k1+k2)·m2+m1·k2)²/(m1·m2) - (k1+k2)·k2 + k2²
请注意,LHS 上的最后一个项等于 RHS 上的第一个项。因此,您可以将其删除:
4·w²·m1·m2 - 4·w·((k1+k2)·m2 + k2·m1) = -(k1+k2)·k2 + k2²
展开和重新排列,因此只有 LHS 包含带有 k1
的项:
(k1+k2)·k2 - 4·w·(k1+k2)·m2 = 4·w·k2·m1 - 4·w²·m1·m2 + k2²
重排:
(k1+k2)·(k2 - 4·w·m2) = 4·w·k2·m1 - 4·w²·m1·m2 + k2²
除以LHS的第二项:
k1+k2 = (4·w·k2·m1 - 4·w²·m1·m2 + k2²) / (k2 - 4·w·m2)
并减去k2
:
k1 = (4·w·k2·m1 - 4·w²·m1·m2 + k2²) / (k2 - 4·w·m2) - k2
简化:
k1 = (k2·(m1+m2) - w·m1·m2) / (k2/(4·w) - m2)