2016-02-14 3 views
0

Итак, я выполнял эту работу с помощью Matlab, и каждый раз, когда я пытаюсь получить ответ, появляется новая проблема. Тот, который повторяет большинство на строке являетсяПроблема с Matlab с функциями

??? Input argument "x" is undefined. 

работы о выводе с MATLAB, я должен получить функцию с двумя Diferent метод вывода, и я должен получить эту таблицу. Большое спасибо всем, кто пытается ответить, что очень потерял эту тему.

clc,clear; 
h=1; 
x=1.2; 

derivada1=derivada_1(x,h); 
derivada2=derivada_2(x,h); 

for i=0:1:10 
    fprintf('%.10f %.10f %.10f\n',h*(10.^(-i)),derivada1,derivada2); 
end 

Функция я должен вывести это

function [ fx ] = funcion(x) 
%UNTITLED2 Summary of this function goes here 
% Detailed explanation goes here 
    fx=x.^3-3*x.^2-x+3; 

end 

Method1

function [ dfx1 ] = derivada_1(x,h) 
%UNTITLED4 Summary of this function goes here 
% Detailed explanation goes here 
    fx=feval(funcion,x); 
    fh2=feval(fx,x+h); 
    fh3=feval(fx,x-h); 
    dfx1=(fh2-fh3)/(2*h); 

end 

Метод 2

function [ dfx2 ] = derivada_2(x,h) 
%UNTITLED4 Summary of this function goes here 
% Detailed explanation goes here 
    fx=feval(funcion,x); 
    fh1=feval(fx,x+2*h); 
    fh2=feval(fx,x+h); 
    fh3=feval(fx,x-h); 
    fh4=feval(fx,x-2*h); 
    dfx2=(-fh1+8*fh2-8*fh3+fh4)/(12*h); 

end 

Code

Table of results

+0

Можете ли вы объяснить, что должен делать код? Вы оцениваете функцию с входным аргументом x, возвращая двойной, а затем вы хотите снова оценить его? – Daniel

+0

Код должен вывести функцию с помощью двух методов в точке x = 1.2. Не уверен в этом, но я думаю, что это так, у меня есть функция, называемая funcion, но только локально определена, поэтому мне нужно снова определить другие функции, чтобы работать, если я не получу ту же ошибку говоря, что fx не определен –

+0

'function [fx] = funcion (x)' - серьезно? –

ответ

1

Вы действительно слишком сложно это с помощью feval, это так просто:

function [ dfx1 ] = derivada_1(x,h) 
    fh2=funcion(x+h); 
    fh3=funcion(x-h); 
    dfx1=(fh2-fh3)/(2*h); 
end 

Проблема с исходным кодом был вы не использовали функцию ручки. feval(funcion,x) оценивает funcion и передает возвращаемые значения в значение feval, но funcion требует входных аргументов. Вместо этого он должен быть чем-то вроде feval(@funcion,x), передающим дескриптор функции (он же указатель функции на других языках программирования).

+0

Спасибо, вот и все! :) –

Смежные вопросы