二次插值法

机仪学院 研1104班

郑生龙 1108020111

#include

#include

#define e 0.001

#define step 0.01

float f(float x)

{

float y=x*x-9*x;/*****输入目标函数******/

return(y);

}

/**********进退法*********/

find(float *v,float *b)

{

float x1,x2,x3,t,h;

float f1,f2,f3;

int n=0;

h=step;

x1=0;

x2=x1+h;f1=f(x1);f2=f(x2);

if(f2>f1)

{h=-h;

t=x2;

x2=x1;

x1=t;}

x3=x2+h;

f3=f(x3);

do { h=2*h;x1=x2;x2=x3;x3=x2+h;f1=f2;f2=f3;f3=f(x3);n=n+1;

}

while(f3

if(x1>x3)

{t=x1;x1=x3;x3=t;}

*v=x1;*b=x3;

return(n);

}

/*******二次插值法********/

chazhi(float *lmin)

{

float a,x4,b,x1,x2,x3,c1,c2;

float f1,f2,f3,f4,h;

int n=1;

h=step;

find(&a,&b);

x1=a;

x3=b;

x2=(x1+x3)/2;

f1=f(x1);

f2=f(x2);

f3=f(x3);

loop: c1=(f3-f2)/(x3-x2);

c2=((f2-f1)/(x2-x1)-c1)/(x2-x3);

x4=0.5*(x1+x3-c1/c2);

f4=f(x4);

if((f2-f4)/f2

{

/*****输出最小值******/

if(f2

{

*lmin=x2;}

else

{

*lmin=x4;}

}

else

if((x4-x2)*h>0)

{

if(f2>=f4)

{

x1=x2;

f1=f2;

x2=x4;

f2=f4;

n++;

goto loop;}

else

{

x3=x1;

f3=f1;

n++;

goto loop;}}

else

{

if(f2>=f4)

{

x3=x2;

f3=f2;

x2=x4;

f2=f4;

n++;

goto loop;}

else

{

x1=x4;

f1=f4;

n++;

goto loop;}}

return(n);/******返回迭代次数******/

}

/*********主函数*********/

main()

{

float a,b,x,min;int n1,n2;

n1=find(&a,&b); /******* 其中n1、n2为进退法与二次插值法的迭代次数 ****/ n2=chazhi(&x);

min=f(x);

printf("\n 范围是从%.3f到%.3f.",a,b); printf("\n 进退法迭代次数= %d.",n1); printf("\n 最小值是x= %.3f min= %.3f.",x,min);

printf("\n 二次插值法迭代次数= %d.",n2);

}

运行结果

机仪学院 研1104班

郑生龙 1108020111

#include

#include

#define e 0.001

#define step 0.01

float f(float x)

{

float y=x*x-9*x;/*****输入目标函数******/

return(y);

}

/**********进退法*********/

find(float *v,float *b)

{

float x1,x2,x3,t,h;

float f1,f2,f3;

int n=0;

h=step;

x1=0;

x2=x1+h;f1=f(x1);f2=f(x2);

if(f2>f1)

{h=-h;

t=x2;

x2=x1;

x1=t;}

x3=x2+h;

f3=f(x3);

do { h=2*h;x1=x2;x2=x3;x3=x2+h;f1=f2;f2=f3;f3=f(x3);n=n+1;

}

while(f3

if(x1>x3)

{t=x1;x1=x3;x3=t;}

*v=x1;*b=x3;

return(n);

}

/*******二次插值法********/

chazhi(float *lmin)

{

float a,x4,b,x1,x2,x3,c1,c2;

float f1,f2,f3,f4,h;

int n=1;

h=step;

find(&a,&b);

x1=a;

x3=b;

x2=(x1+x3)/2;

f1=f(x1);

f2=f(x2);

f3=f(x3);

loop: c1=(f3-f2)/(x3-x2);

c2=((f2-f1)/(x2-x1)-c1)/(x2-x3);

x4=0.5*(x1+x3-c1/c2);

f4=f(x4);

if((f2-f4)/f2

{

/*****输出最小值******/

if(f2

{

*lmin=x2;}

else

{

*lmin=x4;}

}

else

if((x4-x2)*h>0)

{

if(f2>=f4)

{

x1=x2;

f1=f2;

x2=x4;

f2=f4;

n++;

goto loop;}

else

{

x3=x1;

f3=f1;

n++;

goto loop;}}

else

{

if(f2>=f4)

{

x3=x2;

f3=f2;

x2=x4;

f2=f4;

n++;

goto loop;}

else

{

x1=x4;

f1=f4;

n++;

goto loop;}}

return(n);/******返回迭代次数******/

}

/*********主函数*********/

main()

{

float a,b,x,min;int n1,n2;

n1=find(&a,&b); /******* 其中n1、n2为进退法与二次插值法的迭代次数 ****/ n2=chazhi(&x);

min=f(x);

printf("\n 范围是从%.3f到%.3f.",a,b); printf("\n 进退法迭代次数= %d.",n1); printf("\n 最小值是x= %.3f min= %.3f.",x,min);

printf("\n 二次插值法迭代次数= %d.",n2);

}

运行结果


相关文章

  • 几种常用高程插值方法的比较
  • 总第91期第1期 几种常用高程插值方法的比较 ·51· 几种常用高程插值方法的比较 马 翔 黄要武 江西南昌 (江西省第二测绘院 摘 要 330046) 选取在ArcGIS 中最常用的五种方法,通过实验数据对比分析,阐述了几种常见的高程插值 ...查看


  • 线性拟合法
  • 摘 要 摘 要 插值法和曲线拟合是两种来源于实际,同时又广泛应用于实际的重要的数值 计算方法.随着计算机技术的不断发展以及人类计算机水平的逐步提高,他们在国民经济和科学研究中占据了越来越重要的地位.插值法与曲线拟合结合计算机技术例如MATL ...查看


  • 牛顿插值法的应用
  • 牛顿插值法在处理磁化曲线和铁损曲线 中的应用 指导老师:李国霞 院系:物理工程学院 专业:物理电子学 姓名:夏委委 学号:[1**********]6 一.牛顿插值法简介 在科学研究与其他领域中所遇到的许多实际问题中,经常会出现函数不便于处 ...查看


  • 计算方法拉格朗日插值
  • 第二章 插值法 知识点:拉格朗日插值法,牛顿插值法,误差,龙格现象,分段插值. 1.背景 实践活动中,表现事务变化的信息往往只是一些离散点值,例如 每个6小时记录一次温度,以此反映一天的气温变化状况,如下表图 温度(.C) 34 32 30 ...查看


  • 基于地形高程的云南省降雨量空间插值方法研究
  • 基于地形高程的云南省降雨量空间插值方法研究 [摘 要]本文结合云南省数字高程模型,以云南省平均降雨数据进行空间插值模拟,首先对常用的空间插值方法进行了阐述,然后结合云南省地形高程验证了插值效果,从而判断出更加适合山地降雨数据的空间插值. [ ...查看


  • 梅江河流域年均降雨量空间插值方法研究
  • 第2卷 第3期2007年9月出版 亚热带资源与环境学报 JournalofSubtropicalResourcesandEnvironment Vol12 No13September 2007 梅江河流域年均降雨量空间插值方法研究 刘胤雯1 ...查看


  • 插值算法与matlab代码
  • Matlab 中插值函数汇总和使用说明 MATLAB 中的插值函数为interp1,其调用格式为: yi= interp1(x,y,xi,'method') 其中x ,y 为插值点,yi 为在被插值点xi 处的插值结果:x,y 为向量, ' ...查看


  • 数值分析上机作业1
  • 数值计算方法上机题目1 1.实验1. 病态问题 1.实验1. 病态问题 实验目的: 算法有"优"与"劣"之分,问题也有"好"和"坏"之别.所谓坏问题就是问题本身 ...查看


  • 二次插值法 1
  • 南 昌 航 空 大 学 实 验 报 告 年 月 日 课题名称: 计算方法 班级: 09 指导老师评定: 一.实验目的 实验名称: 二次插值法 姓名: 同组人: 签名: 1.加深对二次插值法的理解 二.实验内容 从函数表 出发,用分段二次插值 ...查看


  • matlab实现lagrange插值和分段线性插值
  • 数值分析作业 姓名:虞驰程 题目: 函数:f x =1+x2在[-5,5]上,取n=10,对其进行分段线性插值和拉格朗日插值,在Matlab 中实现且绘图. Matlab 实现: 首先定义函数f ,在Matlab 中用function.m ...查看


热门内容