本文主要是介绍计算方法——插值法程序实现(一),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
例题
给出的函数关系表,分别利用线性插值及二次插值计算
的近似值。
0.1 | 0.2 | 0.3 | 0.4 | 0.5 | |
1.105171 | 1.221403 | 1.349859 | 1.491825 | 1.648721 |
参考代码一:Python代码实现(自编码)
import math
"""
:parameter用于计算插值多项式的系数
"""
def Parameters(data_x,data_y,size):parameters=[]i = 0while i<size:j = 0temp = 1while j<size:if i!=j:temp*=data_x[i]-data_x[j];j += 1parameters.append(data_y[i]/temp);i += 1return parameters
"""
:Calculate用于计算拉格朗日插值公式计算后的值
"""
def Calculate(data_x,parameters,x):return_value = 0;i = 0while i < len(parameters):temp = 1j = 0while j<len(parameters):if i!=j:temp*=x-data_x[j];j+=1return_value+=temp*parameters[i]i+=1return return_valuex1 = [0.2,0.3];
y1 = [1.221403,1.349859];
p1 = Parameters(x1,y1,len(x1));
target_point = 0.27;
real_value = math.exp(target_point);
fit_value = Calculate(x1,p1,target_point)
remainder = real_value-fit_value
print("===============线性拉格朗日插值==================");
print(f"点{target_point}处的真实值为{real_value}")
print(f"点{target_point}处的拟合值为{fit_value}")
print(f'拉格朗日插值余项为{remainder}');
print("===============二次拉格朗日插值==================");
x2 = [0.2,0.3,0.4];
y2 = [1.221403,1.349859,1.491825];
p2 = Parameters(x2,y2,len(x2))
fit_value_2 = Calculate(x2,p2,target_point)
remainder2 = real_value-fit_value_2
print(f"点{target_point}处的拟合值为{fit_value_2}");
print(f'拉格朗日插值余项为{remainder2}');
Python编码计算结果
参考代码二:MATLAB代码实现(自编码)
%可运行部分代码
clc,clear
format long
x1=[0.2,0.3];
y1=[1.221403,1.349859];
p1=Parameters(x1,y1,length(x1));
point=0.27;
real = exp(point);
disp('点0.27处的真实值为');
disp(real);
fitted1 = Calculate(x1,p1,point);
Remainder1 = real-fitted1;
disp('点0.27处的线性拉格朗日插值结果为');
disp(fitted1);
disp('点0.27处的线性拉格朗日插值余项为');
disp(Remainder1);
x2 = [0.2,0.3,0.4];
y2 = [1.221403,1.349859,1.491825];
p2 = Parameters(x2,y2,length(x2));
fitted2 = Calculate(x2,p2,point);
Remainder2 = fitted2-real;
disp('点0.27处的二次拉格朗日插值结果为');
disp(fitted2);
disp('点0.27处的二次拉格朗日插值余项为');
disp(Remainder2);
format short
Parameters函数
Parameter用于计算插值多项式的系数
function parameters = Parameters(data_x,data_y,size)
parameters=[];
i=1;
while i<=sizej=1;temp=1;while j<=sizeif i ~= jtemp=(temp*(data_x(i)-data_x(j)));end% disp(temp);j=j+1;endparameters=[parameters,data_y(i)/temp];% disp(parameters);i=i+1;
end
Calculate函数
Calculate用于计算拉格朗日插值公式计算后的值
function return_value = Calculate(data_x,parametres,x)
return_value=0;
i=1;
while i<=length(parametres)temp=1;j=1;while j<=length(parametres)if i~=jtemp = temp*(x-data_x(j));endj=j+1;endreturn_value = return_value+temp*parametres(i);i = i+1;
end
MATLAB编码计算结果
参考书目
[1] 李新栋,许文文,张绪浩,任永强. 基于Python的计算方法[M]. 北京:电子工业出版社,2023.
这篇关于计算方法——插值法程序实现(一)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!