2012-05-29 2 views
0

У меня есть уравнение f(β) = cosh β cos β + 1 = 0, и мне нужно использовать корни βi, чтобы найти некоторые частоты. Формула для частотуравнение в matlab с использованием newton

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); 
+0

Удалось решить проблему? – mathematician1975

ответ

0

Является ли это просто

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

Должно быть ab ove остальной части вашего кода, и раскомментирован?

Так попробуйте это:

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  
0

Если f и fd векторы, которые используются в качестве входных параметров для вашей функции, вы, вероятно, переходящими в обновленном параметре p0=p в качестве индекса в эти векторы. Ваш код показывает, что вы вычисляете p= p0 - f(p0)/fd(p0);, а затем в обновлении цикла p0 с p. Эта эвакуация p (и, следовательно, p0) включает в себя этап деления и, следовательно, вряд ли даст результат целочисленного значения для p0. Поскольку это значение индекса индекса в f и fd, это объясняет сообщение об ошибке, которое вы получаете, так как явно вы не можете иметь нецелые индексы в матрицу или вектор.