[分享]插值软件langrang
<P>软件名称:EXCEL自定义插值函数插值计算数值计算版本号: 04y09m28
分类: 工程设计应用
性质: 免费软件
使用说明:</P>
<P> 人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:
1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。</P>
<P> 2) 由专业编程语言编制的工程计算应用程序人机界面不友好,常常需要复杂的输入前、输出后处理。</P>
<P> EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。
为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。
单曲线lagrange插值函数:double twlq(double x,char* filename);
double twlx(double q,char* filename);
曲线组lagrange插值函数:
double thlq(double x,double y,char* filename);
double thlx(double y,double q,char* filename);
double thly(double x,double q,char* filename);。</P>
<P>例:单曲线插值函数 "带路径的保存数据的文件"结构如下:
@ Description @
n, nsel;
x,x, x,··, x,x;
q,q, q,··, q,q;
MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA</P>
<P> 注解:
Description:用户自定义描述字符串(Description中不可有@符号);
n: 总插值点个数;
nsel:实际参与插值计算的插值点个数;
MinX=0.7,MaxX=0.9 取值范围;
OverRangeAlm=1 越限报警 1:报, 0:不报;
X=电压,XUnit=mv,变量名称,单位。</P>
<P> ****结论:
l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。
2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。
3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。
4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。</P>
<P>附含壁温计算,强度计算,热电偶/阻,水阻力,烟气阻力,蒸汽性质等现成数据。 </P>
:):):):victory::):):):) :lol:lol:lol:lol好东西,谢谢斑竹
/* TODO: Lagrange interpolating
*
* For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?
* In this situation, it could be solved via lagrange interpolating
*
* */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define DEBUG 0
static float m_p = 0.5635;
static char *m_xi = NULL;
static char *m_yi = NULL;
static float m_arr[] = {};
static unsigned int m_n = 0;
static void m_lagrange_interpolating_usage();
static int m_lagrange_interpolating_set_n_arr();
static float m_lagrange_interpolating();
static void
m_lagrange_interpolating_usage()
{
printf("Lagrange Interpolating Usage:\n");
printf("bin/li -p ** -x ** -y **\n");
printf("-p 0.5635\n");
printf("-x 0.56160,0.56280,0.56401,0.56521\n");
printf("-y 0.82741,0.82659,0.82577,0.82495\n");
}
static int
m_lagrange_interpolating_set_n_arr()
{
int xi_n = 0;
int yi_n = 0;
int n = 0;
char *token = NULL;
const char *delim = ",";
token = strtok(m_xi, delim);
while (token)
{
xi_n++;
n++;
m_arr = (float) atof(token);
token = strtok(NULL, delim);
}
token = strtok(m_yi, delim);
while (token)
{
yi_n++;
n++;
m_arr = (float) atof(token);
token = strtok(NULL, delim);
}
if (xi_n != yi_n)
{
return 0;
}
m_n = xi_n = yi_n;
return 1;
}
static float
m_lagrange_interpolating()
{
float l = 0.00000;
float li;
int i;
int j;
#if DEBUG
printf("DEBUG at %d: enable debug mode\n", __LINE__);
unsigned int m_n = 3;
float m_p = 0.5635;
float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};
float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
for (i = 0; i < m_n; i++)
{
li = 1.0000000;
for (j = 0; j < m_n; j++)
{
if (j != i)
{
li = li * (m_p - m_x) / (m_x - m_x);
}
}
l = l + li * m_y;
}
#else
if (!m_lagrange_interpolating_set_n_arr())
{
printf("Error: xi and yi counter is diff\n");
return 0;
}
for (i = 0; i < m_n; i++)
{
li = 1.0000000;
for (j = 0; j < m_n; j++)
{
if (j != i)
{
li = li * (m_p - m_arr) / (m_arr - m_arr);
}
}
l = l + li * m_arr;
}
#endif
return l;
}
int
main(int argc, char **argv)
{
int c;
extern char *optarg;
float res;
if (argc < 2)
{
m_lagrange_interpolating_usage();
return -1;
}
while ((c = getopt(argc, argv, "p:x:y:")) != -1)
{
switch (c)
{
case 'p':
m_p = (float) atof(optarg);
case 'x':
m_xi = optarg;
break;
case 'y':
m_yi = optarg;
break;
}
}
res = m_lagrange_interpolating();
printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
return 0;
}
我要下载。我要下载。我要下载。我要下载。我要下载。我要下载。 谢谢谢谢,找了好久呢,谢谢楼主的分享 谢谢,正需要 谢谢,正需要呢! 谢谢,很想看看,没钱啊 谢谢分享,有了这个插值就方便多了
页:
[1]
2