怎么用matlab利用拉格朗日插值计算法的原理编写并计算函数所在节点的近似值。 谢谢。
要求:编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,在整个插值区间上采用拉格朗日插值法计算f(0.54)写出程序源代码,输出计算结果。x0.40.50.60...
要求:编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,在整个插值区间上采用拉格朗日插值法计算f(0.54)写出程序源代码,输出计算结果。
x 0.4 0.5 0.6 0.7 0.8
f(x) -0.916291;-0.693147;-0.510826;-0.356675;-0.223144
我们老师给出了部分程序代码,要把这个补全,能否把这个补全呢? 不要你的那个啊 怎么那么复杂?
x0=[o.4;0.5;0.6;0.7;0.8];
y0=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144];
a=0;
i=1;
j=1;
for i=1:n
p=1;
n=5;
for j=1:n
if j~=i;
q=(x-x0(i))/(x0(j)-xo(i));
end
p=p*q;
end
a=a+p;
end 展开
x 0.4 0.5 0.6 0.7 0.8
f(x) -0.916291;-0.693147;-0.510826;-0.356675;-0.223144
我们老师给出了部分程序代码,要把这个补全,能否把这个补全呢? 不要你的那个啊 怎么那么复杂?
x0=[o.4;0.5;0.6;0.7;0.8];
y0=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144];
a=0;
i=1;
j=1;
for i=1:n
p=1;
n=5;
for j=1:n
if j~=i;
q=(x-x0(i))/(x0(j)-xo(i));
end
p=p*q;
end
a=a+p;
end 展开
2个回答
展开全部
.m文件
function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值,其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值,
%xx可以是向量。
syms x
n=length(x1);
for i=1:n
t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用来存放插值基函数
end
u=sum(L.*y1);
p=simplify(u) % p是简化后的Lagrange插值函数(字符串)
yy=subs(p,x,xx);
clf
plot(x1,y1,'ro',xx,yy,'*')
====================================
x=[ 0.4 0.5 0.6 0.7 0.8];
y=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144]';
yy=lagrange(x,y,0.54)
p =
- (14363668061545223*x^4)/6755399441055744 + (229230406283396627*x^3)/33776997205278720 - (6086876668119665137*x^2)/675539944105574400 + (23595121244981107513*x)/3377699720527872000 - 186390055565518223/70368744177664000
yy =
-0.6161
function yy=lagrange(x1,y1,xx)
%本程序为Lagrange1插值,其中x1,y1
%为插值节点和节点上的函数值,输出为插值点xx的函数值,
%xx可以是向量。
syms x
n=length(x1);
for i=1:n
t=x1;t(i)=[];L(i)=prod((x-t)./(x1(i)-t));% L向量用来存放插值基函数
end
u=sum(L.*y1);
p=simplify(u) % p是简化后的Lagrange插值函数(字符串)
yy=subs(p,x,xx);
clf
plot(x1,y1,'ro',xx,yy,'*')
====================================
x=[ 0.4 0.5 0.6 0.7 0.8];
y=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144]';
yy=lagrange(x,y,0.54)
p =
- (14363668061545223*x^4)/6755399441055744 + (229230406283396627*x^3)/33776997205278720 - (6086876668119665137*x^2)/675539944105574400 + (23595121244981107513*x)/3377699720527872000 - 186390055565518223/70368744177664000
yy =
-0.6161
更多追问追答
追问
我们老师给出了部分程序代码,要把这个补全,能否把这个补全呢? 不要你的那个啊 怎么那么复杂?
x0=[o.4;0.5;0.6;0.7;0.8];
y0=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144];
a=0;
i=1;
j=1;
for i=1:n
p=1;
n=5;
for j=1:n
if j~=i;
q=(x-x0(i))/(x0(j)-xo(i));
end
p=p*q;
end
a=a+p;
end
追答
x0=[0.4;0.5;0.6;0.7;0.8];
y0=[-0.916291;-0.693147;-0.510826;-0.356675;-0.223144];
a=0;
x=0.54
i=1;
j=1;
n=5;
for i=1:n
p=1;
q=1;
for j=1:n
if j~=i;
q=(x-x0(i))/(x0(j)-x0(i));
end
p=p*q;
end
a=a+p*y0(i);
end
a
x =
0.5400
>> a
a =
-0.6391
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询