Лагранж-Интерполяция-не показывает графики из-за сообщения об ошибке, которое я не могу исправить - PullRequest
0 голосов
/ 25 мая 2018

Итак, я пытаюсь написать программу, которая вычисляет интерполяцию Лагранжа в заданном интервале [a, b].Мой код работает (я распечатал результаты по различным пунктам программы), но я не могу получить хороший сюжет.Это мой код:

funcprot(0)
clear all

clf()

    a = -5 
    b = 5 
    j = 100 
    n = [3;9;15;36] 

function fx = func(x) 

    fx = -x/(2+x^6)

endfunction

function y = Lagrange(t, f, x) 

    n_t = size(t,'r') 
    n_x = size(x,'r')
    disp(n_t)
    disp(n_x)
    y = zeros(n_x,1)

    for k = 1:n_x 

    POL = 0

    for i = 1:n_t

    L_k = 1

    for l = 1:n_t

    if (l ~= i) then 

    L_k = L_k * (x(k)-t(l))/(t(i)-t(l))

    end 

    end

    POL =  POL + f(i)*L_k

    end 

    y(k) = POL

    end

endfunction

    x = linspace(a,b,j)' 
    fx = func(x)
    m = size(n, 'r')



    for i=1:m

    xi = linspace(a,b,n(i))'
    fxi = func(xi)

    yi1 = Lagrange(xi, fxi, x) 

    subplot(2,m,i)
    plot2d(x,[yi1,fx], rect=[a,-0.4,b, 0.4], style=[2,5])
    plot2d(xi,fxi, style=[-6])
    title(strcat(['Number of grid-points =: ',string(n(i))]))

    c = zeros(n(i),1)

    for j=1:n(i) 

    c(j) = (a+b)/2+((b-a)/2)*cos(((2*j-1)*%pi)/(2*n(i)))

    end

    fc = func(c)

    yi2 = Lagrange(c,fc,x) 
    subplot(2,m,i+m)
    plot2d(x,[yi2,fx],rect=[a,-0.4,b, 0.4], style=[2,5])
    plot2d(c,fc, style=-6)
    title(strcat(['Chebyshev = ',string(n(i))]))

    end

Я всегда получаю следующее сообщение об ошибке:

plot2d: Wrong size for input argument #7: 2 < 101 expected.

Это означает, что моя функция plot2 plot2d как-то не так, но я не могу понять, почему,Я попытался изменить «прямоугольник» и «стиль», но это не помогло, и, кроме того, они только определяют границы и форму кривой.Я начинаю верить, что моя ошибка где-то еще, но я не могу найти.Когда я удаляю 'rect' и 'style', я получаю некоторые графики, но они совсем не корректны, так как это просто прямые линии, а не интерполяция Лагранжа.Буду очень признателен, если кто-то сможет указать на мою ошибку.Ура!

1 Ответ

0 голосов
/ 04 июня 2018

Вот несколько советов, как запустить его: попробуйте сопоставить параметры в порядке и количестве, запрошенном в описании plot2D:

plot2d(x,[yi1,fx], style=[2,5],,, rect=[a,-0.4,b, 0.4],)
plot2d(xi,fxi, style=[-6],,,)
...
plot2d(x,[yi2,fx], style=[2,5],,,rect=[a,-0.4,b, 0.4],)
plot2d(c,fc, style=-6,,,)

Я не могу понять, почему вы должны это сделать, так какони являются необязательными аргументами, но, по крайней мере, у вас есть ваш результат (или, похоже, вы сделали еще один шаг, по крайней мере!)

...