QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 22404|回复: 12
打印 上一主题 下一主题

[分享]插值软件langrang

[复制链接]
字体大小: 正常 放大
ilikenba 实名认证       

1万

主题

49

听众

2万

积分

  • TA的每日心情
    奋斗
    2024-6-23 05:14
  • 签到天数: 1043 天

    [LV.10]以坛为家III

    社区QQ达人 新人进步奖 优秀斑竹奖 发帖功臣

    群组万里江山

    群组sas讨论小组

    群组长盛证券理财有限公司

    群组C 语言讨论组

    群组Matlab讨论组

    跳转到指定楼层
    1#
    发表于 2005-3-20 11:55 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta

    软件名称:EXCEL自定义插值函数插值计算数值计算 $ C$ }, F# Q- d版本号: 04y09m28 1 ] P9 ~: \' u( C7 C分类: 工程设计应用 " o# Q* F+ h' J& W7 A* Y) P! Y$ u6 {性质: 免费软件. ]9 J9 Y/ s1 Y1 p$ ^ 使用说明:

    . Z+ ~- b& d. w( r1 V# I

    人们对EXCEL普遍熟悉的功能是表图的处理,不太知道其在工程计算(如锅炉设计计算)中的应用。复杂的工程计算常常用专业编程语言(Fortran、C、Pascal 等)来编制计算程序解决,用专业编程语言编制工程计算程序往往有下面二个缺点:. M8 x; p( S7 D ' p r$ ~6 S8 m( l2 M4 [ 1) 编程语言专业性强,一般工程技术人员难以掌握,由这些专业编程语言编制的计算应用程序的维护、修改、升级都比较困难。

    6 e0 Q+ f, I- I+ Y5 ` Y& m

    2) 由专业编程语言编制的工程计算应用程序人机界面不友好,常常需要复杂的输入前、输出后处理。

    9 N' _4 n' [2 G+ K# r3 I

    EXCEL每一个单元格就是一个电子表格,很容易进行一般的加、减、乘、除、乘方、开方,而三角函数、指数函数在EXCEL中可以直接引用内部函数。用EXCEL编制一般的工程计算程序还需解决的有以下两个问题:(1)循环计算,(2)表、单曲线、曲线组的查找(如:锅炉设计计算中的焓值)。对于问题(1)循环计算,EXCEL在工具菜单中提供了两个命令:单变量求解和规划求解,利用这两条命令很容易解决问题(1)。对于问题(2)表、曲线的查找,EXCEL没有提供现成的函数,但也可用VLOOKUP、MATCH、IF、OFFSET等函数的组合勉强近视解决,本文重点介绍表、曲线的查找自定义函数的定义及使用。 ; W/ O |/ }, I 9 Z5 S2 D* I& f. T 为了更好地解决曲线查找的问题,应用C++程序设计语言,用拉格朗日插值计算法在EXCEL中建立了自定义函数,单曲线插值函数TWLQ(变量,"带路径的保存数据的文件名"),曲线组插值函数THLQ(变量1,变量2,"带路径的保存数据的文件名")。单曲线插值函数、曲线组插值函数的"带路径的保存数据的文件"包含着特定对映表、曲线的信息和计算精度的要求 (文件为Notepad编辑的txt文件) 。 1 m4 O6 b4 q0 T0 a+ }% v* t# {7 |, @8 F单曲线lagrange插值函数:double twlq(double x,char* filename); & C0 ~0 L9 G# g* B7 Z2 F double twlx(double q,char* filename);( } X- p) u) T; J 曲线组lagrange插值函数:$ N( p$ U( I* M double thlq(double x,double y,char* filename); 1 }" f% ^+ w1 v double thlx(double y,double q,char* filename);# R) Y; q' l. V% P2 W" @* ~ double thly(double x,double q,char* filename);。

    . J2 y% y6 e# B+ G; ~* k

    例:单曲线插值函数 "带路径的保存数据的文件"结构如下:6 o7 N7 ]4 P2 i+ P7 z2 m @ Description @5 n8 Q# c( Q" ]8 \( O9 f5 M n, nsel; 8 }, g; R$ O1 Z) cx[0],x[1], x[2],··, x[n-2],x[n-1];9 G- P: @% n) {- m8 p% B q[0],q[1], q[2],··, q[n-2],q[n-1];0 f4 g/ Q2 x1 ^ MinX=0.7,MaxX=0.9,OverRangeAlm=1,X=电压,XUnit=mv,Q=电流,QUnit=mA

    3 o- j' |; M# K) a) v3 r

    注解:2 y" P* |4 h0 o D* ]2 Z# t- V2 o( R Description:用户自定义描述字符串(Description中不可有@符号); 8 S1 x. I! Q: p3 n$ Q7 @ n: 总插值点个数;! P3 R! {3 H5 R1 w9 H( |8 R nsel:实际参与插值计算的插值点个数; + i, N5 n4 @$ B2 ^" h MinX=0.7,MaxX=0.9 取值范围; 5 N' @: M( E/ b' K7 G5 Q# E9 ], y. ] OverRangeAlm=1 越限报警 1:报, 0:不报;- A4 K, G3 Y6 C6 w# v3 E X=电压,XUnit=mv,变量名称,单位。

    / X- s6 s( `8 N( F9 t

    ****结论:8 q/ F a" ^1 A: Y l)图形化界面的插值函数数据文件生成器 LCZMaker 方便快捷生成单曲线或曲线组插值函数数据文件。 3 @0 q: E) ?" b% s' g1 \ @' s 2)应用EXCEL自定义插值函数,在EXCEL中进行工程计算编程极为便利,比专业编程语言程序设计更易学易用、直观明了,用EXCEL编制的工程计算应用程序更易维护、修改、升级。 6 h( I" U; i+ w, B; X; i 3) EXCEL本身长于表格制作,在EXCEL中进行工程计算编程人机界面友好,输入前、输出后处理方便简单。 7 ?( z1 t+ V1 i# f7 L# G) H) Y c 4)在某大型锅炉厂电站锅炉性能设计计算中已显神力。

    : ?$ [ C& }' D* G' G2 q

    附含壁温计算,强度计算,热电偶/阻,水阻力,烟气阻力,蒸汽性质等现成数据。

    # Q/ T7 n2 s& s4 e6 n. c

    [分享]插值软件langrang.zip

    419.84 KB, 下载次数: 85, 下载积分: 体力 -2 点

    [分享]插值软件langrang

    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持1 反对反对0 微信微信
    ww991616        

    0

    主题

    3

    听众

    17

    积分

    升级  12.63%

    该用户从未签到

    新人进步奖

    回复

    使用道具 举报

    ft12345 实名认证       

    0

    主题

    0

    听众

    13

    积分

    升级  8.42%

    该用户从未签到

    自我介绍
    200 字节以内

    不支持自定义 Discuz! 代码
    回复

    使用道具 举报

    0

    主题

    3

    听众

    14

    积分

    升级  9.47%

    该用户从未签到

    自我介绍
    爱打羽毛球的程序员

    1. 1 P' v$ e, F: |( {- U  D) I
    2. /* TODO: Lagrange interpolating + z$ L7 _- h: n8 Z, q) N3 B, T3 d
    3. *
      : G2 w0 b( N& {3 k* G0 i# Q
    4. * For example, if lg2.71 = 0.4330, lg2.72 = 0.4346, then lg2.718 = ?. O% @, O0 @# J4 E# y2 `7 C4 r
    5. * In this situation, it could be solved via lagrange interpolating
      - t6 @0 e8 g- B\" s) q\" V
    6. *) g: F6 S4 `6 I( b8 _8 r, c% G
    7. * */6 X5 E6 N# W- p0 V/ ^
    8. ) C: S9 r) n3 w( T, `
    9. #include <stdio.h>
      % }* Y9 M8 D+ \1 N, Z& f, e7 W1 |/ K
    10. #include <stdlib.h>5 P4 s# S0 `. h( i# T
    11. #include <string.h>9 w! Q9 O0 _0 W\" k+ d. A! C
    12. * U8 k# f0 Q& ]8 I3 T) Q\" `5 G1 K7 p
    13. #define DEBUG 0; V+ s5 b0 q: m- r+ i/ U# m3 N- \3 z

    14. 7 r/ t3 Y/ ?3 o; w- ~+ U
    15. static float m_p = 0.5635;) p. s  \7 G: s0 v& x  Q; t
    16. static char *m_xi = NULL;
      6 S' ]/ x$ m' `) z) e) Z+ a: e
    17. static char *m_yi = NULL;
      8 W8 h- S  g* v& e. L, K' N; `0 w; w0 r
    18. static float m_arr[] = {};- K/ W+ z9 @3 s+ w# ?
    19. static unsigned int m_n = 0;
      / h) c% H6 d7 [' p9 h# U5 `' u
    20. & U5 R8 M! U; E! T$ [6 `7 }4 U/ v: y, o
    21. static void m_lagrange_interpolating_usage();; m) }- Q7 s+ {1 N. B8 T
    22. static int m_lagrange_interpolating_set_n_arr();2 ~: w. R( v% |$ I
    23. static float m_lagrange_interpolating();; ?  i  U* v6 d$ I) f

    24. 1 G1 a1 z8 `4 y4 l1 e
    25. static void
      * O' p% F+ J( ]\" _1 S  T
    26. m_lagrange_interpolating_usage()
      4 O3 U; R4 b( z% ^- B
    27. {
      # ~. W0 h  X- h( ~* Z
    28.   printf("Lagrange Interpolating Usage:\n");
      ) h* [4 W& Q0 G# O- Z3 w' c7 \
    29.   printf("bin/li -p ** -x ** -y **\n");
        h0 r4 J9 X) L\" F/ [
    30.   printf("-p 0.5635\n");7 [& ?9 H0 @- [
    31.   printf("-x 0.56160,0.56280,0.56401,0.56521\n");4 ~6 U# Z1 R; U8 t9 v/ L8 j% \
    32.   printf("-y 0.82741,0.82659,0.82577,0.82495\n");1 e$ ]' r) z* p' \\" x
    33. }7 e1 E) p6 _- C/ a8 e/ p$ ^. Q, R, j7 U$ r
    34. 8 B5 R8 o) Q& ]7 w; Y
    35. static int ) B* N: j. L  C
    36. m_lagrange_interpolating_set_n_arr() ; j- Z: D* E! Y: J5 [' Q9 n: s
    37. {0 z+ _$ |; G+ U. V5 o# t
    38.   int xi_n = 0;
      * C$ Z\" O5 v' M
    39.   int yi_n = 0;0 V/ e# E0 t\" E( A0 T( Q  E
    40.   int n = 0;
      : ?8 S/ X; m: n2 c\" V; ?
    41.   char *token = NULL;2 V) P* u% l+ p/ t0 G  N* n5 q6 A& B
    42.   const char *delim = ",";  G- Z6 V6 h) h& H/ A$ f3 j8 m

    43. ( J& b; o3 q# M1 G- x( Y1 y. ^- G
    44.   token = strtok(m_xi, delim);
      + A2 m\" D: ~1 c
    45.   while (token)
      % R/ \  a4 ~6 c9 w6 z
    46.   {
      8 R2 |5 I$ U0 Q9 A0 J3 T
    47.     xi_n++;
      7 [$ a0 C# c( A% Z# D2 {0 t& L
    48.     n++;, h) s8 _* I5 d2 O2 W9 _3 b
    49.     m_arr[n] = (float) atof(token);
      , J0 o8 P2 K\" E: V5 I, F\" q; @
    50.     token = strtok(NULL, delim);
      5 y9 d2 i7 _1 R- B1 b& H0 b
    51.   }
      8 p; g. U4 Z9 w, V  Y

    52. 6 ]2 m% B1 n3 L( r5 H\" F
    53.   token = strtok(m_yi, delim);* {* c# z6 L% \$ `; E5 O2 T/ I% J# w
    54.   while (token)
      4 b% s) q. I$ L
    55.   {
      . ~- f# D\" S5 r; `+ C5 D3 p
    56.     yi_n++;5 i$ d' d1 S$ F. z
    57.     n++;
      \" q. x- A9 @; R4 t; a$ E) d
    58.     m_arr[n] = (float) atof(token);
      $ y5 ^, }  p; \
    59.     token = strtok(NULL, delim);
      3 P8 G+ [% L6 X, l! t\" H0 [# O
    60.   }( Q8 U' n$ R5 [- _0 j1 K) Q$ ?' `
    61.   
        Y2 C+ e8 [0 z  ]9 Q+ C
    62.   if (xi_n != yi_n)
      ) F4 u, j% _0 V9 @( X' b
    63.   {2 X1 q  p1 B/ @8 G. j
    64.     return 0;% M4 Z% g2 |3 N; L) x0 v: Y
    65.   }
      $ |. X) b0 O! u) g7 l\" G0 R6 x4 d

    66. / T% O( z/ Q/ c- ~4 n0 m
    67.   m_n = xi_n = yi_n;
      ) S6 l2 n1 F3 }# Q1 S3 R  ?$ B! t

    68. - y0 W( x8 P9 T
    69.   return 1;; e2 M+ c( u\" Z
    70. }
      5 F: S- L( N3 V, ]! z/ \2 a5 v
    71. % X0 \7 P! h8 d% z
    72. static float
      ! p. _1 H, R. d: [) M7 T
    73. m_lagrange_interpolating() * f2 |, d; \) v- o
    74. {
      # Z+ g+ R- a, f
    75.   float l = 0.00000;% r\" T$ w2 t0 x1 _
    76.   float li;8 z+ U\" K! k+ N# i& ~
    77.   int i;2 P/ P% g6 L7 E& y' H* i# a+ f
    78.   int j;
      - m' |* o/ b+ T
    79. 2 ~+ J- t( d0 P7 ]
    80. #if DEBUG3 ?. N( d* v3 Q6 [% N\" e; N( ?' o
    81.   printf("DEBUG at %d: enable debug mode\n", __LINE__);- J8 F% c& L6 G8 C% p
    82.   unsigned int m_n = 3;
      + k% O5 u6 M2 q+ G( ]8 B. j
    83.   float m_p = 0.5635;9 ?: I( i/ J. l5 M9 m
    84.   float m_x[] = {0.56160, 0.56280, 0.56401, 0.56521};0 m8 m7 z/ X$ Y9 {8 ]
    85.   float m_y[] = {0.82741, 0.82659, 0.82577, 0.82495};
      & y- p- `: r1 }, G; m
    86.   1 }) I8 H0 O3 U4 R
    87.   for (i = 0; i < m_n; i++)! G. G$ h+ D- L' J: U# S
    88.   {
      ! j$ C9 Y. E1 @' J6 D\" |
    89.     li = 1.0000000;
      4 k8 P( n- V/ l* z6 e6 x8 W
    90.     for (j = 0; j < m_n; j++)
      7 k  I$ ^% {& E8 V- X
    91.     {
      5 m+ {' y4 Z; h& W
    92.       if (j != i)' F! N* e0 G* x/ o$ S# I  s\" v: @
    93.       {
      + Y; \9 Z\" n: @3 n/ o1 ]1 \
    94.         li = li * (m_p - m_x[j]) / (m_x[i] - m_x[j]);
      : d1 J) t; E( @% o( K
    95.       }6 G  ?' ~4 c  V8 N  _% E* A5 C+ s
    96.     }: N$ R: M9 i+ t* N
    97.     l = l + li * m_y[i];5 _- |$ E9 w+ h8 J
    98.   }
      ( b: G/ [5 l) W' N8 Q# g# Z& E5 `
    99. #else* t, F; B4 N3 S) Y/ \7 q
    100.   if (!m_lagrange_interpolating_set_n_arr())
      ' L4 ?# g2 T+ E; m0 c  E$ Y& Z0 X
    101.   {& o) b- v% ^. p* V/ W4 R\" U
    102.     printf("Error: xi and yi counter is diff\n");9 V8 {, a9 _4 e
    103.     ) H! K) R7 }$ d- P/ W
    104.     return 0;
      - l3 L$ P, V. X/ b\" d+ n
    105.   }. Q0 _2 C6 j. W6 s) \. [2 C

    106. ( z9 }5 g% |# f# {6 j  f. }\" z
    107.   for (i = 0; i < m_n; i++)
      . j8 c9 T0 E% b* W- O/ q
    108.   {
      % M6 V+ V2 |5 c1 Y
    109.     li = 1.0000000;! D/ E% D- }( R2 {; }* Q
    110.     for (j = 0; j < m_n; j++) 8 y& v! `+ }1 F; P  K0 T2 A
    111.     {  k% |! L5 y& X# v9 ]9 X+ V\" d6 o
    112.       if (j != i) 7 Z$ i$ F/ {7 h% h2 d
    113.       {  f7 B9 \0 h# \- W. R
    114.         li = li * (m_p - m_arr[j + 1]) / (m_arr[i + 1] - m_arr[j + 1]);6 s( s! ?! q5 i- k- r
    115.       }: g0 {6 e# H; ?. t6 ?5 N8 F8 N
    116.     }\" o; O+ |/ b: f
    117.     l = l + li * m_arr[i + m_n + 1];
      # G: B' v$ m# Z% |
    118.   }$ x( u. H6 Y+ e6 N
    119. #endif
      . n1 `6 v; \( w
    120.   J/ \, z! ~) Q9 P) N, d' B' M
    121.   return l;! E. B3 u/ Y+ b$ F\" i
    122. }
      % V\" F1 N. C% p! F
    123. ! j) X- y  T1 ~) d* p8 G- E6 C. F
    124. int
      0 c  X. M: f7 X\" v
    125. main(int argc, char **argv) 6 n3 i) U% p: x
    126. {1 v: ^9 Q3 w1 Q6 J\" j9 X
    127.   int c;( H; B# M- O1 s9 I
    128.   extern char *optarg;6 Z5 {: ?8 A- G* Y
    129.   float res;+ t+ Q' a6 L& A# j
    130. 7 x, f, E. e. T3 c: y
    131.   if (argc < 2) 3 w# v7 w4 T( x+ S: B
    132.   {
      ! y: I  Q# p6 f- v9 f
    133.     m_lagrange_interpolating_usage();- h/ j4 o* r' F: [: {5 [
    134.    
      # c. I) D8 b* i' R; `
    135.     return -1;/ K+ w% h) }! _$ h- k* S7 Q. \1 m0 l+ B) k
    136.   }. i& F6 Q3 a& P! v5 x. i. ?
    137. 1 B: C( x7 t5 k5 R\" L
    138.   while ((c = getopt(argc, argv, "p:x:y:")) != -1)
      4 x; M2 y' O' H9 b
    139.   {! K! U3 I1 M# p; D
    140.     switch (c)
      4 Q$ N$ i5 i* c
    141.     {
      0 Y) n$ R0 Y2 P4 a' Z1 ]1 B) w
    142.       case 'p':5 v8 D4 v9 v' j: j! c) k7 d1 v
    143.               m_p = (float) atof(optarg);
      2 N  v, J3 S/ K- z
    144.       case 'x':2 r0 m& b! R, g5 p9 T- @% E
    145.         m_xi = optarg;0 l$ g/ |7 f$ A
    146.         break;& E! k/ _9 m4 f% y5 c! n8 A3 R+ W& ~
    147.       case 'y':
      % E- t; A5 m  X$ M
    148.         m_yi = optarg;
      & \% r4 T3 P+ L8 P- ]: R
    149.         break;
      $ u. C: I+ ?' ~$ @5 b8 m, C& Q
    150.     }
      % }8 |, J6 Z$ j% q/ Q, |1 d
    151.   }\" H5 Z) }/ O* J+ r( Q8 A
    152. % G9 e# J7 u& k
    153.   res = m_lagrange_interpolating();
      ! {9 X4 W, a# Q; V& w+ [
    154.   printf("Lagrange interpolating with %.4f result is %.7f\n", m_p, res);
      , u6 f7 n, |- e
    155.   
      . l# N: G% J/ M
    156.   return 0;) L5 M4 w! M# v0 x7 n& O
    157. }; J6 W3 ~) H. Z. N% g/ ]: T
    复制代码
    回复

    使用道具 举报

    lll111 实名认证       

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    回复

    使用道具 举报

    xhz-hhu        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    depht858        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    hastykeys        

    0

    主题

    0

    听众

    4

    积分

    升级  80%

    该用户从未签到

    回复

    使用道具 举报

    芸芸芸        

    0

    主题

    0

    听众

    2

    积分

    升级  40%

    该用户从未签到

    回复

    使用道具 举报

    mao233        

    0

    主题

    0

    听众

    1

    积分

    升级  20%

    该用户从未签到

    自我介绍
    好好学习
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-7-27 13:44 , Processed in 0.538742 second(s), 104 queries .

    回顶部