octave - 拉格朗日多项式未在 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');```
解决方案
您正在尝试绘制一个符号变量。我不知道这是否可能,但在这种特殊情况下,至少转换会导致问题
首先通过转换为 收集符号变量的值,double
然后您可以按预期绘制:
plot( c, double(k) );
推荐阅读
- python - pyqt中的QTimer会丢失时间吗?
- math - 如何定义或命名函数 F(n) = n + (n-1) + (n-2) ... + 1
- pandas - 'Line2D' 对象没有属性 'kind'
- ubuntu - 使用 virt-install 安装 Ubuntu Server 18.04 但挂起
- php - 警告:strpos() 期望参数 1 是字符串,调用学说的 getRespository() 方法时给出的对象
- python - 想要有效地从 pyspark 中的字典数组派生一个数组
- mysql - 与组 concat 相对,根据 ID 的数量平均一列
- typescript - Typescript 类型推断在条件类型中不起作用
- flutter - Flutter/Dart:带参数的 getter
- sql - 如何为同一张表中的其他列创建键?