bugfix> plot > 投稿

だから、私は与えられた間隔[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.

それは、私のプロット関数plot2dが何らかの形で間違っていることを意味しますが、その理由は理解できません。 「長方形」と「スタイル」を変えてみましたが、それは助けにはならず、さらに、それらは曲線の境界と形状を決定するだけです。私は自分の間違いがどこかにあると信じ始めていますが、見つけられないようです。 「rect」と「style」を削除すると、いくつかのグラフが表示されますが、それらは直線であり、Lagrange-Interpolationではないため、まったく正しくありません。誰かが私の間違いを指摘できるなら、私はとても感謝しています。 乾杯!

回答 1 件
  • 実行するためのヒントを次に示します。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,,,)
    
    

    それらがオプションの引数であるため、なぜこれを行う必要があるのか​​を理解することはできませんが、少なくとも、あなたはあなたの結果を持っています(または、少なくともさらに一歩進んでいるように見えます!)

あなたの答え