首页 > 解决方案 > 拉格朗日多项式未在 Octave 中绘制

问题描述

这个问题需要一个拉格朗日多项式 L(c) 来代替看起来很复杂的函数 f。此外,在 [1:0; 之间绘制函数 f 和 L(c);10:0]。但是,在代码计算出 k 的值之后,它似乎无法创建绘图和图形。我究竟做错了什么?附上以下代码。谢谢你!

clear
pkg load symbolic
graphics_toolkit('gnuplot')
syms m x
c = []
for i = 1: 0.5 : 10
  c = [c,i]
endfor
d = length(c)
k = []
f = 3.* (1 .- ( 8 ./ vpa(pi.^2) .* ((1 ./ cosh(vpa(pi) .* vpa(x) ./ 2)) .+ symsum(1 ./ ((2 .* m .+ 1).^2 .* cosh((2 .* m .+ 1) .* vpa(pi) .* vpa(x) ./ 2)), m,1 ,Inf)))) ./ ((1 .- ( 192 ./ vpa(x) .* vpa(pi.^5)).*(tanh(vpa(pi) .* vpa(x) ./ 2) .+ symsum(tanh((2 .* m .+ 1) .* vpa(pi) .* vpa(x) ./ 2) ./ (2 .* m .+ 1).^5, m,1 ,Inf))));
for i = 1:d
  A = (1 - ( 192 / vpa(c(i)) * vpa(pi^5))*(tanh(vpa(pi) * vpa(c(i)) / 2) + symsum(tanh((2 * m + 1) * vpa(pi) * vpa(c(i)) / 2) / (2 * m + 1)^5, m, 1, Inf)))
  B = 1 - ( 8 / vpa(pi^2) * ((1 / cosh(vpa(pi) * vpa(c(i)) / 2)) + symsum(1 / ((2 * m + 1)^2 * cosh((2 * m + 1) * vpa(pi) * vpa(c(i)) / 2)), m, 1, Inf))) 
  K = 3 * B / A
  k = [k,K]
endfor
col = c(1)
matrixc = [];
for m = 1:d;
  prod = 1;    
  for t = 1:d
    if col == ((m+1)/2)
      col = col .+ ((10-1)/(d-1));
    endif   
    sol = (x.-vpa(col))./(vpa((m+1)/2).-vpa(col));
    prod = prod*sol;   
    col = col .+ ((c(2)-c(1))/(d-1));  
  endfor
  h = k(m);
  p = vpa(h).*prod;
  matrixc = [matrixc,p];
  col = 1;
endfor
L=sum(matrixc);
L
ezplot(L,[c(1),c(d)]);
hold on;
k(1)
plot(c,k);
legend('Lagrange Polynomial','K(x)');
xlabel('x-axis');
ylabel('y-axis');```


标签: octave

解决方案


您正在尝试绘制一个符号变量。我不知道这是否可能,但在这种特殊情况下,至少转换会导致问题

首先通过转换为 收集符号变量的值,double然后您可以按预期绘制:

plot( c, double(k) );

推荐阅读