2015-09-28 3 views
0

Это функция, используемая для оценки определенного значения f (x), показывающая различные приближения в векторе y, для сравнения. Входной является функцией е (либо символической или function_handled), вектор значений п, и два значения x0 и х.Функция Matlab не возвращает вектор

g=sym(f); 
p(1)=subs(g,x0); 

k=1; 

for i=1:size(n) %Every iteration is an entry of y 
    while k<=n(i) %Recursive evaluation of the values 
     g=diff(g); 
     p(k+1)=subs(g,x0)/factorial(k-1); 

     k=k+1; 
    end 

    y(i)=double(subs(p,x)); 
end 

Я хочу, чтобы приблизить Р (х) как многочлен а + Ьх + сх^2 + ... в каждой записи, и цикл, а вычисляет, Ь, с ..., но y оказывается значением, а не вектором. Кроме того, если я попытаюсь сделать

[y1 y2]=(function) 

Отображается слишком много ошибок выходных аргументов. Не могли бы вы рассказать мне, почему MATLAB не понимает y в качестве вектора?

+2

Что заставляет вас думать '(function)' является каким-либо образом действительным синтаксисом matlab? И, пожалуйста, скажите, что вы не называетесь функцией 'function'. Если в вашем заголовке функции есть 'function [y1, y2] = funname (input)' в файле 'funname.m', вы вызываете свою функцию как' [yout1, yout2] = funname (входы); ' –

+0

я могу склонны думать, что размер (n) равен 1 – Abra001

+0

Andras: Фактическая функция называется vctay (сопоставление значений по многочленам Тейлора), поэтому я называю ее как [y1, y2] = vctay (входы), конечно. Agawa001: Я положил вектор-пример, n = [0 2], явно и сначала создав вектор. Я также использовал векторы с 7 элементами. –

ответ

1

Это должно сделать трюк. Хотя, честно говоря, я не могу понять вашу функцию как написанную. Где (x-x0) термин?

function y = vctay(f, n, x, x0) 
    g=sym(f); 

    n = sort(n(:)); 
    p = zeros(max(n)+1,1); 

    for i = 0:max(n) 
     %This is like you had it p(i) = (1/i!) f^i (x0) 
     p(i+1) = subs(g, x0)/factorial(i) ; 

     %This is just to save on a derivative in case it's costly 
     if (i == numel(p)) 
      break 
     end 

     %This is what you had 
     g = diff(g); 
    end 

    y = arrayfun(@(j) dot(p(1:j+1), (x - x0).^(0:j)) , n); %This is the secret sauce. It's the sum p_0 * (x - x0)^0 + p_1 (x - x0)^1 + ... 

end 
+0

Извините. Спасибо за ваш ответ, но он уже решен. Код, который я написал, не является полным кодом, который я использовал, потому что генерация терминов для вектора ** y ** была полностью записана в этом разделе. –

0

Я думаю, если вы знаете, сколько элементов у будет иметь лучший способ, чтобы определить, как у нулевого вектора и дает значение к нему по одному или если вы не знаете, расширить вектор y каждый раз (это не очень хорошая идея из-за времени!) как y (i + 1) = [y (i) sth];

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

  • Нет связанных вопросов^_^