matlab中使用牛顿的方程

时间:2012-05-29 14:48:55

标签: matlab

我有一个等式f(β) = cosh β cos β + 1 = 0,我需要使用βi根来找到一些频率。频率的公式是

fi = sqrt((βi^4 * E*I) / (4*pi*m*L^3) );

我收到此错误,我不知道问题在哪里

??? Subscript indices must either be real positive integers or logicals.

Error in ==> C:\Documents and Settings\Laura Lupas\Desktop\subiect88\frecventa.m
On line 18  ==>     p= p0 - f(p0)/fd(p0);

这是我的代码:

  function p = frecventa(f,fd,p_start,eps);

  p0=p_start;
  i=1;

  L = 0.9;    %lungimea grinzii in m
  b = 0.025;  %latimea grinzii in metri
  h = 0.0025;  %inaltimea in metrii
  dens = 7850; % kg/m cub
  v = b * h * L ; % volum
  m = dens * v;


  E =  2000e11; %modulul de elasti N/m patrat
  I= (b*h^2)/12;%mometul de inertie

  while(i <= 2)
     p= p0 - f(p0)/fd(p0);
     if abs(p-p0) < eps
        return
     end
      i = i + 1;
      p0=p;

      p = sqrt((p0^4 * E*I) / (4*pi*m*L^3) )
  end    



  % beta = 0:0.001:pi
  %f = cosh(beta).*cos(beta) + 1;
  %fd = sinh(beta).*cos(beta) - cosh(beta).*sin(beta);

2 个答案:

答案 0 :(得分:0)

只是那个

  % beta = 0:0.001:pi
  %f = cosh(beta).*cos(beta) + 1;
  %fd = sinh(beta).*cos(beta) - cosh(beta).*sin(beta);

应该高于其余代码,并且取消注释?

所以试试这个:

  beta = 0:0.001:pi
  f = cosh(beta).*cos(beta) + 1;
  fd = sinh(beta).*cos(beta) - cosh(beta).*sin(beta);
  p0=p_start;
  i=1;

  L = 0.9;    %lungimea grinzii in m
  b = 0.025;  %latimea grinzii in metri
  h = 0.0025;  %inaltimea in metrii
  dens = 7850; % kg/m cub
  v = b * h * L ; % volum
  m = dens * v;


  E =  2000e11; %modulul de elasti N/m patrat
  I= (b*h^2)/12;%mometul de inertie

  while(i <= 2)
     p= p0 - f(p0)/fd(p0);
     if abs(p-p0) < eps
        return
     end
      i = i + 1;
      p0=p;

      p = sqrt((p0^4 * E*I) / (4*pi*m*L^3) )
  end    

答案 1 :(得分:0)

如果ffd是您用作函数输入参数的向量,则可能会将更新后的参数p0=p作为这些向量的索引传递。您的代码显示您正在计算p= p0 - f(p0)/fd(p0);以及稍后使用p0更新p的循环。 p(以及p0)的这种评估涉及一个除法步骤,因此不可能产生p0的整数值结果。由于这是索引索引到ffd的值,它将解释您收到的错误消息,因为很明显您不能将非整数索引放入矩阵或向量中。