计算方法——插值法程序实现(一)

例题

给出的函数关系表,分别利用线性插值及二次插值计算的近似值。

|-----------------------------------|----------|----------|----------|----------|----------|
| | 0.1 | 0.2 | 0.3 | 0.4 | 0.5 |
| | 1.105171 | 1.221403 | 1.349859 | 1.491825 | 1.648721 |

参考代码一:Python代码实现(自编码)

python 复制代码
import math
"""
:parameter用于计算插值多项式的系数
"""
def Parameters(data_x,data_y,size):
    parameters=[]
    i = 0
    while i<size:
        j = 0
        temp = 1
        while j<size:
            if i!=j:
                temp*=data_x[i]-data_x[j];
            j += 1
        parameters.append(data_y[i]/temp);
        i += 1
    return parameters
"""
:Calculate用于计算拉格朗日插值公式计算后的值
"""
def Calculate(data_x,parameters,x):
    return_value = 0;
    i = 0
    while i < len(parameters):
        temp = 1
        j = 0
        while j<len(parameters):
            if i!=j:
                temp*=x-data_x[j];
            j+=1
        return_value+=temp*parameters[i]
        i+=1
    return return_value

x1 = [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代码实现(自编码)

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用于计算插值多项式的系数

Matlab 复制代码
function parameters = Parameters(data_x,data_y,size)
parameters=[];
i=1;
while i<=size
    j=1;
    temp=1;
    while j<=size
        if i ~= j
            temp=(temp*(data_x(i)-data_x(j)));
        end
        % disp(temp);
        j=j+1;
    end
    parameters=[parameters,data_y(i)/temp];
    % disp(parameters);
    i=i+1;
end

Calculate函数

Calculate用于计算拉格朗日插值公式计算后的值

Matlab 复制代码
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~=j
            temp = temp*(x-data_x(j));
        end
        j=j+1;
    end
    return_value = return_value+temp*parametres(i);
    i = i+1;
end

MATLAB编码计算结果

参考书目

[1] 李新栋,许文文,张绪浩,任永强. 基于Python的计算方法[M]. 北京:电子工业出版社,2023.

相关推荐
梦想科研社几秒前
【无人机设计与控制】四旋翼飞行无人机姿态控制ADRC非线性自抗扰控制Simulink仿真
算法·数学建模·matlab·无人机
h177113472053 分钟前
定制相亲交友系统如何提升用户体验
大数据·开发语言·人工智能·小程序·系统开发
逐梦苍穹10 分钟前
速通GPT:Improving Language Understanding by Generative Pre-Training全文解读
论文阅读·人工智能·gpt·语言模型·论文笔记
为为-180-3121-145515 分钟前
“AI大语言模型+”助力大气科学相关交叉领域实践技术应用
人工智能·语言模型·自然语言处理
文艺倾年20 分钟前
【大模型专栏—进阶篇】语言模型创新大总结——“三派纷争”
人工智能·pytorch·语言模型·自然语言处理·大模型
陈敬雷-充电了么-CEO兼CTO24 分钟前
自然语言处理系列六十八》搜索引擎项目实战》搜索引擎系统架构设计
人工智能·gpt·搜索引擎·ai·自然语言处理·chatgpt·aigc
⊙月25 分钟前
CMU 10423 Generative AI:lec5(Encoder-only Transformers + 阅读材料Bert, ViT)
人工智能·深度学习·aigc·bert
强哥之神29 分钟前
白话:大型语言模型中的幻觉(Hallucinations)
人工智能·机器学习·语言模型·自然语言处理·llm·llama·hallucinations
妄想...32 分钟前
最大余额法,解决百分比计算相加不等于100%(扇形/饼图百分比使用的此算法)
前端·javascript·算法
JovaZou36 分钟前
[Python学习日记-21] Python 中的字符编码(上)
开发语言·python·学习