v=[0,500,2000,5000]; k=[1e-5,1.15e-5,1.8e-5,4.0e-5]; n=length(v); x=0:10:5000; h=length(x); Lagrange(v,k,x,h,n) function L=Lagrange(v,k,x,h,n) %lagrange for s=1:h for i=1:n ai=1; bi=1; for m=1:n ai=(x(s)-v(m))*ai; if m~=i bi=(v(i)-v(m))*bi; end end li=ai/bi; L(s)=k(i)*li+L(s); subplot(3,1,1); plot(x,L); end end这段用拉格朗日插值计算的Matlab代码有什么问题,应该如何修改
时间: 2023-12-06 08:02:47 浏览: 131
AqaraS1E-v2.0.9固件修改版
5星 · 资源好评率100%
这段代码有两个问题:
1. 在计算 L 时,没有为 L 赋初值,应该在循环之前先将 L 赋为全零向量。
2. 在 subplot 函数的位置不对,应该将 subplot 函数放在循环之外,否则会在每次循环中都新建一个子图,导致程序运行缓慢。
修改后的代码如下:
```
function L=Lagrange(v,k,x,h,n)
% lagrange
L = zeros(1,h); % 初始化 L
for i=1:n
ai=1;
bi=1;
for m=1:n
ai=(x-v(m))*ai;
if m~=i
bi=(v(i)-v(m))*bi;
end
end
li=ai/bi;
L = k(i)*li+L;
end
subplot(3,1,1);
plot(x,L);
```
这样就可以正确地计算 L,并且只会生成一个子图。
阅读全文