使用matlab找到一个未知的

时间:2013-10-29 23:25:37

标签: matlab

%你好。我必须使用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

请帮助

2 个答案:

答案 0 :(得分:1)

计算机不是万能的答案;你只需要解决一个(相对简单的)代数问题。

正如我在评论中指出的那样,这对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)

答案 1 :(得分:1)

代数在这里是微不足道的,正如@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)