построение нескольких функций на октаву. Я уже искал ответ, но что-то не работает - PullRequest
0 голосов
/ 12 ноября 2018

Пусть f - непрерывная вещественная функция, определенная на интервале [a, b].Я хочу приблизить эту функцию кусочно-квадратичным полиномом.Я уже создал матрицу, которая суммирует эти полиномы.Допустим, я рассматриваю равномерное разбиение интервала на N частей (следовательно, N + 1 балл).

У меня есть матрица A размером N, умноженная на 3, где строка k представляет связанный квадратичный полином.с k-интервалом этого разбиения в естественной форме (строка [abc] представляет собой многочлен a + bx + cx ^ 2).Я уже создал метод для поиска этой матрицы (очевидно, это зависит от выбора моих точек интерполяции внутри каждого интервала, но это не имеет значения для этого вопроса).

Я пытаюсь построить соответствующийфункционировать, но у меня есть некоторые проблемы.Я использовал ту же идею, что и в Подобный вопрос .Это то, что я написал

x=zeros(N+1,1);
%this is the set of points defining the uniform partition
for i=1:N+1
 x(i)=a+(i-1)*((b-a)/(N));

end
%this is the length of my linspace for plotting the functions
l=100

А теперь я рисую функции:

figure;
hold on;
%first the original function
u=linspace(a,b,l*N);
v=arrayfun( f , u);
plot(u,v,'b')

% this is for plotting the other functions
for k=1:N
  x0=linspace(x(k),x(k+1));
  y0=arrayfun(@(t) [1,t,t^2]*A(k,:)',x0);
  plot(x0, y0, 'r');
end

Проблема в том, что for строит ту же функцию f, и я не знаю почему.Я пробовал с несколькими различными функциями.Я уверен, что моя матрица А верна.

1 Ответ

0 голосов
/ 13 ноября 2018

Пожалуйста, напишите минимальный рабочий пример, который можно запустить в виде отдельного кода или скопировать / вставить от людей здесь, чтобы проверить, где у вас может быть ошибка - часто в процессе сокращения вашего кода до его простых принципов таким образом, выв конечном итоге выяснить, в чем проблема самостоятельно.Но, в любом случае, я написал один сам и не могу воспроизвести проблему.

figure;
hold on;

# arbitrary values for Minimal Working Example
N = 10;
x = [10:10:110];   # (N+1, 1)
A = randn( N, 3 ); # (3  , N)
a = 100; b = 200; l = 3;
f = @(t) t.^2 .* sin(t);

%first the original function
u = linspace(a,b,l*N);
v = arrayfun( f , u);
plot(u,v,'b')

for k = 1 : N
  x0 = linspace( x(k), x(k+1) )
  y0 = arrayfun( @(t) ([1, t, t.^2]) * (A(k, :).'), x0 )
  x0, y0
  plot(x0, y0, 'r');
endfor

hold off;

Вывод:

image

Вы делаете что-то другое?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...