Matlab R2013b中符号表达式到函数句柄的转换

Matlab R2013b中符号表达式到函数句柄的转换,matlab,equation,Matlab,Equation,我正在努力将我的土木工程项目所需的一个函数从符号表达转换成符号表达。我需要使用fzero查找函数的根。这里H应该是变量,我需要找出H的值。函数如下所示 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

我正在努力将我的土木工程项目所需的一个函数从符号表达转换成符号表达。我需要使用
fzero
查找函数的根。这里
H
应该是变量,我需要找出
H
的值。函数如下所示

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
编辑:

我想在主文件中求解以下方程:

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

对你的问题的模拟回答可能看起来像

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
对solver的调用是

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

matlabFunction呢:@Benoit_11我有Matlab R2013b。我猜这个函数在这个版本中不起作用。尝试调用
fzero
的地方在哪里?你想解什么函数?我实际上没有看到任何符号数学。你只想解整个第一个函数吗?然后使用@f_x_c。但是我也注意到在这个函数中,
H
是未定义的。参数是
H0
@Peter我已经编辑了这个问题,并在主文件中添加了如何调用
fzero
。你能重新检查一下吗?@Peter
H
是我想要的变量,而
H0
是一个常量。目前我没有在函数中使用
H0
的值,但以后会用到。你知道,我对Matlab是新手。我只用它来解决我的土木工程问题。我真的不知道什么是函数句柄。因此,我花了两天时间试图将符号转换为函数句柄,但都没有成功。你这么容易就做到了。非常感谢,伙计。我真的很感激你。
H = fzero(@(H)(f_x_c(H,1,1,1,1)+1400),1);