Strrep не работает в Matlab для превращения String в функцию - PullRequest
3 голосов
/ 01 апреля 2012

Здравствуйте, я новичок в MATLAB, я хотел бы знать , как я могу превратить мою строку в функцию .Я хочу получить доступ к функции в виде строки от пользователя в стандартном формате Matlab (например, exp(-10*X)-sin(pi*X)-2*tanh(X)). Здесь X - переменная.Затем я хочу заменить 'X' переменными 'low' и 'high', чтобы вычислить значение функции в этих пределах.Я использовал «strrep» для этой цели.Я получаю следующие ошибки 1) Неопределенная функция или переменная «X».2) Я не вижу, был ли «X» заменен на «низкий» и «высокий».

Любая помощь будет по достоинству оценена.Ниже мой код.

    high=input('Upper Limit of the Interval : ');

    low=input('\nLower Limit of the interval : ');

    usr_funct=input('Enter The Function in standard Matlab Format.\nEnter "X" for the
    variable and * for multiply \n');    % Example exp(-10*X)-sin(pi*X)-2*tanh(X);

    middle = (low+high)/2;

    Flow =strrep(usr_funct, 'X', 'low');
    Fhigh =strrep(usr_funct, 'X', 'high');

   sprintf('Flow '); % This was to check if 'X' was replaced with 'low'. It is not printing anything

Ответы [ 3 ]

3 голосов
/ 01 апреля 2012

Использование:

usr_funct=input('Enter The Function...', 's');

Это вернет введенный текст в виде строки MATLAB, без вычисления выражений.

2 голосов
/ 01 апреля 2012

Я думаю, что вы ищете eval функцию . Это оценит строку как код matlab.

Вот пример:

str = 'exp(-10*X)-sin(pi*X)-2*tanh(X)' ; % let str be your math expression
high = 10; % Ask the user
low = -5; % Ask the user

% Now we evaluate for High and Low
X = low; % We want to evaluate for low
ResultLow = eval(str); % That will return your value for X = low
X = high; % We want to evaluate for low
ResultHigh = eval(str); % That will return your value for X = high
2 голосов
/ 01 апреля 2012

1) Неопределенная функция или переменная 'X'

Если вы посмотрите на документацию для input, он говорит, что по умолчанию он вычисляет выражение. Вам нужно добавить второй аргумент 's', чтобы сохранить строку.

2) Я не вижу, был ли «X» заменен на «низкий» и «высокий»

Вы должны набрать sprintf(Flow) вместо sprintf('Flow'). Последний просто выведет «Flow» на экран, а первый выведет значение Flow.

Наконец, функция eval может пригодиться позже, когда вы действительно захотите оценить свое выражение.

...