用拉格朗日插值多项式求值

function yi=Lagrange(x,y,xi)

%   函数说明:用拉格朗日插值多项式求值

%   参数说明:x为已知值,y为x对应的函数值,x,y均为向量,xi为所求插值点

%   返回值说明:yi为xi对应的函数值

%

%   作者:野渡无人

%   最后修改日期:2008.4.24

%

%>> x=[1 2 3];

%>> xi=2.1;

%>> y=[0.367879441 0.135335283 0.049787068];

%>> yi=Lagrange(x,y,xi)

%

% yi =

%

%    0.12016564406500

 

[m1,n]=size(x);

[m2,n2]=szie(y);

if m1>1 || m2>1

    error('请输入向量,而非矩阵!');

end

 

d_x=xi-x;    

L=zeros(1,n);

if prod(x(1)-x(2:n))==0 || prod(x(n)-x(1:n-1))==0

    error('错误:除0操作!请重新输入参数!')

    return

end

L(1)=prod(d_x(2:n))/prod(x(1)-x(2:n));

L(n)=prod(d_x(1:n-1))/prod(x(n)-x(1:n-1));

for i=2:n-1

    fenzi=prod(d_x(1:i-1))*prod(d_x(i+1:n));

    fenmu=prod(x(i)-x(1:i-1))*prod(x(i)-x(i+1:n));

    if fenmu==0

        error('错误:除0操作!请重新输入参数!')

        return

    end

    L(i)=fenzi/fenmu;

end

yi=sum(L.*y);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Matlab中,可以使用格朗多项式函数的近似。以下是一个使用三次格朗多项式的Matlab代码示例: ```matlab % 定义待函数 f = @(x) exp(x).*sin(x); % 定义节点 x = linspace(-2, 2, 5); % 可根据需要调整节点数量和范围 % 计算节点的函数 y = f(x); % 定义多项式的次数 n = length(x) - 1; % 定义多项式的变量 syms t; L = sym(ones(n+1, 1)); % 计算格朗基函数 for i = 1:n+1 for j = 1:n+1 if j ~= i L(i) = L(i) * (t - x(j)) / (x(i) - x(j)); end end end % 定义多项式 P = sum(y .* L); % 定义待近似的点 x_approx = 0; % 可根据需要调整近似点的 % 计算近似 f_approx = vpa(subs(P, t, x_approx)); % 输出结果 disp(['函数的近似为:', num2str(f_approx)]); ``` 在上述代码中,首先定义了待的函数`f`和节点`x`,然后计算了节点的函数`y`。接下来,使用符号计算工具箱定义了格朗多项式的变量`t`和基函数`L`。通过双重循环计算了每个基函数的,并将它们相乘得到多项式`P`。最后,定义了待近似的点`x_approx`,通过将`t`替换为`x_approx`计算了函数的近似`f_approx`。最后,通过disp函数输出了结果。 这个代码示例可以帮助你使用格朗多项式函数的近似。你可以根据需要调整节点的数量和范围,并修改待近似的点。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值