2014-12-02 27 views
0

我很努力地將符合我的土木工程項目要求的函數從符號表達式轉換爲函數。我需要使用fzero來查找函數的根。這裏H應該是變量,我需要找出H的值。該功能是這樣將符號表達式轉換爲Matlab中的函數句柄R2013b

function x_c = f_x_c(s,H0,VA,Lo,qc,EAo,NF,Sj,Fj) 

if (s < 0) || (s > Lo) 
    disp('The value of s is invalid') 
    disp(['s = ' num2str(s)]); 
    return 
end 


C1 = H/qc; 
if NF == 0 
    n = 0; 
    sn = 0; 
    sum_Fj = 0; 
end 


if NF >= 1 
    Sj_Q = [0; Sj; Lo]; 
    %Determine n and sn if 0 <= s < Lo: 
    if s < Lo 
     STOP = 0; 
     k = 0; 
     while STOP == 0 
      k = k + 1; 
      if (s >= Sj_Q(k,1)) && (s < Sj_Q((k + 1),1)) 
       STOP = 1; 
      end 
     end 
     n = k - 1; 
     sn = Sj_Q(k,1); 
    end 
    %Determine n and sn if s = Lo: 
    if s == Lo 
     n = NF; 
     sn = Sj(NF,1); 
    end 
    sum_Fj = sum(Fj(1:n,1)); 
end 


x_c = (H/EAo)*s; 
x_c = x_c + C1*asinh((qc*s - VA + sum_Fj)/H) + ... 
    - C1*asinh((qc*sn - VA + sum_Fj)/H); 


for j = 1:n 
    sk = Sj_Q((j + 1),1); 
    sk_1 = Sj_Q(j,1); 
    sum_Fj = sum(Fj(1:(j - 1))); 


    x_c = x_c + ... 
     + C1*asinh((qc*sk - VA + sum_Fj)/H) + ... 
     - C1*asinh((qc*sk_1 - VA + sum_Fj)/H); 

end 

我想用這個f_x_c.m文件中的主要文件,其中我會找到這個方程的根。 有人可以指導我如何做到這一點?

我已經嘗試使用下面的代碼,但我沒有成功。

if (s < 0) || (s > Lo) 
    disp('The value of s is invalid') 
    disp(['s = ' num2str(s)]); 
    return 
end 

C1 = @(H) (H/qc); 
if NF == 0 
    n = 0; 
    sn = 0; 
    sum_Fj = 0; 
end 


if NF >= 1 
    Sj_Q = [0; Sj; Lo]; 
    %Determine n and sn if 0 <= s < Lo: 
    if s < Lo 
     STOP = 0; 
     k = 0; 
     while STOP == 0 
      k = k + 1; 
      if (s >= Sj_Q(k,1)) && (s < Sj_Q((k + 1),1)) 
       STOP = 1; 
      end 
     end 
     n = k - 1; 
     sn = Sj_Q(k,1); 
    end 
    %Determine n and sn if s = Lo: 
    if s == Lo 
     n = NF; 
     sn = Sj(NF,1); 
    end 
    sum_Fj = sum(Fj(1:n,1)); 
end 


x_c [email protected](H) (H/EAo)*s; 
x_c [email protected](H) (x_c(H) + (C1(H))*asinh((qc*s - VA + sum_Fj)/H) + ... 
    - (C1(H))*asinh((qc*sn - VA + sum_Fj)/H)); 


for j = 1:n 
    sk = Sj_Q((j + 1),1); 
    sk_1 = Sj_Q(j,1); 
    sum_Fj = sum(Fj(1:(j - 1))); 


    x_c [email protected](H) (x_c(H) + ... 
     + C1(H)*asinh((qc*sk - VA + sum_Fj)/H) + ... 
     - C1(H)*asinh((qc*sk_1 - VA + sum_Fj)/H)); 

end 

編輯:

我要解決的主要文件中的以下公式:

equation = f_x_c(inext_length, H0, vertical_reaction, inext_length, qc, EAo, NF, hanger_arc_length, point_hanger_force) + 1400; 
% Whatever equation f_x_c returns, I have to add another number to it(like here it is 1400), then solve this equation using fzero. 

因此,在主文件中,我寫這樣的:

equation = @(H) f_x_c(inext_length, H0, vertical_reaction, inext_length, qc, EAo, NF, hanger_arc_length, point_hanger_force); 

equation = @(H) (equation(H) + 1400); 
answer = fsolve(equation, H0); 
+0

怎麼樣matlabFunction:HTTP://www.mathworks.com/help/symbolic/matlabfunction.html – 2014-12-02 14:49:32

+0

@ Benoit_11我Matlab的R2013b。我猜這個功能在這個版本中不起作用。 – 2014-12-02 14:51:39

+0

嘗試調用'fzero'在哪裏?你想要解決什麼功能?我實際上沒有看到任何符號數學。你只是想解決整個第一個功能?然後使用@f_x_c。但我也注意到在這個函數中'H'是未定義的。參數是'H0'。 – Peter 2014-12-02 14:53:11

回答

2

您的問題的模擬答案可能看起來像

function x_c = f_x_c(H,A,B,C,D) 
    x_c = H*A; 
    x_c = x_c + B*asinh(C/H) - B*asinh(D/H); 
end 

,並求解一個呼叫

H = fzero(@(H)(f_x_c(H,1,1,1,1)+1400),1); 
+0

你知道,我是Matlab新手。我只用它來解決我的土木工程問題。我真的不知道什麼功能句柄。因此,我花了2天的時間嘗試將符號轉換爲函數句柄,但都未成功。你很容易做到了。非常感謝,夥計。我真的很感激你。 – 2014-12-04 23:30:21

+1

不客氣,祝你好運:) – Kostya 2014-12-05 09:59:14