我使用Matlab来查找非线性函数的根。该公式是漫长的,我已经用另一种.m
保存功能,它的代码是这样使用Matlab的非线性方程的根
function x_c = f_x_c(s,H,VA,Lo,qc,EA,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/EA)*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
变量是H
这里。代码没有问题,因为当我在主文件中输入以下内容时,它会返回那个冗长的等式。
syms x
equation = -(XB - XA) + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj); %Replaced H with variable H and all other arguments are pre-defined
现在,我要解决近H0
这个方程。当我把fzero(@(x)equation, H0)
,它给了我出外
Undefined function 'isfinite' for input arguments of type 'sym'.
Error in fzero (line 308)
elseif ~isfinite(fx) || ~isreal(fx)
Error in main (line 50)
fzero(@(x)equation, H0)
错误我怎样才能解决这个问题?
编辑:
方程至少有一个根,因为如果我用ezplot
绘制功能,我得到如下图所示。
@patrik不,我没有任何这样的变量。实际上,在'fzero.m'中,有一行有'isfinite'。该行如 '如果有(〜isfinite([fa fb]))||任何(〜isreal([fa fb]))' – 2014-12-02 08:37:23
对不起,我的坏。但是,我试图用更简单的函数重现错误,但是我目前无法重现错误。行'函数x_c = equation = XB -XA + f_x_c(s,x,VA,Lo,qc,EA,NF,Sj,Fj);'也不可运行。我能问你想做什么吗?你有一个函数文件,需要一个输入,并给出一个输出,你想找到的根? – patrik 2014-12-02 08:51:12
@patrik 是的,Sj和Fj应该是函数中的矩阵,这就是为什么你的代码可能没有运行。 代码太大了!你想让我在这里发布整个事情吗? – 2014-12-02 08:54:23