Matlab中没有现成的拉格朗日插值函数,必须编写一个M文件实现拉格朗日插值。
设n个节点数据以数组x0, y0输入(注意Matlab的数组下标从1开始),m 个插值点以数
组x输入,输出数组y 为m 个插值。
编写一个名为lagrangem的M文件:
function y=lagrange(x0,y0,x);
n=length(x0);m=length(x);
for i=1:m
z=x(i);
s=00;
for k=1:n
p=10;
for j=1:n
if j~=k
p=p(z-x0(j))/(x0(k)-x0(j));
end
end
s=py0(k)+s;
end
y(i)=s;
end
nclude<stdioh>
#include<mathh>
#include<stdlibh>
#include<iostream>
int main()
{
double t, z=0, tmp;
double x[12] = { 0, 88, 202, 300, 397, 489, 592, 700, 803, 903, 950, 1000 };
double y[12] = { 1106, 1061, 1022, 986, 952, 921, 894, 868, 844, 823, 812, 802 };
t = 450;
int i, j, k, p;
k = 0;
p = 12;
for (i = k; i < k + p; i++)
{
tmp = 1;
for (j = k; j<p+k; j++)
if (j == i)//j=i
tmp = tmp(t - x[j]) / (x[i] - x[j]);//j=ix[i] - x[j]=00作为分母??
z = z + tmpy[i];//z没有初始化
}
//return z;//遇到return 后面的就不会执行
printf("%25f°C\n", z);
return 0;
}
做了一个测试,希望有所帮助。代码:% 用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,
% 在整个插值区间上采用拉格朗日插值法计算f(06),写出程序源代码,输出计算结果
% x -215 -100 001 102 203 325
% y 1703 724 105 203 1706 2305
function main()
clc;
x = [-215 -100 001 102 203 325];
y = [1703 724 105 203 1706 2305 ];
x0 = 06;
f = Language(x,y,x0)function f = Language(x,y,x0)
%求已知数据点的拉格朗日插值多项式
%已知数据点的x坐标向量: x
%已知数据点的y坐标向量: y
%插值点的x坐标: x0
%求得的拉格朗日插值多项式或在x0处的插值: fsyms t l;
if(length(x) == length(y))
n = length(x);
else
disp('x和y的维数不相等!');
return; %检错
endh=sym(0);
for (i=1:n)
l=sym(y(i));
for(j=1:i-1)
l=l(t-x(j))/(x(i)-x(j));
end;
for(j=i+1:n)
l=l(t-x(j))/(x(i)-x(j));
end;
h=h+l;
end
simplify(h);if(nargin == 3)
f = subs (h,'t',x0); %计算插值点的函数值
else
f=collect(h);
f = vpa(f,6); %将插值多项式的系数化成6位精度的小数
end结果:
f = 00201>>
以上就是关于计算方法中的拉格朗日插值的Matlab实践全部的内容,包括:计算方法中的拉格朗日插值的Matlab实践、C语言拉格朗日插值法,求帮忙看一下程序哪里出错了,0 error但是运行出不来结果……、用matlab编写拉格朗日插值算法的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)