1

我编写了我的第一个 octave 脚本,它是用于根查找的增量搜索方法的代码,但我遇到了许多我发现难以理解的错误。以下是脚本:

clear 

syms x;

fct=input('enter your function in standard form: ');
f=str2func(fct); % This built in octave function creates functions from strings
Xmax=input('X maximum= ');

Xinit=input('X initial= ');

dx=input('dx= ');
epsi=input('epsi= ');
N=10; % the amount by which dx is decreased in case a root was found.

while (x<=Xmax)
    
    f1=f(Xinit);
    x=x+dx
    f2=f(x);
    if (abs(f2)>(1/epsi))
        disp('The function approches infinity at ', num2str(x));
        x=x+epsi;
    else
        if ((f2*f1)>0)
          x=x+dx;
    elseif ((f2*f1)==0)
        disp('a root at ', num2str );
        x=x+epsi;
    else
        if (dx < epsi)
          disp('a root at ', num2str);
          x=x+epsi;
        else
            x=x-dx;
            dx=dx/N;
            x=x+dx;
        end
    end
end
end  

运行时出现以下错误:

>> Incremental

enter your function in standard form: 1+(5.25*x)-(sec(sqrt(0.68*x)))
warning: passing floating-point values to sym is dangerous, see "help sym"
warning: called from
    double_to_sym_heuristic at line 50 column 7
    sym at line 379 column 13
    mtimes at line 63 column 5
    Incremental at line 3 column 4
warning: passing floating-point values to sym is dangerous, see "help sym"
warning: called from
    double_to_sym_heuristic at line 50 column 7
    sym at line 379 column 13
    mtimes at line 63 column 5
    Incremental at line 3 column 4
error: wrong type argument 'class'
error: str2func: FCN_NAME must be a string
error: called from
    Incremental at line 4 column 2

下面是增量搜索方法的流程图: 在此处输入图像描述

4

1 回答 1

0

问题发生在这一行:

fct=input('enter your function in standard form: ');

这里input接受用户输入并对其进行评估。它试图将其转换为数字。在下一行,

f=str2func(fct)

你假设fct是一个字符串。

要解决问题,请告诉input将用户的输入原样返回为字符串(请参阅文档):

fct=input('enter your function in standard form: ', 's');
于 2020-09-21T20:27:31.597 回答