200分MATLAB高手请进

来源:百度知道 编辑:UC知道 时间:2024/07/04 10:41:48
能用VB编的是最好,用MATLAB编著的也行!好的话加分,用VB好的话可加到500分
3) 求Lagrange插值多项式程序
Clear[lag,xi,x,yi];
xi=Input["xi="]
yi=Input["yi="]
n=Length[xi]-1;
p=Sum[yi[[i]]*
(Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),{j,1,i-1}]*
Product[(x-xi[[j]])/(xi[[i]]-xi[[j]]),
{j,i+1,n+1}]),{i,1,n+1}];
lag[x_]=Simplify[p]
说明 本程序用于求n次Lagrange插值多项式。程序执行后,按要求通过键盘输入插值基点xi:{x0 , x1, ... , xn }和对应函数值yi:{ y0 , y1 , … , yn }后,程序即可给出对应的n次Lagrange插值多项式lag[x]。
程序中变量说明
xi:存放插值基点{x0 , x1, ... , xn }
yi: 存放对应函数值{y0 , y1 , … , yn}
lag[x]: 存放求出的n次Lagrange插值多项式Ln(x)
注:语句lag[x_]=Simplify[p]用简化形式给出对应的n次Lagrange插值多项式。
4) 例题与实验
例1.给定数据表
x 0 1 2 3
y=f(x) 1 3 5 12
用Lagrange插值法求三次插值多项式,并给出函数f(x)在x =1.4的近似值。
解: 执行Lagrange插值程序后,在输入的两个窗口中按提示分别输入

{0, 1, 2, 3}、{1, 3, 5, 12}

每次输入后用鼠标点击窗口的“OK”按扭,得如下插值函数:

所以得到三次插值多项式L3(x)=(6+22*X-15*X^2+5*X^3)/6

下面我给出完全按你的要求的全部代码,注意加分哦,我可是冲着那个500分来的

%by dynamic
%see also http://www.matlabsky.com
%contact me matlabsky@gmail.com
%2009.2.21
%

function [c,L,str,yi]=lagrange(x,y,xi)
%Lagrange(拉格朗日)插值
%基于N+1个点,通过P(x)=sum(y(k)*L(N,k)(x),k=0...N) 其中k=0,1...,N 计算Lagrange多项式
%
%输入参数
%-x 横坐标数据
%-y 纵坐标数据
%-xi 需要插值的x坐标
%输出参数
%-c 拉格朗日插值多项式系数
%-L 拉格朗日系数多项式
%-str 拉格朗日差值多项式表达式
%-yi 插值结果
%Example
% x=[0, 1, 2, 3];
% y=[1, 3, 5, 12];
% xi=0:0.1:3;
% [c,L,str,yi]=lagrange(x,y,xi)

%
%by dynamic
%see also http://www.matlabsky.com
%contact me matlabsky@gmail.com
%2009.2.21
%

w=length(x);
n=w-1;
L=zeros(w);
for kk=1:w
v=1;
for jj